オチェアーノ - 情報の海に溺れて

読者です 読者をやめる 読者になる 読者になる

オチェアーノ-情報の海に溺れて

情報漏えいの事例など、情報セキュリティ意識を高めるブログ

MENU

ライフゲームの奥深さ。単純なルールでフラクタルや自己複製が起きる神秘

ライフゲームってなんぞや?

f:id:rk12liv:20161113002648p:plain

ライフゲームという言葉を聞いたことがある人はいませんか?

ライフゲームはセル・オートマトンの一種で、イギリスの数学者コンウェイが発案したものです。

 

セル・オートマトンとは将棋盤のように格子状になった盤面で、与えられた初期条件とシンプルな規則で系全体がどのように振舞っていくかを観察するシミュレーションの一種です。

まったくシンプルな規則ではありませんが、格子状の計算領域(メッシュ)の上で各種偏微分方程式を元に流体挙動の予測を行うCFDなども広義のセル・オートマトンと呼べるかもしれません。

必ずしもセルは正方形ではなく、六角形のセル・オートマトンなども存在します。

 

ライフゲームは、そのセル・オートマトンの中でも非常にシンプルな4つのルールから成り立つシミュレーションの一種です。

その名前の由来は、誕生、生存そして死滅という生き物の一生を真似ていることからきています。

そのシミュレーション結果の立ち振る舞いも、驚くほど生命体の挙動のように似ているのです。

 

今回は、そのように奥深いライフゲームについて紹介したいと思います。途中で出てくる画像は、意味が理解できなくても「ふーん」と眺めているだけでも問題ありません。

 

ちなみに先ほどの画像はその昔、Javaの勉強がてらライフゲームを作っていた時のスクリーンショット。セルに「生命が何回誕生したか」という情報をもたせて誕生した回数が多ければ多いほど青くなっていくという謎ルールを付加しています。資源は使い尽くした的な

ライフゲームのルール

盤面

ライフゲームはセル・オートマトンの一種なので盤面が必要です。盤面は将棋のように格子状の領域で、一つ一つの正方形をセルと呼びます。

f:id:rk12liv:20161113002109p:plain

セルは例えるなら空間のある領域で、ライフゲームにおいては

 

・セルが生きている=生命が存在する→f:id:rk12liv:20161113003213p:plain

・セルが死んでいる=生命は存在しない→f:id:rk12liv:20161113003234p:plain

 

という二つの状態しか定義されません。簡単ですね!

セルが生きている場合は塗りつぶし、死んでいる場合は空白にするのが慣例です。

f:id:rk12liv:20161113002922p:plain<俺についてこられるかな?

(この場合5つのセルが生きています)

 

セル一つを個体とみなすのか、家とみなすのか、街とみなすのか。考え方次第で挙動の解釈も変わってきます。

時間

ライフゲームでは時間という概念が存在します。

時間はステップや世代とも呼ばれ、盤面上の全セルが次に紹介する生命の法則により1ステップ先へ進むことで時間が経過することになります。

 

余談ですがプログラミングする際には、一つ前の盤面の状態を保持しておくことが重要になります。

生命の法則

ライフゲームは、とてもシンプルな4つのルールから成り立っています。全ての法則は、あるセルの回りにある8つのセルの状態を元に次の世代の状態を決定します。

 

1. 生きているセルの隣に生きているセルが1つもしくは0の場合、そのセルは過疎により死ぬ。

f:id:rk12liv:20161113004525p:plainf:id:rk12liv:20161113004534p:plain(中心のセルの回りに生きているセルは1つしかないため、次の世代では死んでいます)

 

2. 生きているセルの隣に生きているセルが2つもしくは3つの場合、そのセルは生き残る。(ちょうど良い生存状況)

f:id:rk12liv:20161113004249p:plainf:id:rk12liv:20161113004257p:plain(中心の生きているセルの回りに3セル生きているので、次の世代でも引き続き生存しています。個人的にヘソ曲がりと呼んでいます。)

 

3. 生きているセルの隣に生きているセルが4つ以上ある場合、そのセルは過密により死ぬ。

f:id:rk12liv:20161113004005p:plainf:id:rk12liv:20161113004012p:plain(中心の生きていたセルが、次の世代では死んでいます)

 

4. 死んでいるセルの隣に生きているセルがちょうど3つあれば、生きているセルになる。(生殖、誕生)

f:id:rk12liv:20161113003422p:plainf:id:rk12liv:20161113003436p:plain(中心の死んでいるセルの回りが3セル生きているので、新たな生命が誕生しました。次世代といいます)

 

ルールはシンプルですが、とてもよく練られていると思いませんか?

スポンサーリンク

 

初期配置

ライフゲームを語る上で重要なのは初期配置です。CFDなどの流体シミュレーションでも初期条件の設定は重要ですが、ライフゲームにおいては初期配置で系全体の挙動が驚くほど変わってきます。

