In den letzten Monaten ist DecisionRules zu einem sehr leistungsstarken, vielseitigen Geschäftstool geworden, das komplexe Aufgaben leicht lösen kann und in einer Vielzahl von Bereichen anwendbar ist. Sie sind nur durch Ihre Vorstellungskraft eingeschränkt. Um diese Idee zu unterstützen, haben wir einen Artikel über das Lösen des Rubik's Würfels in DR vorbereitet.
Wissen Sie wirklich, was der Rubik's Würfel ist?
Heute ist der Rubik's Würfel als das meistverkaufte Puzzle der Welt bekannt, aber früher war er nichts weiter als ein Weg, um Beziehungen im dreidimensionalen Raum zu verstehen. Er besteht aus 6 Seiten. Jede Seite hat 9 Flächen der gleichen Farbe. Die Hauptidee ist, den Würfel in seine gelöste Permutation (Kombination) zurückzubringen. Durch das Mischen dieses Kombinationspuzzles können über 43 Quintillionen Permutationen erzeugt werden.
Wenn Sie versuchen würden, den Rubik's Würfel blind zusammenzusetzen, würde das eine Menge Zeit in Anspruch nehmen. Deshalb verwenden wir Algorithmen für schnellere Lösungen. Es gibt viele Methoden zum Lösen des Rubik's Würfels, wie ROUX, ZZ oder CFOP. Dies sind unterschiedliche Methoden, aber die Idee ist die gleiche. Wir lösen den Rubik's Würfel, indem wir ihn in Teilmengen unterteilen. Dann lösen wir jede Teilmenge nacheinander.
Der CFOP-Algorithmus
In unserem Fall haben wir uns entschieden, den Rubik's Würfel in DecisionRules mit der CFOP-Methode zu lösen. Die CFOP-Methode ist die weltweit am häufigsten verwendete Lösungsmethode und belegt den ersten Platz bei der schnellsten Lösung, die von einem Menschen durchgeführt wurde. Wenn Sie also lernen möchten, wie man den RC selbst löst, können Sie dies definitiv mit DecisionRules tun.
Um zu verstehen, wie wir diese Methode im DR-System implementieren, müssen wir uns genauer ansehen, wie die CFOP-Methode tatsächlich funktioniert. CFOP steht für "Cross, First two layers, Orientation of the last layer, Permutation of the last layer". Jeder Buchstabe steht für eine Phase, die einen anderen Teil des Würfels löst. Der erste Schritt besteht darin, vier Regeln zu erstellen, wobei jede Regel eine individuelle Phase darstellt.
Lösung des Rubik's Würfels
Jetzt müssen wir jede Phase nacheinander lösen, aber zuerst müssen wir den aktuellen Zustand des Würfels als Eingabe bewerten und damit arbeiten. Aus diesem Grund müssen wir eine Notation erstellen, damit wir genau wissen, mit welchem Stück wir arbeiten und welche Farbe darüber ist. Ein Beispiel für unsere RC-Notation ist unten zu sehen.

