
- セルオートマトンについて詳しく知りたい人
- Pythonで数値計算をしたい人
- カオスやフラクタル的なことがちょっと好きな人
こんにちは.
今日はセルオートマトンについての記事を書きます.
実際に,セルオートマトンのプログラムを回して挙動を確認しているので,
この記事を理解できたらそこそこ「セルオートマトン」に関しては大丈夫なのではないでしょうか.
スライドも作ったので,もし見たい方がいたらご覧ください
ってか名前かっこいいですよね.
セルオートマトン!!!(厨二感出てますが,,,)
解説動画
セルオートマトンとは!?
セルオートマトンとは,ある内部状態をもったセルが,周囲の内部状態をもったセルと相互作用(情報交換)して時間的に変化していくモデルです.

数理的にモデル化を行う上では,このような状態を考慮してモデルを組むと思います.
人間や生物の行動モデルにも使用される割とメジャーなモデル化です.
知っているとちょっといつか役に立つかもしれません.
数学的に言うと,一次元とか二次元とか色々ありますが,このように書けます.

セルの内部状態を更新する
各セルの内部状態を更新するアルゴリズムとしては,このような感じです.




プログラムについて
スライドで説明した1次元のオートセルマトンに関してのプログラムです.
(参考:Pythonによる数値計算とシミュレーション)
詳しく内部構造を理解したい人は,上記の参考資料(Pythonによる数値計算とシミュレーション)をオススメです!
# -*- coding: utf-8 -*-
import sys
import numpy as np
import matplotlib.pyplot as plt
N = 256
R = 8
MAXT = 256
def setrule(rule,ruleno):
for i in range(0, R):
rule[i] = ruleno % 2
ruleno = ruleno // 2
for i in range(R - 1, -1, -1):
print(rule[i])
def initca(ca):
line = input("各Cellの初期値を入力:")
print()
for no in range(len(line)):
ca[no] = int(line[no])
def putca(ca):
for no in range(N - 1, -1, -1):
print("{:1d}".format(ca[no]), end="")
print()
def nextt(ca,rule):
nextca = [0 for i in range(N)]
for i in range(1, N - 1):
nextca[i] = rule[ca[i + 1] * 4 + ca[i] * 2 + ca[i - 1]]
for i in range(N):
ca[i] = nextca[i]
outputdata = [[0 for i in range(N)] for j in range(MAXT + 1)]
rule = [0 for i in range(R)]
ruleno = int(input("ルールは??:"))
if ruleno < 0 or ruleno > 255:
print("ルールが正しくない(", ruleno, ")")
sys.exit()
setrule(rule, ruleno)
ca = [0 for i in range(N)]
initca(ca)
putca(ca)
for i in range(N):
outputdata[0][i] = ca[i]
for t in range(MAXT):
nextt(ca, rule)
putca(ca)
for i in range(N):
outputdata[t + 1][i] = ca[i]
plt.imshow(outputdata)
plt.show()
プログラムの結果に関して
ルールを18で回してみました.

このような感じになりました!
内側のルールが同様なので,どのような初期値から演算してもこのような形になります.
シェルピンスキーのギャスケットですね!!!笑
また,インターネットを見ると,ルール161で,シェルピンスキーのギャスケットが見られると言うことで実際に試してみました!

このようになりました笑
確かにところどころ,シェルピンスキーのギャスケットが見られる!
ちなみに,シェルピンスキーのギャスケットとは,フラクタル図形の一種です.
カオスがチラ見してますね
詳しくは,こちらのwikiを参考にして見てください!
(参考:シェルピンスキーのギャスケット)

以上の絵も,wikiから抜粋したシェルピンスキーのギャスケットです.
拡大しても拡大しても同じような絵が出てきますね!
数学の美を感じます!
では!







