-
Astar.py
- Υλοποιεί τον αλγόριθμο A*.
- Χρησιμοποιεί σωρό για διαχείριση ανοιχτών καταστάσεων και σύνολο για κλειστές.
-
Cube.py
- Δημιουργεί τον κύβο Rubik και ορίζει όλες τις περιστροφές (U, F, R, κλπ).
- Περιλαμβάνει μεθόδους για εμφάνιση του κύβου και εφαρμογή κινήσεων.
-
CubeState.py
- Αναπαριστά μια κατάσταση του κύβου.
- Υπολογίζει την ευρετική (heuristic) ως το άθροισμα των λανθασμένων χρωμάτων ανά πλευρά.
- Δημιουργεί παιδικές καταστάσεις με όλες τις πιθανές κινήσεις.
- Υλοποιεί συγκρίσεις καταστάσεων με
__hash__
και__eq__
.
-
Main.py
- Μπερδεύει τον κύβο με τυχαίες κινήσεις.
- Καλεί τον A* για επίλυση και εμφανίζει τη διαδρομή.
heuristic()
Η ευρετική συνάρτηση υπολογίζει το κόστος προσέγγισης από την τρέχουσα κατάσταση του κύβου προς την τελική λύση. Βασίζεται σε δύο κριτήρια:- Λανθασμένα Πλακίδια: Μετράει πόσα πλακίδια διαφέρουν από το χρώμα του κέντρου κάθε έδρας (αγνοώντας τα κεντρικά, που είναι πάντα σωστά).
- Βαθμονόμηση Γωνιών/Ακμών: Εφαρμόζει μεγαλύτερες ποινές για λάθος γωνιακά (+1.5 ανά πλακίδιο) και ακμές (+1.2 ανά πλακίδιο), καθώς αυτά απαιτούν περισσότερες κινήσεις για διόρθωση.
Το συνολικό κόστος κανονικοποιείται διαιρώντας με 8, ώστε να αντιστοιχεί καλύτερα στον πραγματικό αριθμό κινήσεων.
g
: Κόστος από την αρχική κατάσταση (αριθμός βημάτων).f = g + h
: Συνολικό σκορ για την επιλογή της επόμενης κατάστασης στον A*.
Αριθμός Κινήσεων Μπερδέματος
Αλλάξτε το num_moves=5
στο Main.py
:
scrambled_cube, scramble_moves = scramble_cube(original_cube, num_moves=5) # Παράδειγμα: 5 κινήσεις
Για να εκτελέσετε τον κώδικα, χρησιμοποιήστε την ακόλουθη εντολή:
python Main.py
=== Αρχική Κατάσταση Κύβου ===
W W W
W W W
W W W
O O O G G G R R R B B B
O O O G G G R R R B B B
O O O G G G R R R B B B
Y Y Y
Y Y Y
Y Y Y
=== Μπερδεμένος Κύβος ===
Κινήσεις για το μπέρδεμα: R -> R' -> B -> F' -> D
R R R
W W W
R R R
W O W G G G Y R Y B B B
W O W G G G Y R Y B B B
B B B W O W G G G Y R Y
O Y O
O Y O
O Y O
=== Αρχή Επίλυσης με A* ===
Βρέθηκε λύση σε 3 βήματα:
D' -> F -> B'
R R R
W W W
R R R
W O W G G G Y R Y B B B
W O W G G G Y R Y B B B
B B B W O W G G G Y R Y
O Y O
O Y O
O Y O
R R R
W W W
R R R
W O W G G G Y R Y B B B
W O W G G G Y R Y B B B
W O W G G G Y R Y B B B
O O O
Y Y Y
O O O
R R R
W W W
W W W
W O O G G G R R Y B B B
W O O G G G R R Y B B B
W O O G G G R R Y B B B
Y Y Y
Y Y Y
O O O
=== Επιλυμένος Κύβος ===
W W W
W W W
W W W
O O O G G G R R R B B B
O O O G G G R R R B B B
O O O G G G R R R B B B
Y Y Y
Y Y Y
Y Y Y
Απαιτούμενες Βιβλιοθήκες:
Εγκαταστήστε το numpy
με την εντολή:
pip install numpy