Wie Sie sehen können, haben wir unseren Würfel in 54 Ganzzahlen unterteilt, die jeweils eine Fläche repräsentieren. Wir nehmen all diese Informationen und erstellen eine Beispielzeichenkette des aktuellen Zustands des Würfels.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
Diese Kette repräsentiert einen gelösten Würfel. Die Ganzzahlen in der Zeichenkette sehen geordnet aus, da diese Zeichenkette zwei Informationen über den Würfel verbirgt: Erstens gibt es eine Reihenfolge von Zahlen von links nach rechts, die die Referenzpositionen von 0 bis 53 darstellt, die sich um eins für jeden Leerraum erhöhen. Zweitens gibt es die Namen der Flächen, die unter den Referenzpositionen liegen. Schauen Sie sich die Zahl 4 in der Zeichenkette an, was Sie sehen, ist der Name der Wand 4, Wand 4 ist die vierte Zahl von links, sodass die Referenzposition ebenfalls 4 ist. Wenn die Namen aller Wände mit ihren Referenzpositionen übereinstimmen, ist der Würfel gelöst.
Jetzt, da wir wissen, wie wir Informationen über den aktuellen Zustand des Würfels lesen, müssen wir darüber nachdenken, wie wir dem Benutzer sagen, welche Züge als Nächstes zu machen sind. Daher werden wir die offizielle Notation für den Rubik's Würfel verwenden. Diese Notation gibt an, welche Seite in welche Richtung gedreht werden soll.
Wir haben verstanden, wie die Eingabe und die Ausgabe aussehen sollten, jetzt ist es an der Zeit, die Phasen zu erstellen.
Das Kreuz (C)
In dieser Phase werden wir alle weißen Kanten um ihr Zentrum ausrichten, wenn sie fertig sind, werden sie wie ein Kreuz aussehen. Wir werden diesen Teil mit vier Regeln lösen.
- Die erste Regel überprüft auf störende Kombinationen (in diesem Fall, wenn zwei oder mehr Kanten nur zu einem Zentrum korrekt ausgerichtet sind)
- Die zweite überprüft, an welcher Kante wir gerade arbeiten.
- Die dritte berechnet die Position je nach der zweiten Tabelle neu.
- Die vierte löst eine Kante.
Die ersten beiden Schichten (F2L)
F2L wird einen Slot nach dem anderen mit vier Regeln gelöst. (Ein Slot ist ein Paar von Kanten und Ecken)
- Die erste Regel überprüft die Slot-Rotation.
- Die zweite berechnet die Position je nach der ersten Regel neu.
- Die dritte überprüft auf störende Kombinationen (wie im Kreuz).
- Die vierte löst einen Slot.
Warum nennen wir störende Kombinationen die dritte Regel und nicht die erste Regel wie in der ersten Phase?
Das liegt daran, dass das Kreuz nur wenige Permutationen in störenden Kombinationen hat, sodass wir die Position nicht so früh neu berechnen müssen (bessere Leistung).
Orientierung der letzten Schicht (OLL)
In dieser Phase werden wir alle Flächen um das gelbe Zentrum lösen. Dazu verwenden wir drei Regeln.
- Die erste Regel überprüft auf störende Kombinationen.
- Die zweite orientiert die gelben Kanten.
- Die dritte orientiert die gelben Ecken.
Diesmal ist es nicht notwendig, die Position neu zu berechnen, da es viel weniger Permutationen gibt als in F2L oder Kreuz.
Permutation der letzten Schicht (PLL)
Für den letzten Teil müssen wir die "Permutation der letzten Schicht" oder "PLL" lösen, und zwar nur mit zwei Regeln.
- Die erste löst die Ecken.
- Die zweite löst die Kanten.
Nachdem wir all diese Regeln erstellt haben, ist es an der Zeit, alles in den Skriptregeln zu bearbeiten und sie mit einem einzigen Regelablauf zum Leben zu erwecken.
Jetzt haben wir die CFOP in DecisionRules rekreiert, aber wir haben keine Möglichkeit, unseren RC zu visualisieren, also müssen wir eine 3D-Engine auswählen, in unserem Fall Unity. Nachdem wir eine 3D-Engine ausgewählt und den RC darin rekreiert haben, müssen wir DR irgendwie mit Unity verbinden. Glücklicherweise ist das dank der Rest-API kein Problem.
Verwendung und Funktionen der Rest-API
Wie funktioniert die Rest-API mit DR? Unser erster Schritt besteht darin, das DR-Nugget in Unity zu importieren, dann einfach das .NET-Codebeispiel aus der DR-Testbank zu generieren. Stellen Sie sicher, dass Sie den richtigen Regelablauf auswählen, bevor Sie den Code kopieren. Dank der Testbank müssen wir uns um keinen zusätzlichen Code kümmern, wir fügen einfach unser Codebeispiel in Unity ein, übermitteln den aktuellen Würfelzustand als Zeichenkette und sehen zu, wie die Magie geschieht!

Ein hochrangiges Beispiel dafür, wie DR mit Unity kommuniziert.
Zusammenfassung
Wie Sie sehen können, ist DecisionRules zu einem leistungsstarken Werkzeug geworden, um komplexe Probleme wie das Lösen eines Rubik's Würfels (der über 43 Quintillionen mögliche Permutationen hat) zu lösen, und sie werden jeden Tag leistungsfähiger.
Vielen Dank fürs Lesen!

Jan Viktor Krepelka
Entwickler
