[PYTHON] Écrivez un programme pour résoudre le Rubik Cube 4x4x4! 1. Vue d'ensemble

Quel est cet article?

Je suis actuellement en train de créer un robot qui résout le Rubik Cube 4x4x4 (Rubik Revenge) et vise un record du monde. Le plus gros obstacle dans la fabrication d'un robot était de mettre en œuvre un algorithme pour résoudre un cube 4x4x4 dans un temps réaliste et avec le moins d'étapes possible. Si vous le recherchez, vous constaterez qu'il existe peu de documents et d'ancêtres sur le 4x4x4. J'écris cet article en espérant que ce sera l'un de ces matériaux précieux. GitHub est ici ** Le contenu de cet article n'est pas complet. Il peut contenir certaines inefficacités. Je l'ajouterai au besoin s'il est amélioré à l'avenir. ** **

↓ Rubik Cube 4x4x4 pour la compétition et Rubik Cube 4x4x4 pour la compétition numéroté pour la production du programme Image from iOS(15).jpg

L'image entière

Cette collection d'articles se compose de trois articles au total.

  1. Aperçu (cet article)
  2. Algorithme
  3. Mise en œuvre

De quoi parler dans cet article

Dans cet article, je présenterai les connaissances nécessaires pour écrire un programme pour résoudre un cube rubic 4x4x4 (à l'aide d'un algorithme de recherche), et parlerai brièvement du déroulement du programme.

Matériel de référence

Je présenterai les documents de référence dans l'ordre dans lequel je les trouve utiles.

La première source est le seul article que j'ai trouvé sur les cubes 4x4x4. Le second est un référentiel qui a en fait été implémenté à l'aide de Java d'une manière similaire à un article. Cela a également été trouvé comme le seul exemple de mise en œuvre. Le troisième est un message du propriétaire du deuxième référentiel. Le quatrième est un post mystérieux qui a été trouvé pour le moment.

Connaissances requises pour lire cet article

Voici ce que vous devez savoir pour lire cet article et comment l'obtenir.

Symbole de rotation

Un symbole qui représente objectivement et précisément la rotation du Rubik Cube. Nous recommandons ici comme référence. Ceci est une description du symbole de rotation pour 3x3x3, mais 4x4x4 utilise exactement le même symbole.

Nom du visage

Le R, L, U, D, F, B '' qui apparaît dans le symbole de rotation est également utilisé comme nom de la face. Par exemple, la face F est la face avant.

Nom de la pièce

Il existe trois types de pièces à l'extérieur du Rubik Cube 4x4x4. Comme le montre l'image. qiita20200810_2.png Il y a 3 autocollants sur les coins, 2 sur les bords et 1 au centre.

Comment représenter la position des pièces

Pour la position des pièces, utilisez le R, L, U, D, F, B '' qui apparaît à nouveau avec le symbole de rotation. Puisque l'expression est différente pour les bords et les coins, je les présenterai séparément.

Bord

Le bord est naturel, mais il chevauche toujours deux côtés. Par conséquent, les arêtes sont représentées côte à côte en prenant deux faces qui chevauchent `` R, L, U, D, F, B ''. Par exemple, l'arête UF est l'arête qui chevauche les plans U et F.

coin

Le coin chevauche toujours trois côtés. Par conséquent, trois faces qui chevauchent `` R, L, U, D, F, B '' sont prises et affichées côte à côte. Par exemple, le coin UFR est un coin qui chevauche les côtés U, F et R.

parité

Les cubes rubis 4x4x4 ont une condition unique appelée "parité". Il existe deux types de parité, mais l'explication de ici est facile à comprendre. De plus, l'explication de la parité PLL est un peu difficile à comprendre sur ce site, mais en bref, elle est à l'état d'échange de 2 points uniquement d'arêtes (l'échange de 2 points n'est pas possible avec un cube rubic 3x3x3). Un exemple de parité OLL et de parité PLL est illustré dans la figure. La gauche est la parité OLL et la droite est la parité PLL. Tous les côtés invisibles sont complets. Image from iOS(16).jpg

CP, CO, EP, EO Chaque

C'est. Chaque partie qui constitue un cube 4x4x4 peut être représentée de manière unique par la position et l'orientation des bords et des coins, et la position du centre.

Algorithme de base

