Skip to content

Anthippi/Rubik-s-Cube-Astar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Επίλυση κύβου Rubik χρησιμοποιώντας τον αλγόριθμο A*. Static Badge


Αρχεία

  1. Astar.py

    • Υλοποιεί τον αλγόριθμο A*.
    • Χρησιμοποιεί σωρό για διαχείριση ανοιχτών καταστάσεων και σύνολο για κλειστές.
  2. Cube.py

    • Δημιουργεί τον κύβο Rubik και ορίζει όλες τις περιστροφές (U, F, R, κλπ).
    • Περιλαμβάνει μεθόδους για εμφάνιση του κύβου και εφαρμογή κινήσεων.
  3. CubeState.py

    • Αναπαριστά μια κατάσταση του κύβου.
    • Υπολογίζει την ευρετική (heuristic) ως το άθροισμα των λανθασμένων χρωμάτων ανά πλευρά.
    • Δημιουργεί παιδικές καταστάσεις με όλες τις πιθανές κινήσεις.
    • Υλοποιεί συγκρίσεις καταστάσεων με __hash__ και __eq__.
  4. Main.py

    • Μπερδεύει τον κύβο με τυχαίες κινήσεις.
    • Καλεί τον A* για επίλυση και εμφανίζει τη διαδρομή.

Ευρετική (Heuristic)

  • 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

About

2D construction and solving of the Rubik's Cube using A (A-star).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages