生物の「状態伝搬」の模倣:修正

伝搬

はじめに

先々回の「生物の「状態伝搬」に模倣」では、masterとslaveの2つのストレンジアトラクターを如何にして同じ状態にするのか、について検討しました。ここで、通信を使う方法と状態を検出してそれに合わせる方法とを紹介しました。通信を使うと複雑な情報を素早く伝えることができますが、通信網が必要となります。一方、状態を何らかの方法で抽出しそれを模倣する方法は、通信網は必要としませんが、状態が安定するまで待つ必要があることや、状態判定に伴う誤動作防止対策等が必要となり、複雑な情報を伝搬させるには向いていません。先々回のmasterを真似る方法は、2D画像を使ってcrop TOPで分解し、ピクセルの数によって状態判定しました。状態が変わる過渡状態の対策が不十分で、3回に1回は失敗しました。今回はこれを修正致しました。

改良版の方法

それではまず、映像を見ていただきましょう。

今回は確実にmasterの3つの状態を判定し、slave側はそれに合わせることができるようになりました。映像は4倍速です。私のパソコンでは更にもう一つ別のストレンジアトラクターにも伝搬させることはマシンパワーとしてできないように思います。それでは改良点について述べていきます。次の図はmaster側の状態判定部分です。

一番左にあるnull POPはストレンジアトラクターを作るためのフィードバックの一部です。これをtransform POPで回転し、斜めになっているアトラクターをy軸に沿った形にします。この状態の図が次です。

今回はgroup POPを使って、上側、下側、中間部分と3つの領域に別けます。この領域に粒子がは在ると、その数を数えます。それがpop to DATです。そしてその数をconstant CHOPに表示します。例えば上下の二つの領域にアトラクターが在る場合は、上側に2465個、下側に2535個、中間に0個、というように求まります。constant CHOPには「op(‘popto1’).numRows – 1」のようにスクリプトを書きます。その後、移動平均をとり、上・下・両側の状態判定を行います。これらは誤動作防止対策にもなっています。今回扱っている粒子の数は5000ポイントです。上側の判定では上側だけに5000ポイントになり、かつ、下側, 両側が0ポイントになる時に1になります。下側の判定も同様です。中間の判定は、上側・下側が5000未満となり、且つ中間が0になる時1になります。このようにすることで、状態が確定した時に信号が現れ、過渡段階では0が出力されるようになります。そして最終出力では、上側が1, 下側が2, 両側が3, 過渡状態は0の信号が出力されます。

slave側はこの信号を受けて、同じ状態になるようにmetaballの位置とサイズを指定する指示を出します。この部分のプログラムが次です。

左側にmasterの判定プログラムがあり、これと同じプログラムがその下のslave判定プログラムです。masterとslaveの判定プログラム結果は最初違っているわけですが、この違いを検出してmetaballの位置とサイズを決定し作用させることで、slaveをmasterと同じ状態にします。比較・状態判定は、masterとslaveの状態を比較し、何をすればよいのかを番号で出力します。次の状態遷移指示はこれをmetaballを動かすための指示に変える部分です。metaballの位置の指示とサイズの指示があります。次の誤動作防止部分は、比較・判定状態が過渡的にばらつく場合があるので、過渡状態の間、信号を出さないようにする機能です。今思うと、masterとslaveの判定プログラムの後に、両方の状態が確定するのを待たせるプログラムを入れたほうが良かったかもしれません。左から順番に書いているので、このような構成になりました。最終の情報は、metaballの設定にフィードバックされます。

まとめ

先々回のプログラムは2D画像を分けて、そのピクセルの数から状態を判定していました。今回は3Dのまま、group POPを使って領域を別け、粒子の数を数えることで状態を判定しました。slave側で状態を比較し、metaballの位置をセットする命令とサイズをセットする命令とを出力します。過渡的な状態を避けて出力し、master側に従わせました。誤動作することなく動作するようになりました。ストレンジアトラクターはここで扱った3つの状態の他、上下を遷移させる状態、それから単振動に相転移させることができます。単振動状態も上下それぞれにある場合と、両側に及ぶ場合の3つがありました。これら全てを通信を使わずにmasterに合わせるのは相当に複雑です。生物も周囲を観察することで伝達する制御と、神経系を使って伝達する制御を併用しています。使い分けが重要です。またロバスト性の観点から併用するシステムもあるでしょう。

余談ですが、私は恐らくハードウエアを動かす際に、マイコンを使わずにロジックICで全て組むことを行ったことがある最後の世代のように思います。勿論私もマイコンを使うようになりますが。TouchDesignerのプログラムで制御系を組む時は、昔の手法が結構役立ちます。面白いものです。今回のように状態を数値で場合別けする方法を取りましたが、映像をパターン認識する方法もあります。AIを使うと通信が必要になりますが、ここで挙げた数の状態なら内部で準備することもできるでしょう。このような手法を自分で行ったことがありませんが、そのうちできるようになりたいと思っています。

コメント