この初期条件に非常に敏感なことは、初期値鋭敏性とも呼ばれ、カオスな系である条件の一つにも相当します。

 

ライフゲームにおいて初期配置とは盤面の中で、「最初はどこに生物が存在しているのか?」を定義することです。

 

f:id:rk12liv:20161113005341p:plain←rペントミノと呼ばれる有名な初期配置、長寿型と呼ばれます。シンプルながら非常に長い間系が生存し続ける。

 

初期配置をあるクラスタにわけ、それぞれの行動範囲を把握した上で系全体がどう振舞っていくかは非常に面白い研究になります。これはまた後ほど後述します。

壁はどうする?

シミュレーションにおける境界条件などに相当しますが、ライフゲームも端っこの存在を無視できません。

実際には、壁に相当する部分はセルを死んだ状態で固定します。正確には生命が存在していないというべきでしょうね、存在したこともすることもないので。

 

ちょっと宇宙の外側があるのかどうか、に通ずる面白いところだと思います。

まるでトーラスのように、壁を反対側の壁とリンクさせたりするのも面白い改造です。 

 

では、ライフゲームを実際に動かすとどうなるのか。代表的なパターンを紹介します。

ライフゲームのパターン1:維持パターン

ライフゲームでもっとも頻出、かつ「あーこのパターンかよ」と少しガッカリしてしまうのが維持パターンです。

たいていの初期配置は時間の経過と共にダイナミックな動きを失い、消滅するか維持パターンを残すだけになります。まるで文明のようですね。

 

もっとも有名なものに、ブリンカーと呼ばれるもの(星がまばたくように見える)とブロックがあります。

ブリンカー

f:id:rk12liv:20161113005658p:plainf:id:rk12liv:20161113005704p:plain→ f:id:rk12liv:20161113005658p:plainf:id:rk12liv:20161113005704p:plain→ ...

ブロック

f:id:rk12liv:20161113005856p:plainf:id:rk12liv:20161113005856p:plainf:id:rk12liv:20161113005856p:plainf:id:rk12liv:20161113005856p:plain→...

 

特にブロックは不動なので評判が悪いとか。

 

上記の例は簡単なパターンを紹介しましたが、複数の世代に渡る維持パターンも存在しています。

f:id:rk12liv:20161113010418p:plainf:id:rk12liv:20161113010439p:plainf:id:rk12liv:20161113010453p:plainf:id:rk12liv:20161113010504p:plainf:id:rk12liv:20161113010512p:plainf:id:rk12liv:20161113010528p:plain歴史は繰り返す。

ライフゲームのパターン2:グライダーに宇宙船

様々なパターンの中でも、注目されるのがグライダーや宇宙船と呼ばれる永遠に動き続けるパターンです。

f:id:rk12liv:20161113010843p:plainf:id:rk12liv:20161113010851p:plainf:id:rk12liv:20161113010906p:plainf:id:rk12liv:20161113010916p:plainf:id:rk12liv:20161113010928p:plain→...

とという具合に角が指し示す方向にどんどん動いていきます。永遠に動き続けるんですが、実際には壁があるので壁に当たってブロック君になります。安住の地を見つけたんですね。

 

これの大きくなったバージョンがいくつかあります。代表的なものは宇宙船です。

f:id:rk12liv:20161113011059p:plain

角がある方向に動いていきます。壁に当たるとグライダーになって反射します。

宇宙船「まずい、宇宙の果てだ!このままでは滅んでしまう!お前らだけでも生きろ!」→グライダー発射という情景が描かれます。

f:id:rk12liv:20161113121155p:plain(まずい・・・衝突する!)

f:id:rk12liv:20161113121210p:plainf:id:rk12liv:20161113121226p:plainf:id:rk12liv:20161113121236p:plainf:id:rk12liv:20161113121250p:plainf:id:rk12liv:20161113121303p:plain

f:id:rk12liv:20161113121316p:plain(グライダー爆誕)

ライフゲームのパターン3:シュシュポッポ列車、グライダーガン等の自己複製

生命のルールは絶妙なバランスで定義されていますが、その中でも自己複製を行うという不思議なパターンが存在します。

代表的なものでは、グライダーを打ち続けるグライダーガンと呼ばれるもの。そして、自分のコピーを進行方向の後ろに作り続けながら動いていくシュシュポッポ列車と呼ばれるものがあります。某首相が乗っていそうな列車ですね。

 

結構挙動が複雑になってくるので、詳細は動画を見るのがわかりやすいと思います。

www.nicovideo.jp

ライフゲームのパターン4:突然現れるフラクタル

維持パターンとグライダー系、あとはよくわからない動きがライフゲームのほとんどです。

