Il y a un problème très important dans les automates cellulaires appelé problème Majorité :
Le problème de la majorité, ou tâche de classification de la densité, est le problème de trouver des règles d'automate cellulaire unidimensionnelles qui effectuent avec précision le vote à la majorité.
...
Étant donné la configuration d'un automate cellulaire à deux états avec i + j cellules au total, dont i à l'état zéro et j à l'état unique, une solution correcte au problème de vote doit finalement mettre toutes les cellules à zéro si i> j et doit finalement mettre toutes les cellules à un si i <j. L'état final souhaité n'est pas spécifié si i = j.
Bien qu'il ait été prouvé qu'aucun automate cellulaire ne peut résoudre le problème de la majorité dans tous les cas, il existe de nombreuses règles qui peuvent le résoudre dans la majorité des cas. L'automate Gacs-Kurdyumov-Levin a une précision d'environ 78% avec des conditions initiales aléatoires. La règle GKL n'est pas compliquée:
- Rayon de 3, ce qui signifie que le nouvel état de la cellule dépend de 7 cellules précédentes: lui-même, les 3 cellules à droite et les 3 cellules à gauche.
- Si une cellule est actuellement
O
, son nouvel état est la majorité d'elle-même, la cellule à sa gauche et la cellule 3 se déplace à sa gauche. - Si une cellule est actuellement
1
, son nouvel état est la majorité d'elle-même, la cellule à sa droite et la cellule 3 se déplace à sa droite.
Voici un exemple:
0 1 0 1 1 1 0 1 1 0 1 0 0 1
0 1 1 1 1 1 1 1 0 0 1 1 0 0
0 1 1 1 1 1 1 1 1 0 1 0 0 0
0 1 1 1 1 1 1 1 0 1 0 1 0 0
0 1 1 1 1 1 1 0 1 0 1 0 1 0
0 1 1 1 1 1 0 1 0 1 0 1 1 1
1 1 1 1 1 0 1 0 1 1 1 1 1 1
1 1 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1
Dans cet exemple, l'automate cellulaire a correctement calculé que 8> 6. D'autres exemples prennent plus de temps et produisent des modèles sympas entre-temps. Voici deux exemples que j'ai trouvés au hasard.
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 1 1 0 1 0 0 1 1 1
1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1
Passer au niveau supérieur
D'après mes recherches sur Internet, presque toutes les recherches universitaires sur le problème majoritaire ont été menées avec des CA à 2 États. Dans ce défi, nous allons étendre le problème de la majorité aux autorités de certification à 3 États . J'appellerai cela le problème de la pluralité . La pluralité , ou majorité relative, fait référence à la condition dans laquelle l'une des options a plus de votes que chacune des alternatives, mais pas nécessairement la majorité de tous les votes.
Énoncé du problème
- Il existe un automate cellulaire 1D à 3 états de rayon 3.
- Il y a 151 cellules avec une condition aux limites circulaires.
- Ces cellules reçoivent un état de départ aléatoire, à la seule condition que 1 des 3 états ait une pluralité stricte. "Aléatoire" signifie une distribution uniforme indépendante pour chaque cellule.
- La précision d'une règle est le pourcentage de conditions initiales aléatoires (valides) dans lesquelles toutes les cellules se synchronisent à l'état correct (celui avec pluralité) sur 10000 générations .
- Le but est de trouver une règle avec une grande précision,
Cas de bord de pluralité: Toute configuration avec 50/50/51 est une configuration de départ valide (car il existe une pluralité stricte), tandis que toute configuration avec 51/51/49 n'est pas valide (car il n'y a pas de pluralité stricte).
L'espace de recherche est de 3 ^ 3 ^ 7 (~ 3e1043), loin de la portée d'une recherche exhaustive. Cela signifie que vous devrez utiliser d'autres techniques, comme les algorithmes génétiques, afin de résoudre ce problème. Il faudra également de l'ingénierie humaine.
La règle de génération 10000 est susceptible de changer, en fonction des temps d'exécution / précision des règles que les gens trouvent. S'il est trop bas pour permettre des taux de convergence raisonnables, alors je peux l'augmenter. Alternativement, je peux le baisser pour servir de bris d'égalité.
Gagnant
Le gagnant est la personne qui soumet la règle CA rayon-3 avec la plus grande précision parmi tous les candidats.
Votre soumission doit inclure ...
- Une description de la règle (en utilisant le code Wolfram si nécessaire)
- Le taux de précision et la taille de l'échantillon
- Une explication de taille raisonnable de la façon dont vous avez découvert la règle, y compris les programmes que vous avez écrits pour la résoudre, ou toute ingénierie "manuelle". (C'est la partie la plus intéressante, car tout le reste n'est que des chiffres bruts.)
Travail prioritaire
- Un article de Juille et Pollack , décrivant comment ils ont évolué une règle à 2 états avec une précision de 86%.
- Cet article a utilisé r = 3, 149 cellules, 2 états CA. Il n'a pas tenté de le résoudre le problème de la majorité, cependant, mais au lieu de trouver des règles qui en résultent rapidement dans une alternance tout -
1
-tous-0
modèle. Malgré ces différences, je soupçonne que de nombreuses techniques seront similaires. - Un papier (pas très utile car il est derrière un mur payant) de Wolz et de Oliviera qui détient actuellement le record des 2 états
Réponses:
Sorte de GKL plus escalade, 61,498%
Si une cellule est un 0, regardez les cellules 3 à gauche, 1 à gauche et elle-même. Définissez la valeur sur la majorité. Si c'est une cravate, restez comme vous êtes.
Si une cellule est un 1, regardez les cellules 3 à droite, 1 à droite et elle-même. Définissez la valeur sur la majorité. Si c'est une cravate, restez comme vous êtes.
Si une cellule est un 2, regardez les cellules 2 à gauche, 2 à droite et 3 à droite. Définissez la valeur sur la majorité. Si c'est une cravate, restez comme vous êtes.
J'ai obtenu 59453 sur 100000 au total, 59,453%
Certaines mutations et escalades ont donné lieu à 61498/100000 = 61,498%.
Je vais probablement tester un peu plus et publierai plus d'informations plus tard.
la source
"Jeter les 2 et faire GKL" - 55,7%
Ce n'est pas si facile de deviner ce qu'est une bonne règle, alors j'ai essayé au moins de trouver quelque chose qui marquerait au-dessus de 1/3. La stratégie consiste à essayer d'obtenir la bonne réponse lorsque l'état majoritaire est 0 ou 1, et à accepter la perte si elle est 2. Il a obtenu 56,5% sur 100 000 essais, ce qui est en quelque sorte légèrement meilleur que ce qui serait attendu d'une multiplication de 78% ( score de GKL) * 2/3 (fraction du temps lorsque la réponse est 0 ou 1) = 52%.
Plus concrètement, la stratégie est la suivante:
J'ai utilisé ce code pour tester:
la source
"Il suffit de voler ce qu'il y a de mieux et de le faire évoluer", bleh
Edit: dans son état actuel, cette réponse, plutôt que de trouver de meilleurs modèles, trouve un meilleur échantillon aléatoire.
Cette réponse code / décode les solutions en énumérant tous les états sous forme de nombres ternaires (chiffre le moins significatif en premier). La solution à 59,2%:
Cette réponse a été développée à partir de 55,7% de feersum, en utilisant le code suivant. Ce code nécessite libop , qui est ma bibliothèque personnelle d'en-tête C ++ uniquement. Il est très facile à installer, il suffit de le faire
git clone https://github.com/orlp/libop
dans le même répertoire que celui où vous avez enregistré le programme. Je suggère de compiler avecg++ -O2 -m64 -march=native -std=c++11 -g
. Pour un développement rapide, je suggère également de précompiler libop en exécutant la commande ci-dessuslibop/op.h
.la source
Codé à la main, 57,541%
En fait, cela ne regarde que les 5 cellules au-dessus. Il pourrait probablement être amélioré en augmentant la plage qu'il examine. A fonctionné avec 100 000 cas de test.
Algorithme:
Gène:
Code de test:
Exemple
la source