Résoudre un cube rubic 4x4x4 par exploration n'est pas si simple. Quoi qu'il en soit, l'arbre à rechercher (le terme et les connaissances de base en la matière sont résumés dans l'article ici) est trop grand. Par conséquent, un algorithme est souvent utilisé. Le matériel présenté et mon implémentation sont tous basés sur un algorithme appelé ** Algorithme de Tsai **. Expliquons le flux. De plus, s'il est écrit que la rotation " X``` est utilisée, par exemple, dans "Rotation à utiliser", il existe deux types de rotations qui sont effectivement utilisées: " X, X''. Et s'il dit d'utiliser la rotation X2 '', seul `` X2 '' est réellement utilisé. Je pense qu'il y a des mots et des expressions que je ne comprends pas. J'expliquerai chaque phase en détail dans le prochain article, alors dites "Hmm" ici.

Numéro de phase Choses à faire Rotation à utiliser
0 Apportez toutes les parties centrales du côté R et du côté G du côté R ou du côté L R, R2, Rw, Rw2, L, L2, U, U2, Uw, Uw2, D, D2, F, F2, Fw, Fw2, B, B2
1 1.Amenez toutes les parties centrales du côté F et du côté B du côté F ou du côté B 2.Bord haut et bord bas séparés 3.Faire de l'état central des plans R et L l'un des 12 états pouvant être traités dans le futur 4.Éliminer la parité OLL R, R2, Rw, Rw2, L, L2, U, U2, Uw2, D, D2, F, F2, Fw2, B, B2
2 1.côté(F, R, B, Lsurface)Faire une "ligne" au centre 2.côtéに位置するエッジのペアリングを行う R2, Rw2, L2, U, U2, Uw2, D, D2, F, F2, Fw2, B, B2
3 1.Terminer 6 centres 2.Associez les bords restants 3.Éliminer la parité PLL R2, Rw2, L2, U, U2, Uw2, D, D2, F2, Fw2, B2
4 1.Apportez les autocollants qui doivent être sur les côtés U et D du côté U ou D 2.Éliminer l'OE R, L, U, U2, D, D2, F, B
5 Finaliser R2, L2, U, U2, D, D2, F2, B2

Résumé

Dans cet article, j'ai donné une brève explication des connaissances nécessaires pour écrire un programme pour résoudre un cube rubic 4x4x4 et un aperçu de la façon de résoudre un cube rubic 4x4x4.

Recommended Posts

Écrivez un programme pour résoudre le Rubik Cube 4x4x4! 1. Vue d'ensemble
Écrivez un programme pour résoudre le Rubik Cube 4x4x4! 2. Algorithme
Écrivez un programme pour résoudre le Rubik Cube 4x4x4! 3. Mise en œuvre
Écrivons un programme pour résoudre le Rubik Cube (Partie 2: IDA * Search)
Comment créer un programme pour résoudre le Rubik Cube à partir de PC Koshien 2014 Floppy Cube
Faisons un robot qui résout le Rubik Cube! 1. Vue d'ensemble
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Divers commentaires à écrire dans le programme
J'ai essayé de résoudre Soma Cube avec python
Comment utiliser la bibliothèque de solveurs "kociemba" de Rubik Cube
Faisons un robot qui résout le Rubik Cube! 2 Algorithme
Faisons un robot qui résout le Rubik Cube! 3 Logiciel
Comment démarrer la première projection
Je ne voulais pas écrire la clé AWS dans le programme
Je voulais résoudre le problème ABC164 A ~ D avec Python
Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
Écrire la sortie standard dans un fichier
L'histoire de l'exportation d'un programme
Réfléchissez à la façon d'écrire un filtre avec les versions Shotgun API-Contact
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Le 16ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (théorie)
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Le 19ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Vous voulez résoudre un problème de classification simple?
Ecrire le test dans la docstring python
Comment résoudre le problème d'emballage du bac
Comment puis-je écrire un bon programme?
Donner un titre à l'onglet ipywidgets
Ecrire un programme de chiffrement Caesar en Python
Créer un script shell pour écrire un journal
[Python] Un programme qui arrondit le score
N'hésitez pas à rédiger un test avec nez (dans le cas de + gevent)
[LINE Messaging API] Je souhaite envoyer un message du programme à tout le monde LINE
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (résultat de l'exécution)
J'ai créé un programme pour rechercher des mots sur la fenêtre (développement précédent)
Je n'ai pas eu besoin d'écrire décorateur en classe Merci contextmanager