Codes binaires Wolfram d'automates cellulaires 2D
C'est une question similaire à Comment fonctionnent les règles des automates cellulaires 2D? Cependant, la réponse ne m'a pas fourni ce que je cherchais. Plus précisément, je veux pouvoir rendre ces formes d'automates cellulaires 2D:https://www.wolframscience.com/nks/p173--cellular-automata/Je ne trouve nulle part de référence expliquant comment passer d'un nombre réel à une règle de croissance. En 1d, la situation est bien documentée, comme ici:https://mathworld.wolfram.com/ElementaryCellularAutomaton.htmlmais en 2D, le mappage exact des bits est introuvable. J'aimerais vraiment faire un programme, pour que je puisse par exemple entrer le nombre 465 et qu'il dessine le modèle 465 du livre Wolfram. L'autre réponse d'échange de pile à laquelle j'ai lié ci-dessus fournit un mappage binaire possible, mais la méthode donnée ici ne produit pas les mêmes nombres que dans la référence Wolfram. La valeur binaire de 465 est 111010001, ce qui ne m'aide pas du tout. Cette forme particulière est basée sur l'ajout d'une cellule quand exactement un voisin est actuellement occupé, alors ne devrions-nous pas nous attendre à avoir 4 1 dans une rangée, un pour chacun des quatre voisins? Et pour rendre cela encore plus déroutant, les deux derniers chiffres semblent être échangés à partir de la description donnée sur la page Wolfram elle-même ... Il semble clair d'après l'autre réponse de Stack Overflow qu'il n'y a pas qu'un seul mappage binaire possible, mais plusieurs, cependant étant donné qu'il existe déjà un guide avec des images référencées par des numéros de règles, j'aimerais vraiment pouvoir utiliser ces numéros de règles spécifiques. Merci.
Réponses
La description donnée sur la page à laquelle vous avez lié est correcte:
"Dans chaque cas, la séquence de base de 2 chiffres pour le numéro de code spécifie la règle comme suit. Le dernier chiffre spécifie la couleur de la cellule centrale si tous ses voisins étaient blancs à l'étape précédente, et si elle était également blanche. La seconde- jusqu'au dernier chiffre spécifie ce qui se passe si tous les voisins sont blancs, mais la cellule centrale elle-même est noire. Et chaque chiffre précédent spécifie alors ce qui devrait se passer si progressivement plus de voisins sont noirs. (Comparez page 60.) "
Ce qui vous manque peut-être, c'est que si le numéro de règle est impair, le réseau vide est instable car les cellules blanches entourées d'autres cellules blanches deviendront spontanément noires. Plus précisément, toutes les règles dont le nombre est congru à 1 modulo 4 (c'est-à-dire dont la forme binaire se termine par 01), comme 465, sont "stroboscopiques" , c'est-à-dire que le réseau vide alternera entre tout blanc et tout noir à chaque génération successive.
En particulier, cela signifie que la règle 465 ne peut pas correspondre à "l'ajout d'une cellule quand exactement un voisin est actuellement occupé". (Ce serait vraisemblablement la règle 686 ou 1010101110 en binaire.)
Au lieu de cela, comme vous le notez correctement, 465 équivaut à 111010001 en binaire. Ecrit en cinq groupes de deux bits chacun, ce qui donne 01 11 01 00 01. Dans chacun de ces groupes, le bit le plus à droite du groupe$k$ (numéroté de droite à gauche de 0 à 4) vaut 1 si une cellule blanche avec $k$ les voisins noirs deviendront noirs dans la génération suivante, et le bit le plus à gauche est 1 si une cellule noire avec $k$ les voisins noirs resteront noirs.
Cela signifie que, selon cette règle, une cellule blanche deviendra noire si elle a 0, 2, 3 ou 4 voisins noirs (puisque le bit le plus à droite est 1 dans les groupes 0, 2, 3 et 4 à partir de la droite) et un noir la cellule restera noire si elle a exactement 3 voisins noirs (puisque le bit le plus à gauche est 1 uniquement dans le groupe 3).
Et en effet, simuler cette règle sur 22 générations, à partir d'un pixel noir sur fond blanc, produit une image correspondant à celle de la page liée.
Ps. Il s'avère que la règle 465 est "l'équivalent stroboscopique" de la règle symétrique d'état 558 = 01000101110 2 , qui diffère de la règle 686 d'exactement un bit et peut être décrite comme "ajouter une cellule quand exactement un voisin est occupé, supprimer un cellule quand exactement un voisin est vide ".
Partant d'une seule cellule, il semble que les règles 558 et 686 évoluent de manière identique, puisqu'à partir de ce point de départ elles ne génèrent apparemment jamais une cellule vivante avec exactement trois voisins vivants. Ainsi, sur les générations paires, la règle stroboscopique 465 semble également identique aux deux.