ライフゲーム #1
人生でなくConwayの方のゲーム。
グラフ的見方からすると次のように表現できる。
時間とともに変化する真偽値を属性として持つノードから成るグラフを考える。
何らかの規則で標本化された各時点の真偽値のみで、その変化を完全に記述できるとする。
ある標本時点を現世代と呼ぶことにし、その次の標本時点を次世代と呼ぶことにする。
現世代の各ノードの真偽値から次世代の各ノードの真偽値が決定される。
真偽値を決定する規則は以下の通り。
現世代の偽値ノードの隣接ノードのうち真値ノードが特定数あるなら、偽値ノードは次世代で真値ノードになる。
現世代の真値ノードの隣接ノードのうち偽値ノードが特定数あるなら、真値ノードは次世代で偽値ノードになる。
現世代でどちらの条件も満たさないノードは次世代も同じ真偽値を維持する。
つまり、有限状態機械である各ノードが隣接ノードの現在の状態によって相互作用して同期的に状態遷移する。
オリジナルのライフゲームの規則を使うなら、
digraph { rankdir=LR; compound=true; subgraph cluster_node { label="a node" true [label="true\n---------------\nE: reproduce"]; false [label="false\n---------------\nE: extinguish"]; extinguish [label="# of adjoined \"false\" nodes\nis neither 2 nor 3", shape=plaintext]; reproduce [label="# of adjoined \"true\" nodes is 3", shape=plaintext]; { rank=same; extinguish; reproduce } true -> extinguish [arrowhead=none, headport=w]; extinguish -> false [tailport=e]; false -> reproduce [arrowhead=none, headport=e]; reproduce -> true [tailport=w]; } subgraph cluster_adjoined { label="8 adjoined nodes"; adjoined [shape=record, label="{nw|n|ne}|{w||e}|{sw|s|se}"]; } false -> adjoined [ltail=cluster_node, lhead=cluster_adjoined, arrowhead=none] }