[PYTHON] Schreiben Sie ein Programm, um den 4x4x4 Rubik Cube zu lösen! 1. Übersicht

Was ist dieser Artikel?

Ich mache gerade einen Roboter, der 4x4x4 Rubik Cube (Rubik Revenge) löst und einen Weltrekord anstrebt. Die größte Hürde bei der Herstellung eines Roboters bestand darin, einen Algorithmus zu implementieren, um einen 4x4x4-Würfel in einer realistischen Zeit und mit so wenigen Schritten wie möglich zu lösen. Wenn Sie nachschlagen, werden Sie feststellen, dass es nur wenige Dokumente und Vorfahren zu 4x4x4 gibt. Ich schreibe diesen Artikel in der Hoffnung, dass er eines dieser wertvollen Materialien sein wird. GitHub ist hier ** Der Inhalt dieses Artikels ist nicht vollständig. Es kann einige Ineffizienzen enthalten. Ich werde es nach Bedarf hinzufügen, wenn es in Zukunft verbessert wird. ** ** **

↓ 4x4x4 Rubik Cube für den Wettbewerb und 4x4x4 Rubik Cube für den Wettbewerb, nummeriert für die Programmproduktion Image from iOS(15).jpg

Das ganze Bild

Diese Artikelsammlung besteht aus insgesamt drei Artikeln.

  1. Übersicht (dieser Artikel)
  2. Algorithmus
  3. Implementierung

Worüber in diesem Artikel gesprochen werden soll

In diesem Artikel werde ich das Wissen einführen, das zum Schreiben eines Programms zum Lösen eines 4x4x4-Rubikwürfels (unter Verwendung eines Suchalgorithmus) erforderlich ist, und kurz über den Programmfluss sprechen.

Referenzmaterial

Ich werde die Referenzmaterialien in der Reihenfolge vorstellen, in der ich sie hilfreich finde.

Die erste Quelle ist das einzige Papier, das ich über 4x4x4-Würfel gefunden habe. Das zweite ist ein Repository, das tatsächlich mit Java ähnlich wie in einem Papier implementiert wurde. Dies wurde auch als einziges Implementierungsbeispiel gefunden. Der dritte ist ein Beitrag des Eigentümers des zweiten Repositorys. Der vierte ist ein mysteriöser Beitrag, der vorerst gefunden wurde.

Kenntnisse erforderlich, um diesen Artikel zu lesen

Hier ist, was Sie wissen müssen, um diesen Artikel zu lesen und wie Sie ihn erhalten.

Rotationssymbol

Ein Symbol, das die Drehung des Zauberwürfels objektiv und genau darstellt. Wir empfehlen hier als Referenz. Dies ist eine Beschreibung des Rotationssymbols für 3x3x3, aber 4x4x4 verwendet genau das gleiche Symbol.

Gesichtsname

Das im Rotationssymbol angezeigte `` `R, L, U, D, F, B``` wird auch als Name des Gesichts verwendet. Zum Beispiel ist die F-Seite die Vorderseite.

Teilname

Es gibt drei Arten von Teilen an der Außenseite des 4x4x4 Rubik Cube. Wie im Bild gezeigt. qiita20200810_2.png Es gibt 3 Aufkleber an den Ecken, 2 an den Kanten und 1 in der Mitte.

Darstellung der Position von Teilen

Verwenden Sie für die Position der Teile das `` `R, L, U, D, F, B```, das erneut mit dem Rotationssymbol angezeigt wird. Da der Ausdruck für Kanten und Ecken unterschiedlich ist, werde ich sie separat einführen.

Kante

Die Kante ist natürlich, überspannt jedoch immer zwei Seiten. Daher werden die Kanten nebeneinander dargestellt, indem zwei Flächen genommen werden, die sich von "R, L, U, D, F, B" erstrecken. Beispielsweise ist die UF-Kante die Kante, die die U- und F-Ebene überspannt.

Ecke

Die Ecke erstreckt sich immer über drei Seiten. Daher werden drei Gesichter, die sich von "R, L, U, D, F, B" erstrecken, nebeneinander aufgenommen und angezeigt. Beispielsweise ist die UFR-Ecke eine Ecke, die sich über die U-, F- und R-Seiten erstreckt.

Parität

4x4x4 Rubinwürfel haben eine einzigartige Bedingung, die als "Parität" bezeichnet wird. Es gibt zwei Arten von Parität, aber die Erklärung von hier ist leicht zu verstehen. Darüber hinaus ist die Erklärung der PLL-Parität an dieser Stelle etwas schwer zu verstehen, kurz gesagt handelt es sich jedoch um einen Zustand des 2-Punkt-Austauschs nur von Kanten (ein 2-Punkt-Austausch ist mit einem 3x3x3-Rubinwürfel nicht möglich). Ein Beispiel für OLL-Parität und PLL-Parität ist in der Abbildung dargestellt. Die linke ist die OLL-Parität und die rechte ist die PLL-Parität. Alle unsichtbaren Seiten sind vollständig. Image from iOS(16).jpg

CP, CO, EP, EO Beziehungsweise

Das ist. Jedes Teil, aus dem ein 4x4x4-Würfel besteht, kann durch die Position und Ausrichtung der Kanten und Ecken sowie die Position der Mitte eindeutig dargestellt werden.

Basisalgorithmus

