Τοποθέτηση Απινιδωτών

Περιφέρεια Δυτικής Μακεδονίας
Οικισμοί 0 Πληθυσμός 0 Απινιδωτές 0
backend: ...

Πώς να διαβάσεις τον χάρτη

Κάθε σημείο είναι ένας οικισμός από τα στοιχεία της ΕΛΣΤΑΤ, τοποθετημένος σε συντεταγμένες που βρέθηκαν αυτόματα (OpenStreetMap / GeoNames) ή μπήκαν χειροκίνητα. Το χρώμα δείχνει πώς βρέθηκε η θέση — δηλαδή πόσο σίγουρο είναι το match:

όνομα
Το όνομα του οικισμού ταιριάξε ακριβώς με σημείο του OpenStreetMap (ή υπήρχε μόνο ένας υποψήφιος, ή διαλέχτηκε ο πλησιέστερος στον δήμο όταν υπήρχαν πολλοί ομώνυμοι). Η πιο αξιόπιστη κατηγορία.
fuzzy
Δεν βρέθηκε ακριβές όνομα, οπότε ο αλγόριθμος έψαξε για το πλησιέστερο σε γραφή όνομα μέσα στην περιοχή του δήμου (π.χ. "Παλαιόκαστρον" ≈ "Παλαιόκαστρο"). Λιγότερο σίγουρο — αξίζει οπτικός έλεγχος.
geonames
Δεν υπήρχε καθόλου στο OpenStreetMap· βρέθηκε με ακριβές όνομα στη δεύτερη πηγή δεδομένων, το GeoNames (χρησιμοποιείται μόνο ως εφεδρεία, όχι πρωτεύουσα πηγή).
geonames-fuzzy
Συνδυασμός των δύο παραπάνω: βρέθηκε στο GeoNames, αλλά με κατά προσέγγιση ταίριασμα ονόματος. Η λιγότερο σίγουρη κατηγορία.
χεράτα
Δεν βρέθηκε πουθενά αυτόματα — οι συντεταγμένες μπήκαν χειροκίνητα μετά από έλεγχο σε χάρτη.

Τύπος σημείου (δεύτερο φίλτρο)

Δείχνει τι είδους οικισμός είναι σύμφωνα με την πηγή: city/town/village/hamlet/locality από το OpenStreetMap, PPL/PPLR/PPLQ από το GeoNames (populated place / θρησκευτικός / εγκαταλειμμένος), και άγνωστο για τα χειροκίνητα σημεία που δεν έχουν τέτοια ταξινόμηση.

Όρια Δήμων

Τα χρωματιστά περιγράμματα δείχνουν τα επίσημα διοικητικά όρια των 13 δήμων της Δυτικής Μακεδονίας (πρόγραμμα «Κλεισθένης», 2019). Κλικ σε δήμο τον επιλέγει στο φίλτρο και κάνει zoom σε αυτόν· κλικ στο κουτάκι «Όρια Δήμων» τα κρύβει/δείχνει.

Βελτιστοποίηση τοποθέτησης απινιδωτών

Επίλυση πάνω στο τρέχον φιλτραρισμένο σύνολο (ό,τι δείχνουν τα παραπάνω φίλτρα δήμου/τύπου/μεθόδου/πληθυσμού) — δηλ. «λύση μόνο για έναν δήμο» είναι πραγματικά ανεξάρτητο πρόβλημα, όχι απλά φιλτραρισμένη προβολή. Οι αποστάσεις υπολογίζονται με πραγματικό οδικό δίκτυο (OSRM), όχι ευθεία γραμμή.

p-dispersion: επιλέγει p οικισμούς ώστε η ελάχιστη απόσταση μεταξύ τους να είναι όσο το δυνατόν μεγαλύτερη.
p-median: ελαχιστοποιεί τη μέση (σταθμισμένη με πληθυσμό) απόσταση.
p-center: ελαχιστοποιεί τη χειρότερη περίπτωση.
MCLP: μεγιστοποιεί τον πληθυσμό εντός κρίσιμης ακτίνας απόκρισης.

✓ Και τα 4 μοντέλα (p-dispersion, p-median, p-center, MCLP) λύνονται πλέον με πραγματικό solver (CPMpy).

Επίλυση σε παρασκήνιο (μπορεί να πάρει έως 1 ώρα)

Το «Επίλυση» ΔΕΝ μπλοκάρει τον χάρτη — η επίλυση τρέχει στο backend, εσύ βλέπεις μια ένδειξη προόδου (⏳ χρόνος) δίπλα στο κουμπί, και μπορείς να συνεχίσεις κανονικά με φίλτρα/χάρτη. Όταν τελειώσει (ή αποτύχει), θα δεις μια ειδοποίηση browser (αν το επιτρέψεις) ακόμα και αν έχεις αλλάξει καρτέλα. Το κουμπί «Άνοιξε σε νέα καρτέλα» εμφανίζεται μόνο μετά την ολοκλήρωση (δεν ανοίγει αυτόματα — οι browsers μπλοκάρουν αυτόματα ανοίγματα καρτελών χωρίς άμεση ενέργεια χρήστη).

