Chapter Seventy six

第76話


進化はカオスの縁に生まれるという。秩序とカオスの相転移領域ににあるカオスの縁は、安定で確固とした変化のない世界と、予測不能な変化が永遠に続く世界の間にある。

複雑なパターンで点滅するランプはそのランダムネットワークがカオスの縁にいることを示しているのだろうか。ネットワーク、素子のロジック、初期状態のすべてがさいころで決められたランダムネットワークが複雑なパターンで動作しているのは何故なんだろう。点滅する素子をとりまく変化しない多くの素子は何故その状態を維持しているのだろうか。(by ぼのぼの)

そんなことは悩まなくてもいいんだよと、スナドリネコは言った。何が進化で何が退化か分かったものじゃないだろ。

さて、話を進める前に画面表示のためのdisp_state.viを簡単に説明しておこう。ネットワークの状態が変化するステップ毎に呼び出されて2次元ブール配列と強度グラフに表示する平均値を作成する。中央にあるホワイルループの2つのシフトレジスタが、累積値と加算回数を記憶しておく場所だ。条件端子がFalseなので呼び出されるごとに1回だけループ内を実行する。このような使い方の時にはシフトレジスタに初期値を接続できないので、使うまえにリセットする必要がある。ここではinitというスイッチでケース構造を切り換えている。

2個の入力と2個の出力を持つ素子をたくさん用意してランダムにつなげていったとき、全ての素子が一つの塊になるのだろうか? それとも、いくつかの塊に別れてしまうのだろうか? 体育館のフロアに400人の人が寝転がっていて、それぞれの人が勝手に足を掴みあうとどんなふうになるか想像してみよう。

ネットワークがどんな塊になっているのか調べるVIを作成してみた。findGroup.viはネットワーク内をたどってグループ数を出力するVIだ。これを使って調べた結果、1万回ランダムにネットワーク(サイズ=400)を作ったとき17回だけが2個のグループに分かれていて、それ以外の9983回は一つの塊になった。もっとたくさんクラスターができていると思っていたが、結果を見ればこんなものかとも思う。まあ、裏付けの無い感覚はいいかげんなものだね。

ランダムにネットワークを作ったときにほとんど一つの塊になることが分かったので、このVI自体はあまり重要なものではなくなったが、一応説明しておこう。

グループ番号記録用に配列を用意し、1度目に通過したときにグループ番号を記録する。初期値のままの要素は過去に一度も通っていない素子なので新しいグループを探索し始めるときの開始点になる。2入力、2出力の素子なので、接続されている素子を巡回していくときに2回通過することになる。巡回回数を記録して、2回通過してしまった素子に当たったときには、1回しか通過していない素子を調べ、そこから探索を継続する。1回しか巡回していない素子が無くなったときにそのグループの探索が終了したことになる。

さて、複雑な点滅動作は、ネットワークの素子の接続のグループ構造が原因でないとすると、素子の関数を含めて何らかの構造を考えていかないといけないだろう。複雑なことを考え始めるのに、N=400では変化を記述するのがたいへんだ。N=32レベルで検討することにしよう。ビットパターンを数値に直してグラフに表示させれば、時系列が分かりやすいだろう。

VIの変更は簡単だった。グラフを見ると、始めは不規則な振動をしているが、途中から規則的なパターンに落ち込んでいる。点滅パターンを考えるよりはるかに分かりやすい。

グラフにしてパターンがわかりやすくなったので、初期値だけを変更してどんなパターンが出てくるか遊んでいると面白い。下の4個のグラフは、ネットワークの接続パターンや素子の関数を固定して初期値だけをランダムに数十回繰り返してみたときに現れたパターンだ。上の2つは、初期値が違っていても同じパターンになってしまう例で、上の方は不規則な状態が長く続いていたが、下の方はすぐに規則的なパターンに入っている。このパターンのほかに2種類のパターンが現れた。他のパターンはないのか気にかかるのだが、32ビットの初期値を一つずつ変えてパターンを分類していくのは気が遠くなるような作業になるだろう。自動的にパターンを抽出して登録し、初期値ごとに分類できるVIが必要だ。
パターンを調べるVIはどうやって作ればいいのだろう。これは面白いかもしれない。

 

See you!

Nigel Yamaguchi


戻る