Das Lösen eines 4x4x4-Rubikwürfels durch Erkundung ist nicht so einfach. Auf jeden Fall ist der zu durchsuchende Baum (der Begriff und das Grundwissen dazu sind im Artikel [hier] zusammengefasst (https://qiita.com/Nyanyan_Cube/items/60f3699db96dba4a4bf5)) zu groß. Daher wird häufig ein Algorithmus verwendet. Alle Materialien, die ich vorgestellt und implementiert habe, basieren auf einem Algorithmus namens ** Tsais Algorithmus **. Lassen Sie uns den Ablauf erklären. Wenn geschrieben steht, dass "X" -Drehung verwendet wird, beispielsweise in "Zu verwendende Drehung", gibt es zwei Arten von Drehungen, die tatsächlich verwendet werden: "X, X" Und wenn es heißt, `X2``` Rotation zu verwenden, wird tatsächlich nur` X2``` verwendet. Ich denke, es gibt Wörter und Ausdrücke, die ich nicht verstehe. Ich werde jede Phase im nächsten Artikel ausführlich erläutern. Bitte sagen Sie hier "Hmm".

Phasennummer Dinge die zu tun sind Drehung zu verwenden
0 Bringen Sie alle Mittelteile der R-Seite und der L-Seite zur R-Seite oder zur L-Seite R, R2, Rw, Rw2, L, L2, U, U2, Uw, Uw2, D, D2, F, F2, Fw, Fw2, B, B2
1 1.Bringen Sie alle Mittelteile der F-Seite und der B-Seite zur F-Seite oder zur B-Seite 2.Trennen Sie die obere und die untere Kante 3.Machen Sie den mittleren Zustand der R- und L-Seite zu einem der 12 Zustände, die in Zukunft verarbeitet werden können 4.Beseitigen Sie die OLL-Parität R, R2, Rw, Rw2, L, L2, U, U2, Uw2, D, D2, F, F2, Fw2, B, B2
2 1.Seite(F, R, B, LOberfläche)Machen Sie eine "Reihe" in der Mitte 2.Seiteに位置するエッジのペアリングを行う R2, Rw2, L2, U, U2, Uw2, D, D2, F, F2, Fw2, B, B2
3 1.Schließe 6 Zentren ab 2.Koppeln Sie die verbleibenden Kanten 3.Beseitigen Sie die PLL-Parität R2, Rw2, L2, U, U2, Uw2, D, D2, F2, Fw2, B2
4 1.Bringen Sie die Aufkleber, die sich auf der U- und D-Seite befinden sollten, auf die U- oder D-Seite 2.Beseitigen Sie EO R, L, U, U2, D, D2, F, B
5 Finalisieren R2, L2, U, U2, D, D2, F2, B2

Zusammenfassung

In diesem Artikel gab ich eine kurze Erklärung der Kenntnisse, die zum Schreiben eines Programms zum Lösen eines 4x4x4-Rubinwürfels erforderlich sind, und eine Übersicht über das Lösen eines 4x4x4-Rubikwürfels.

Recommended Posts

Schreiben Sie ein Programm, um den 4x4x4 Rubik Cube zu lösen! 1. Übersicht
Schreiben Sie ein Programm, um den 4x4x4 Rubik Cube zu lösen! 2. Algorithmus
Schreiben Sie ein Programm, um den 4x4x4 Rubik Cube zu lösen! 3. Implementierung
Schreiben wir ein Programm zur Lösung des Rubik-Würfels (Teil 2: IDA * -Suche)
So erstellen Sie ein Programm zum Lösen des Rubik Cube ab PC Koshien 2014 Floppy Cube
Lassen Sie uns einen Roboter bauen, der den Zauberwürfel löst! 1. Übersicht
Ich habe versucht, ein Programm zu erstellen, um die Fehlersuche von Saiseriya zu lösen (Hinweis)
Schreiben Sie ein Programm, das das Programm missbraucht und 100 E-Mails sendet
Verschiedene Kommentare im Programm zu schreiben
Ich habe versucht, Soma Cube mit Python zu lösen
Verwendung der Solver-Bibliothek "kociemba" von Rubik Cube
Lassen Sie uns einen Roboter bauen, der den Zauberwürfel löst! 2 Algorithmus
Lassen Sie uns einen Roboter bauen, der den Zauberwürfel löst! 3 Software
So starten Sie die erste Projektion
Ich wollte den AWS-Schlüssel nicht in das Programm schreiben
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Schreiben Sie ein Skript, um die Entfernung mit dem Elasticsearch 5-System schmerzfrei zu berechnen
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Schreiben Sie die Standardausgabe in eine Datei
Die Geschichte des Exportierens eines Programms
Überlegen Sie, wie Sie einen Filter mit den Shotgun API-Contact-Versionen schreiben
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Das 16. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Theorie)
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
Das 19. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Möchten Sie ein einfaches Klassifizierungsproblem lösen?
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
So lösen Sie das Problem beim Verpacken des Behälters
Wie kann ich ein gutes Programm schreiben?
Geben Sie der Registerkarte ipywidgets einen Titel
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python
Erstellen eines Shell-Skripts zum Schreiben eines Tagebuchs
[Python] Ein Programm, das die Partitur rundet
Fühlen Sie sich frei, einen Test mit der Nase zu schreiben (im Fall von + gevent)
[LINE Messaging API] Ich möchte eine Nachricht vom Programm an alle LINE senden
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Ausführungsergebnis)
Ich habe ein Programm erstellt, um Wörter im Fenster nachzuschlagen (vorherige Entwicklung)
Ich musste im Unterricht keinen Dekorateur schreiben. Danke Kontextmanager