見出し画像

セルオートマトンの抽象化

セルオートマトンのルールの多さ

初期状態を変化させることで様々なパターンをつくりだすことのできる面白いルールを探そうとするとき、とりうるルールの多さが問題となります。

セルオートマトンを離散的に実装していればルールの総数は決まっているため総当たりにすることはできますが、これは2^10〜という数になるため人間が目を通すことはできません。

ランダムなルールを生成して目を通せば全体を満遍なく見ることもできますが、あるルールがどのような性質をもつかわからないため、ルールを改造した際に変更が何を意味するか理解しにくくなります。

そこで抽象的な視点からルールを分別しておき、探索空間を減らしつつルールのラベリングをあらかじめ行うという手法をとります。

抽象化の例:Conway's Game of Life

2次元セルオートマトンで最も有名なConway's Game of Lifeでは以下のふたつの抽象化を行っています。

1. 異方性の削除:隣接セルの位置情報を削除することで、生きているセルの数のみが影響するようにしています。※よく見る1次元セルオートマトンは左右のセルを区別するので異方性がありますね

2. "生存"/"死亡"の概念:1/0の状態に"生存", "死亡"の概念を当てはめることで、ルールの探索を誕生/死亡する条件の探索に置き換えています。

これらの考えを適用することによって、探索範囲は以下のように減少していきます。

# 半径1の2次元セルオートマトンのルール総数
- 状態数 = 2状態
- 影響するセルの数 = 9セル 
- とりうるパターンの数 = (2状態)^(9セル) = 512パターン
- ルール総数 = (2 t+1の状態)^(512パターン) = 2^512 # 155桁の数です

# 異方性を削除した場合のルール総数
- 隣接セルの数 = 8セル
- 隣接セルのうち1であるものの数 = パターンの数 = 8セル + 1 = 9
- ルール総数 = (2 tの状態) * (2状態)^9パターン = 2 * 2^9 = 1024

# "生存"/"死亡"の概念を導入した場合
- ざっくりしているので算出できないが、以下のように説明されている
  - 周囲に生きているセルが多い場合は死ぬ(過密)
  - 周囲に生きているセルが少ない場合も死ぬ(過疎)  
  - 周囲の生きているセルの数が適正の場合、誕生/生存し続ける

探索範囲が小さくなるだけでなく、ルールが説明的になることで"過密"や"誕生"などメタパラメータが意味をもち、ルールを変更した際にその変更が何を意味するのか明示的になります。

新しい抽象化

いま私が作っているセルオートマトンは状態ではなく状態の特性によって周囲のセルに影響を与えるものを考えています。
これは化学における、物質そのものではなく物性により周囲への影響を測れる、という考えを元にしたものです。

状態そのものではなく状態がもつ特性を合計して、それをもとにt+1の状態を算出します。

画像1

この仕組みのうまいところはひとつの状態に対して特性をいくつでも設定できるところで拡張性に優れる点ですね。


この記事が気に入ったらサポートをしてみませんか?