たいていはこの3つを見て、最初は驚き、だんだん見慣れて飽きてきます。しかし、ライフゲームは時にとんでもない形を見せてくれるのです。

 

その一例がたった一つの直線からフラクタル図形が生み出されるという現象です。

そもそもフラクタルなど意識していなかったと思われる生命のルールと、たった一本の直線からフラクタル図形が作られていく様は、ライフゲームに生命の神秘が秘められているからに他ならないのではないでしょうか。

 

以下がその動画。実際のパターンは2分55秒からです。

 

www.nicovideo.jp

 

ある種の恐怖さえ覚えます。フラクタルとは、一体・・・。

ライフゲームのパターン5:エデンの園配置

ライフゲームの中でも重要なのは初期条件、つまり「最初に生きたセルがどこに配置されるか」ということを説明しました。

 

ところでライフゲームでは、その複雑な動きから盤面上のどんな配置でも一度は出現しそうな予感がします。

もちろん一つの初期配置で全ての出現パターンが網羅されるとは思えませんが、膨大な数の初期配置を考えればその盤面における全てのパターンがカバーされそうなものです。

 

しかし、実際にはいかなる初期配置からも到達できない神秘的なパターンが存在します。

それらはエデンの園配置と言われ、意図的にそういう初期配置にする以外に出現させることはできないのです。

 

以下はWikipediaによる最初に発見されたエデンの園配置。それにしても、ライフゲーム界隈はネーミングセンスが絶妙だと思います。

f:id:rk12liv:20161113012034p:plain

エデンの園配置 - Wikipedia

 

ライフゲームの奥深さ:塊ごとの行動範囲

初期配置によって系の寿命が左右されること、形ごとにどこまで発展して、どこまで影響を及ぼすかも決まっていることがわかります。

 

そこである初期配置の塊ごとに寿命と行動範囲を何世代(時間)、何マス(距離)で定義し、地球上の人類の移動や宇宙空間での生命体での関わり合いなどをシミュレートしてみるのも非常に面白い試みでしょう。

時折グライダーのようなやつが現れて遠く離れた場所に影響を及ぼすかもしれません。

 

他にも、様々な独自ルールを加える面白さがあります。例えば、ブラックホールを模して、盤面の任意の場所に2x2の生命が誕生しない領域を作ってみるとか。

同じ初期条件で同じルールでも、盤面の条件によっても生命活動は変わってくるものです。

 

ライフゲームそのものはシンプルで研究されつくしたかもしれませんが、時間に手を加えるとか(セルごとに世代の進み方が違う、など)盤面の状況を変えてやるとあっという間に再研究が必要になります。

 

そんな奥深さを宿しているのが、ライフゲームです。ワクワクしますね!

ちなみにGoogle検索すると・・・?

さすがGoogle先生、「ライフゲーム」と検索すると検索結果の画面の背景にライフゲームが展開されます。

見た目も私の作ったトップ画像のあれよりはるかに洗練されていて頭が下がります。

 

そしてさすがというかなんというか、長寿パターンのように見えます。そりゃ確かに一瞬で消えたら誰も気づきませんもんね。

 

ちなみに始まるのも一瞬なので私は初期配置を捉えることができませんでした。

誰か初期配置がわかったら教えてください。(それともランダム?)

ライフゲームをやってみよう!

ここまででライフゲームに興味を持った方は、ぜひともライフゲームをやってみてください。私が使った中ではこのサイトがやりやすかったです。

Life Game

(別にお金とかかかりません)

 

プログラミングを学んでみたい、と思っている方はライフゲームを作ることを目標にしてみても良いと思います。(やはり目的があるとモチベーションが違います)

とりあえずエクセルのマクロを使ってライフゲームを再現できれば、他の言語も挑戦してみましょう。

 

自分でライフゲームを作れるようになると、様々な俺ルールを試したりすることができるようになります。

ライフゲームを本格的に楽しめるようになるのは、初期配置(初期条件)のみならず境界条件や、振る舞い(ルール)の追加などを自在に操れるようになってこそ。

 

Welcome to the World of Life Game... (深淵にようこそ)

 

まとめ

ライフゲームはシンプルな盤面(空間)、ステップと呼ばれる世代(時間)、シンプルな4つのルール(自然法則)と生命(セルの状態)によって決定されるセル・オートマトンの一種です。

とてもシンプルなのに生命の神秘を感じられ、オリジナルのルールは研究され尽くしているものの少し手を加えるだけであっという間に別物に変身する奥深さがあります。

 

プログラミングの難易度も低いので、プログラミングを始めるきっかけの一つとしても最適でしょう。

もちろん、初期配置を適当にいじって遊んでみるだけでも1時間は潰せると思います。

 

奥深きライフゲームの世界、ぜひ試してみてください。

スポンサーリンク