J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python

J'ai écrit le code pour dessiner l'évolution de l'automate cellulaire unidimensionnel en Python. Enfin, le résultat de l'exécution de certaines règles est affiché.

Automate cellulaire

L'automate cellulaire développe l'état d'une cellule selon une règle locale, qui est un physicien Stephen Wolfram. 82% B9% E3% 83% 86% E3% 82% A3% E3% 83% BC% E3% 83% 96% E3% 83% B3% E3% 83% BB% E3% 82% A6% E3% 83% AB% E3% 83% 95% E3% 83% A9% E3% 83% A0) et mathématicien [John Horton Conway](https://ja.wikipedia.org/wiki/%E3%82%B8%E3% 83% A7% E3% 83% B3% E3% 83% BB% E3% 83% 9B% E3% 83% BC% E3% 83% 88% E3% 83% B3% E3% 83% BB% E3% 82% Ses propriétés ont été étudiées en détail par B3% E3% 83% B3% E3% 82% A6% E3% 82% A7% E3% 82% A4) et al. En changeant les règles, divers phénomènes naturels peuvent être imités, et celui à deux dimensions est connu comme un «jeu de la vie».

règle

Untitled Diagram.png

Les règles pour les automates à cellules unidimensionnels sont numérotées. Par exemple, la règle appelée règle 214 est comme illustré dans la figure ci-dessus. Si vous n'êtes pas sûr, veuillez consulter cet article pour plus de détails.

Implémenté en Python

Implémentons la règle ci-dessus.

1d_ca.py


import matplotlib.pyplot as plt

def cellautomaton(l_bit, rule, pattern=False, padding=0):
    # pattern:Condition aux limites périodique, padding:Valeur des cellules en dehors du cadre
    l_bit_new = []
    if not pattern:
        l_bit = [padding] + l_bit
        l_bit.append(padding)
    else:
        l_bit = [l_bit[-1]] + l_bit
        l_bit.append(l_bit[1])
    for i in range(1, len(l_bit)-1):
        l_bit_new.append(next_state(l_bit[i-1],l_bit[i],l_bit[i+1], rule))
    return l_bit_new

def next_state(l, x, r, rule):
    #Déterminez l'état de la cellule suivante
    bin_str = format(rule, '08b')
    bin_num = int(str(l)+str(x)+str(r), 2)
    return int(bin_str[-(bin_num+1)])

def main():
    result = []
    loop = 200
    rule = 110 #Numéro de règle(0~255)

    ##Spécifiez l'état initial dans la liste x
    x = [0]*200
    x[-1] = 1
    result.append(x)
    for i in range(loop):
        x = cellautomaton(x, rule, pattern=False)
        result.append(x)
    plt.figure()
    plt.title("rule{}".format(rule))
    plt.imshow(result, cmap="binary")
    plt.show()

main()

Par défaut, sa longueur est de 100 et seule la cellule la plus à droite est un tableau unidimensionnel avec 1 et 0. Il est intéressant de jouer avec et de le changer. Enfin, utilisons ce code pour voir un exemple avec quelques règles.

Règle 30

[Stephen Wolfram](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%86%E3%82%A3%E3%83%BC%E3%83%96%E3% 83% B3% E3% 83% BB% E3% 82% A6% E3% 83% AB% E3% 83% 95% E3% 83% A9% E3% 83% A0) a quatre comportements d'automate cellulaire unidimensionnel Il est classé en classes. En termes simples, cela ressemble à ceci:

--Classe 1: converge vers un état comme tous les 0, tous les 1 --Classe 2: convergent vers un état où les vibrations fixes sont répétées --Classe 3: Devenez chaotique --Classe 4: les états périodiques et chaotiques coexistent (bord du chaos)

La règle 30 est une règle chaotique de classe 3. rule30.png

Vous pouvez voir que le modèle est compliqué et n'a pas de périodicité.

Règle 90

La règle 90 est une règle de classe 3 qui dessine une figure fractale appelée joint Sylpinsky. rule90.png Une figure fractale est une figure dans laquelle une forme similaire apparaît lorsqu'elle est agrandie / réduite.

Règle 110

La règle 110 est une règle de classe 4 qui prend un état intermédiaire entre périodique et chaos.

rule110.png

Vous pouvez voir qu'il a une périodicité et des pauses après un certain temps. On sait que la dynamique entre cet ordre et le chaos se trouve souvent dans des phénomènes naturels, et il est possible d'imiter une machine à tuling en utilisant la riche dynamique de ces zones.

c'est tout. Il existe de nombreuses autres formes de règles, telles que cet article. A titre d'exemple pratique, il semble qu'il soit parfois utilisé dans la simulation de trafic comme dans cet article.

Les références

[Système complexe de trivia illustré (Natsume, Norio Konno)](https://hb.afl.rakuten.co.jp/ichiba/1bc63814.31bba873.1bc63815.5874eb3b/?pc=https%3A%2F%2Fitem.rakuten. co.jp% 2Fcomicset% 2F4816323899% 2F & link_type = hybrid_url & ut = eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjB9)

Recommended Posts

J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
J'ai essayé de mettre en œuvre un jeu de dilemme de prisonnier mal compris en Python
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé d'implémenter le tri sélectif en python
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
J'ai essayé d'implémenter le poker de Drakue en Python
J'ai essayé d'implémenter GA (algorithme génétique) en Python
J'ai essayé d'implémenter ce qui semble être un outil de snipper Windows avec Python
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé d'implémenter le blackjack du jeu Trump en Python
[Python] J'ai essayé d'implémenter un tri stable, alors notez
Implémenter un automate fini déterministe en Python pour déterminer des multiples de 3
Je veux créer une fenêtre avec Python
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai essayé d'ajouter un module Python 3 en C
J'ai essayé d'implémenter la régression linéaire bayésienne par échantillonnage de Gibbs en python
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
J'ai essayé d'implémenter PCANet
J'ai essayé d'implémenter StarGAN (1)
J'ai essayé de représenter graphiquement les packages installés en Python
Je souhaite intégrer une variable dans une chaîne Python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
Je veux écrire en Python! (2) Écrivons un test
Je veux échantillonner au hasard un fichier avec Python
J'ai essayé d'implémenter le perceptron artificiel avec python
Je veux travailler avec un robot en python.
J'ai essayé de résumer comment utiliser les pandas de python
J'ai essayé d'implémenter le tri par fusion en Python avec le moins de lignes possible
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'implémenter une ligne moyenne mobile de volume avec Quantx
J'ai essayé de mettre en œuvre le modèle de base du réseau neuronal récurrent
J'ai essayé d'implémenter Deep VQE
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé de toucher Python (installation)
[Chaîne de Markov] J'ai essayé de lire les citations en Python.
J'ai essayé de mettre en place une validation contradictoire
J'ai essayé "un programme qui supprime les déclarations en double en Python"
J'ai créé une classe en Python et essayé de taper du canard
J'ai essayé d'implémenter Realness GAN
Une histoire sur la tentative d'implémentation de variables privées en Python.
Je veux ajouter un joli complément à input () en python
J'ai essayé la notification de ligne en Python
Django super introduction par les débutants Python! Partie 6 J'ai essayé d'implémenter la fonction de connexion
J'ai essayé d'automatiser "un cœur même séparé" à l'aide d'un algorithme génétique en Python
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"