生物の「状態伝搬」の模倣1

伝搬

はじめに

ストレンジアトラクターを作る非線形微分方程式の系の内部に、magnet SOPやtransform SOPを入れて、ストレンジアトラクターの状態をコントロールできることを説明してきました。これを受けて、次は2つのストレンジアトラクターがある場合、一つのアトラクターの状態が変わった際に、これを受けてもう一つのストレンジアトラクターも状態を変えるように、連動して動かしてみます。一つのアイデアとしては、ストレンジアトラクターを作る非線形微分方程式自体に、もう一つの非線形微分方程式を結合させることですが、個別に完結している系に相互作用させるのは相当に困難です。そしてまた結合させる数を増やす度に、全体を検討しないといけなくなり、現実的ではありません。そこで生物の「状態伝搬」の方法を考えてみました、生物の「状態伝搬」の方法には2種類あり、これらを併用しています。一つは神経伝達のような通信網を使って、指令を伝える方法です。これは技術では通信に当たります。そしてもう一つは、通信を使わず自分で周囲を観測し、それを真似る方法です。こちらはセンサで状態を測定し、それに基づいて変化する方法になります。先回のblog「映像による情報伝達モデルの基礎」はこの方法を試した例でした。通信網を使う場合、速く、正確で、遠くまで届きますが、配線(神経)が必要です。一方、状態を測定して変化する場合は、遅く、ノイズが多く、安定になるまで待つ必要がありますが、局所的で自然に同期します。つまり一長一短です。今回ストレンジアトラクターに対して、両方を作製してみました。状態を観測する後者の方は、今回なんとか動かした状態です。もっとシンプルにしたいと思っています。改良はまたの機会にして、今回はmasterの状態をslaveが真似る考えを中心に述べます。

通信による状態の伝搬

これは何も問題ありません。masterのストレンジアトラクターの状態を変更させる時に使うパラメータをOSC通信でもう一つのslaveのストレンジアトラクターに送り、それを受けてパラメータを変更し、同じ動作をさせるだけです。生物と違うのは、生物は通信網を身体内部に持っておりますが、OSC通信で使う無線LANは外部の設備です。生物の場合は自身が持っているので自律していますが、無線LANを使う場合は、外部の設備を使うので自律して動作したことになりません。ここが残念なところです。もし無線通信を使って自律系システムを構築したい場合は、装置間で直接通信するZigbeeやTWELITE等の無線モジュールを使って通信網を構築すればOKです。それではこの場合の映像を見てください。

2倍速で再生しています。左がmaster側で右がslave側です。受け取った後delayを入れて、時間遅れを目に見える形にして、伝わった感をだしています。この無線通信を使う手法は非常に一般的です。

状態測定による伝搬

次にmastarの状態を測定してslaveがそれを真似るようにします。この場合は自律したシステムになります。センサによる状態測定に対応するのが、masterのストレンジアトラクターのキャプチャーです。これはscreengrab TOPを使って行いました。slaveのストレンジアトラクターはこのキャプチャーを真似るように変形させます。これは結局、masterとslaveの状態を比較して、今どういう差があるので、同じにするのは何をすればよいかの指示を出すことになります。それでは、この方法の場合を次に示します。これも2倍速の映像です。結果は上と似てますが、やっていることは随分と違います。

残念ながら今のプログラムでは3回に1回は失敗します。しかし失敗しても、状態の差ができますので、フィードバックがかかり、繰り返しmetaballによって弾く操作が続き、結局は同じ状態になります。しかし時間は随分かかります。上の映像は一回ずつの状態変化で、上手くmaster側と同じ状態になった場合です。
次にプログラムの説明を行いますが、今後変更するつもりなので、大まかな説明に留めます。次の画像は、slave側のmasterの状態を検出する部分です。

最初にscreengrab TOPにより、masterのストレンジアトラクターの映像をキャプチャーします。図中の下側の図はこの部分の拡大です。transfrom TOPにより、45°回転し、crop TOPを使って、上部分と下部分、中間部分とに分けます。それぞれの部分をデータ化します。crop TOPの後にanalyze TOPで色に変え、それをtop oto CHOPでCHOPに直し、trail CHOPとanalyze TOPで移動平均をとり、その後expressin COPで1, 0の判定を行っています。例えば上ににも下にもあれば、2領域にある状態、上側だけ1で下側が0なら、上側でけにアトラクターがある状態、といったことです。両サイドにある状態を1, 上側だけにある状態を2, 下側だけにある状態を3、といった具合に数値化しました。同様なことをslaveに対しても行い、この数値を比較します。この部分のプログラムが次です。

master側に状態検出とslave側の状態検出を行い、これを比較し、同じになるようにslave側に指示を出します。ここで問題になるのが、過渡的な状態です。この時にバタバタと信号が動いてしまい誤動作します。過渡的な状態を判定から取り除くのが誤動作防止の部分です。結構難しい部分です。対策は3つの手法を併用しました。1.chop execute DATとtimer CHOPを使って、過渡的な状態の間、信号を検出しない状態を作ります。2.最初の画像の部分で使った移動平均です。パルス状のノイズが除けます。3.hold CHOPを使って、過渡的な間の情報を固定します。今回使用していませんでしたが、ヒステリシスを使う対策があるでしょう。

こうして作製してみると、過渡状態の誤動作防止対策がキー技術だと分かりました。そのためにmaster及びslave側の状態検出をどのようにすればよいのか、を検討すべきと思いました。近い内に改定するつもりです。しかしどんな方法であっても、「両者の状態検出-比較-誤動作防止-slaveへの支持」、このブロック構成になると思われます。

まとめ

2つのストレンジアトラクターの状態が同じになるように連動する方法を試してみました。生物のシステムを真似ようとしました。一つは通信網を持つ場合で、無線通信を使うことを想定しました。この方法は一般的です。しかし自律して動作させるには、通信網を準備する必要があります。今回は無線LANを使うOSC通信ですませています。もう一つは、状態をセンサで検出して、同じになるように変更することです。master側のストレンジアトラクターの形をキャプチャーすることがセンサに相当します。これと自分自身であるslave側の状態を合わせるように、指示を出す構成を作製しました。過渡的な状態の誤動作を防止する方法が重要なことがわかりました。誤動作防止対策が確実にできるように、どういう状態検出が適切なのか、改良する必要があります。

コメント