Chapter Seventy eight

第78話


パターンを見ているだけでは取り留めもないので、初期状態を変えたときに作られるパターンを記録してみることにした。

初期値を5000回変えながら、生じるパターンと頻度を記録してみよう。ある程度ピッチが長いサイクルに落ち込むネットワークパラメータでないとつまらないので、ピッチが指定の長さの範囲に入るパターンを見つけ、そのネットワークパラメータで初期値を変更していくことにした。メインのダイアグラムは表示器で少し込み入っているが、構成はシンプルだ。

Rock Signalと書かれているアイコン(rock.vi)はピッチが所望の範囲になったときに素子の接続と素子の関数をロックするためのVIだ。一旦ロックするとリセットしないかぎり出力はTrueのままである。ランダムネットワークを作成するVIはその後は、初期値だけをランダムに変更していく。

rock.viのような、閾値を超えた時にTrueとなって、それ以降入力の如何にかかわらずTrueを維持する機能は、たまに必要になることがある。ここでは、Falseを条件端子に接続したホワイルループに初期化しないシフトレジスタを作ってこのような動作を行っている。

Space 32と書かれたアイコン(32bitSpace.vi)から出力される周期パターンの情報(Periodic Patternクラスタ)をまとめて集計しているのが、clerkと書かれたアイコン(clerk.vi)だ。発想がワンパターンで困ったものだが、rock.viと同じ構造を使っている。

リセット信号でシフトレジスタの初期化を行っている。パターン毎の情報をクラスターアレイで収集するシフトレジスタとチェックサムを蓄積する一次元配列のシフトレジスタを使っている。

チェックサムの配列のシフトレジスタに登録されていないパターンが入ってきた時にはそのチェックサムを配列に追加し、パターン情報のクラスター配列に新しく要素を追加する。
チェックサム配列にすでに登録されているパターンの場合にはクラスター配列の該当する要素のCountsとPattern Posの情報を更新する。チェックサムが偶然一致する場合もあるかもしれないが、ここでは何も対応していない。たぶん問題になることはないだろうが、変なことが起った時はチェックサムの衝突を疑ってみることにしよう。
さて、メインのダイアグラムに戻ってみよう。ランダムに初期値を変更してパターンを集計しているのだが、ネットワークパラメータをロックするサイクルは記録していないので5000回弱の試行回数になる。32ビットの空間は4294967296のサイズになるので5000回というのは10^-4%の粗っぽい探索にすぎないことは注意しておこう。これでも実行を終えるまでには数分かかるので、待っている間、PTRN SELで指定してあらわれたパターン(Pattern)のグラフを眺めることができる。探索が終了するとネットのパラメータと集計結果を記録する段階になる。二つのクラスター配列からなる情報はLabVIEWでしか利用しないと割り切ってしまえば保存も楽だ。
Saverと書かれたアイコンで二つのクラスター配列を一つのクラスターにまとめた後でフラット化して保存することにした。専用の読み取りVIでないと正しく読み取れないので、.SPCという拡張子を付けることにした。
次回以降に使うことになるが、Readerも同時に作ってきちんと読み取れることを確認しておかないといけない。バイト数を指定して読み取らないといけないことだけが違う点で、フラット化したクラスターの定数をタイプとして接続すれば元のクラスター配列が復元できる。

こんな感じでできたのが次のようなメインパネルだ。ループの中で表示器を多用しているので500回に1回ぐらいの表示に間引けばもっと速く動作するだろう。このパネルに表示されている例では16個のパターンが見つかり、はじめの方で見つかった4個のパターンに頻度は集中している。そう事からすると1%にはるかに満たない探索でも32ビット空間の性質はおおまかに捕らえられるような気がしてくる。

具体的アイデアはないのだが、次回は空間の構造を視覚化してみたいと考えている。お手本はカウフマンのThe originns of Orderの表紙にある不思議な図形なのだが、冬休みの間に拾い読みでもしてみよう。

 

See you!

Nigel Yamaguchi


戻る