マイグレータビリティ調査プログラム自動化 遺伝セルオートマトン Genelife Part 4
健康状態と今日の話(日記)
昨晩は早く寝て、そして今日は早起きできたのでとても健康状態が良いです。腹痛を除けば。なので、ちょっと散歩として買ったばかりの自転車で 10km ほど走ってきましたが、この辺の起伏の多さによろよろです。引き篭もり気味なので徐々に運動をしていきたいところですね。
ちなみに Google Maps には起伏を調べる機能が付いていました。Quora で聞いたら親切に教えていただきました。
これは一番近いターミナル駅(商業施設がたくさんある)までの道のりの高低差です。57m上がる必要があるみたいですね。下りもあるので登る量はもっと多いはずです。
マイグレータビリティ調査プログラム
Genelife におけるマイグレータビリティとは、前回の記事に書いたとおりのものです。
今一度おさらいとして説明しておきますが、Genelife はセルごとに設定されているルールが時間経過とともに別のルールに入れ替わるもので、その入れ替わった瞬間にセルが消滅せず定着しやすいかどうかを表す言葉がマイグレータビリティです。
マイグレータビリティは今はまだ数値化の方法は検討段階ですが、次のように現状の方法で数値を得ることはできています。
Pattern : 0,0, : stable = 0/10
Pattern : 0,1, : stable = 10/10
Pattern : 0,2, : stable = 10/10
Pattern : 0,3, : stable = 10/10
Pattern : 0,4, : stable = 10/10
Pattern : 0,5, : stable = 10/10
Pattern : 0,6, : stable = 0/10
Pattern : 0,7, : stable = 10/10
Pattern : 0,8, : stable = 10/10
Pattern : 0,9, : stable = 10/10
Pattern : 0,10, : stable = 10/10
Pattern : 0,11, : stable = 6/10
Pattern : 0,12, : stable = 10/10
Pattern : 0,13, : stable = 0/10
Pattern : 0,14, : stable = 0/10
Pattern : 0,15, : stable = 0/10
Pattern : 0,16, : stable = 0/10
Pattern : 0,17, : stable = 10/10
Pattern : 0,18, : stable = 0/10
Pattern : 0,19, : stable = 10/10
Pattern : 0,20, : stable = 10/10
Pattern : 0,21, : stable = 0/10
Pattern : 0,22, : stable = 0/10
Pattern : 0,23, : stable = 10/10
Pattern : 0,24, : stable = 7/10
Pattern : 0,25, : stable = 10/10
Pattern : 0,26, : stable = 1/10
Pattern : 0,27, : stable = 0/10
Pattern : 0,28, : stable = 10/10
Pattern : 0,29, : stable = 10/10
解説しないと読めないデータになっていますが、今回作ったツールの出力結果です。Pattern : 0,5 などの左側が、ルールの移り変わりをあらwしています。Pattern : 0,6,14 のように3つ以上連なることもあります。ここに出てくる数値はルールの番号で、今の所のルール番号はこのようになっています。
0 R("1/1"), // gnarl
1 R("35/236/3"), // lava'
2 R("1/1/3"), // gnarl'
3 R("245/12/3"), //
4 R("345/2345/3"), //
5 R("345/345/3"), //
6 R("23/36"), // high life
7 R("12345/45678/8"), // lava
8 R("3456/2/6"), // sticks
9 R("345/2/4"), // starwras
10 R("345/2/3"), // starwras'
11 R("01245678/3/8"), // meteor guns
12 R("345/34/6"), // prairie on fire
13 R("5/345"), // long life
14 R("23/3"), // conway's game of life
15 R("238/357"), // pseudo life
16 R("035678/245678/7"), // glisserati
17 R("3467/25/6"), // worms
18 R("245/368"), // move
19 R("45/368/8"), //
20 R("235678/3678"), // coagulations
21 R("1/1"), // gnarl
22 R("035678/245678/5"), // glissergy
23 R("1357/1357"), // replicator
24 R("34678/0123478"), // inverse life
25 R("1234/3"), // mazectric
26 R("/234"), // serviettes
27 R("23/23/8"), // belzhab
28 R("23/23/3"), //
自分で作ったルールには名前がついていなかったり、似ているものにダッシュを付けているものもありますが、左側のR内の表記が8近傍総和方世代セルオートマトンのルール記法に従った、正確にルールを表す文字列となっています。
この通し番号が先程の Pattern の数列に使われており、その数列の順番で 100 歳ごとにルールが変化します。つまり、Pattern : 0,6,14 は "Gnarl -> High Life -> Conway's Game of Life -> 最初に戻る" という意味を表しています。
次に、右側の stable = x/y ですが、x が安定化(クラスI:不動、クラスII:周期)になった回数で、y が施行回数です。つまり10回やって何回安定したか、の検証結果が出ています。安定しているかどうかの検証には、設定されたルール列の最初のルールの数に変化がなくなったかどうか、を調べています。つまりルールを順番に渡り歩いているなら安定とは言わず、どこかで停滞してしまっていることを示します。
Pattern : 0,6,14 の場合であれば、ルール0のセルの数が全く変わらない状態になっているということなので、6や14に移行できずセルが消滅したり0,6,14のいずれかのルールで周期状態や固定状態になっていることを意味します。
安定しやすいものは、セルオートマトンの面白い挙動を探す上で余り良い傾向ではありません。それは前回もリンクを張った「カオスの縁」という考え方があるからです。
生命の発生と進化には自然淘汰の他に自己組織化が必要
理論生物学ではこういった定説があります。自己組織化はこのセルオートマトンの平面世界で作られる個体で、これがないと生命体のようなとても複雑な現象が発生しないからです。すべて固形になってしまうと安定状態になりますが、個体がありつつも変化が起こっている、そういった複雑系を発見することが Genelife の最初の目標なのです。
では今の stable = x/y がどういった数値だと良いのでしょうか。stable = 10/10 だと、10回やってすべて安定してしまったわけなので、どこかでマイグレータビリティがゼロに近い途切れたルール列になっているということでしょう。
では 0/10 だったら?これは難しい問題です。10回やって1度も安定しなかった。ということは、もしかしたらクラスIII(ランダムな状態)になっている可能性が高いです。見てみなければわかりませんが、今回の検証ツールでは安定しているかどうか、しか検証できないので、クラスIIIになっている可能性も十分ありえます。しかし少なくとも
・最初のルールで数の変化を起こす周期状態になっている
・最初のルールで活発に動いている
・他のルールを移り渡り最初のルールにきちんと戻ってきている
・最後のルールが最初のルールを生成し続けている
このどれかになります。
では x=1..9 の場合は、というと、このいずれかの状態と完全に停滞状態になっているかが確率的に発生する状態となります。つまりは「安定へ収束することもあるけど、発散したり、もしかしたら複雑系になっているかもしれない」ということになります。
基本的には x=0..9 のルール列のパターンが、面白い可能性がわずかにある、というわけです。マイグレータビリティについても、x の値が小さいほど高くなる傾向にあると思われます。
今の所は、このパターンを網羅的に調べ上げるプログラムが完成していますが、時間がかかって仕方がないです。さっきの30通りの組み合わせの結果だけでマルチスレッドを使っても20分くらいかかっているので、網羅するなんてなるとちょっと気の遠くなるような時間がかかってしまいますね。
複雑系の判定って、本当にできるの?
今の手法では、起点となるルールのセルの数に変化があるかどうか、を指標にしていますが、これでは無秩序(クラスIII)な状態になっていても区別できません。
しかし、複雑系であるかを調べることって、本当にできるのでしょうか?個人的には、ある系が優れた複雑系かどうか検証することはできないのではないか、と思っています。
ノイズかどうかはの検証はそんなに難しくないでしょう。ある瞬間を切り取って、大中小の特定範囲のセルの生死の割合の分布をモンテカルロ法などで検証し、平面空間全体で同じような分布なら、その瞬間は何もないかノイズの可能性が高いです。別の瞬間を切り取って何度も判定し、特に違いがなければ、それはノイズでしょう。場合によってはノイズ状態の固定・周期状態かもしれません。
そしてこの方法で何もないかノイズじゃない場合は、特異点があると思います。ある瞬間の特異点が別の瞬間でも同じように見られるなら、斑のある状態で安定しているかもしれません。特異点に変化が見られれば、斑のある状態で周期状態にいなっているかもしれません。
でも、その特異点の変化にどんな特徴があるのか、それをどんどん調べていけば複雑系だということがわかっていくと思います。でも、複雑系って1つじゃないですからね。どんな特徴があるかは、複雑系によって違うと思います。
だから、複雑系かどうかを調べるのは、観測方法が集計データなのか、実際の画像・動画で見るかどうか、どっちのほうが楽なの?ということです。集計データの分析をやるくらいなら画像を見たほうがはるかに分かりやすい、そう人間の脳みそが作られているからそれを利用すればよい、と思っています。
だから、今回のツールは安定や周期状態を取り除いたら複雑系かもしれないね、というアプローチで作っています。stable = x/y の数字が 10/10 じゃなければ、面白いことが起こっている可能性もあるかも!?じゃあ見てみよう!ということです。
SETI の話
SETI という地球外知的生命体探査プロジェクトというのがあります。SETI@home というプロジェクトでは家庭用コンピュータも使って大量の計算能力を手に入れる、という手法を取り入れていました。
この SETI は宇宙から地球にやってきた、観測所で手に入れた膨大な観測データ(電波望遠鏡なので、可視光や不可視光を含むエネルギーの変化のデジタルデータ)をノイズではない可能性があるか否か、と判定して、意味のあるデータ、 ETI(地球外知的生命体)信号が存在する可能性が少しでも高いものとそうでないものを仕分けるプログラムが使われています。
これも、可能性が少しだけ高いものとの仕分けですね。最終的に ETI は人間が慎重に判断しています。例えばこの信号です。
SETI@home により検出された、もっとも ETI である可能性が高いとされた信号の電波源です。同一電波源から非自然的な信号が複数回検出された唯一の電波源です。Wikipedia の記事を読むだけでも、様々な議論がなされていることがわかると思いますが、やはり最終的には人間が判断しています。
この信号はちょっと特殊だけど、意味を持っているのかまではわからない。それくらいしか判別できていないのです。SHGb02+14a については、数十億個のちょっとETIの可能性がある信号の中から抜粋された同一電波源からの特殊な信号だったことが注目されたわけですから、信号の意味よりも、出処に着目された判別となります。仕分けされた段階で数十億個の電波源があって、そこから人間がより詳しく解析して数百個にしぼり、それでも結局わからずじまい。
SETI プロジェクトは応援しています。宇宙にある電波の中から意味を持つ信号を検出することは、地球外の知的生命体の存在・さらには所在を探す手がかりになりますから、もし大発見をしたら、宇宙人と交信できる可能性だって見えてくるわけです(何万光年も離れた場所だと何万年もかけて交信するわけですが)。
でも、膨大なデータと膨大な計算機による仕分けプロジェクトは、この規模だから成り立っているわけです。手元に作った小さな宇宙が複雑系かどうか判定するのも、実はこれくらいの規模で考えることだったりするのではないでしょうか。
つまり
マイグレータビリティ調査プロジェクトは、一旦今の形で終了し、出てきた膨大なデータの中から適当に自分の目で確かめて、本当にマイグレータビリティが高いのかをマークして、数を十分絞った2ルール間の関係性を作り、その関係に基づいてルールを作ってみようと思います。
あと、そのルールの組み合わせ方を遺伝的アルゴリズム(というよりコピーと突然変異)を使って淘汰させてみて、小さな宇宙に起こる奇妙な現象を探りたいなと思います!