Engine / Solver / Παραλλαγή / Distance constraints

Το Engine επιλέγει ΠΟΙΟ μοντέλο τρέχει: CPMpy (slot variables + AllDifferent, CP idiom, μέσω OR-Tools/ κ.λπ. — δες Solver) ή Gurobi (native, δικές του formulations — Kuby για p-dispersion, assignment-based x/y για p-median/center). Διαφορετική δομή, ΙΔΙΟ πρόβλημα — πρέπει να δίνουν το ίδιο βέλτιστο (το επιβεβαιώσαμε πάνω σε πραγματικά δεδομένα). Το Gurobi εμφανίζεται μόνο αν είναι πραγματικά αδειοδοτημένο εδώ.

Το dropdown Solver (μόνο για CPMpy engine) δείχνει μόνο ό,τι είναι πραγματικά εγκατεστημένο (π.χ. αν προστεθεί Gurobi/z3 θα εμφανιστεί μόνο του). Η Παραλλαγή (Element/Table, για p-dispersion) είναι δύο διαφορετικές κωδικοποιήσεις του ΙΔΙΟΥ μοντέλου — πρέπει να δίνουν πάντα το ίδιο αποτέλεσμα, διαφέρει μόνο η ταχύτητα. Το checkbox Distance constraints ανεβάζει ένα JSON με προαιρετικά όρια ελάχιστης απόστασης ΑΝΑ ΖΕΥΓΟΣ επιλεγμένων θέσεων (0-based slot indices 0..p-1) — ελέγχεται σε ΕΥΘΕΙΑ απόσταση (όχι OSRM), σκόπιμα. Μορφή αρχείου: {"constraints":[{"slot_a":0,"slot_b":1,"min_distance_km":5}]}. Μπορείς ΕΠΙΠΛΕΟΝ να ορίσεις όριο ανάμεσα σε ΥΠΑΡΧΟΝΤΑ απινιδωτή και μία νέα θέση, δίνοντας τις συντεταγμένες του υπάρχοντα απευθείας: {"existing_lat":40.51,"existing_lon":21.68,"slot_b":0,"min_distance_km":5} (δεν υποστηρίζεται στο Choco engine).

Υπάρχοντες απινιδωτές στα μοντέλα

Οι 229 ήδη υπάρχοντες απινιδωτές (κόκκινο εικονίδιο στον χάρτη, κάτω-αριστερό checkbox) μπορούν προαιρετικά να επηρεάσουν και την ίδια τη βελτιστοποίηση (πάντα φιλτραρισμένοι στο ΙΔΙΟ σύνολο δήμων με τα demand points):

Υπάρχοντες ως σταθερές θέσεις (p-dispersion/p-median/p-center): οι existing απινιδωτές θεωρούνται ΗΔΗ ανοιχτοί, το p αφορά ΜΟΝΟ τις νέες θέσεις προς τοποθέτηση — π.χ. στο p-median, ένας οικισμός μπορεί να εξυπηρετηθεί από existing αν είναι πλησιέστερα.
Λήψη υπόψη υπαρχόντων απινιδωτών (MCLP): αφαιρεί από το objective την κάλυψη που παρέχουν ήδη οι existing — μεγιστοποιείται μόνο η πρόσθετη κάλυψη από τις νέες θέσεις (όχι διπλή μέτρηση σημείων που καλύπτονται ήδη).

Candidate sites (για p-median / p-center / MCLP)

Οι γκρι κουκκίδες στον χάρτη είναι οι υποψήφιες θέσεις — πού επιτρέπεται να μπει απινιδωτής (διαφορετικό σύνολο από τα demand points, εκτός αν διαλέξεις την 1η επιλογή):

Ίδιοι οι οικισμοί: F = D, καμία ομαδοποίηση.
Πλασματικά κέντρα (k-means): σταθμισμένος με πληθυσμό μέσος όρος τοποθεσιών ανά ομάδα — μπορεί να "πέσει" ανάμεσα σε χωριά.
Πραγματικοί οικισμοί (k-medoids): ίδια ιδέα, αλλά η θέση είναι πάντα ένας υπαρκτός οικισμός.
Grid: κανονικά κελιά σταθερού μεγέθους· 1 candidate ανά κελί με ≥1 οικισμό.

Για k-means/k-medoids: το σύνολο (C) candidates μοιράζεται στις ομάδες (ανά δήμο/ΔΕ/global) ανάλογα με τον πληθυσμό τους, με εγγύηση ότι το άθροισμα είναι πάντα ακριβώς C (ή clamped σε σαφές όριο αν ζητηθούν περισσότερα απ' όσα χωρούν).