チュートリアル17

名前を持ったマトリクスによるフィードバック


このチュートリアルでは、名前を持ったjit.matrixオブジェクトをフイードバック・ループで使用する簡単な例をご紹介します。ここではランダムな値によるマトリクスを反復処理(コンウェイのライフゲーム)の「種」(seed)として使用します。

・Jitter Tutorialフォルダの17jMatrisFeedback.patというチュートリアルパッチを開いて下さい。

チュートリアルパッチでは、jit.noiseオブジェクトによってランダムな値による初期値のマトリクスが生成されます。


jit.noiseオブジェクト


jit.noiseオブジェクトは全体がランダムな値からなるJitterマトリクスを生成します。オブジェクトのdim、planecount、typeというアトリビュートによって出力されるマトリクスが決定されます(この場合1プレーンでcharデータによる80×60のマトリクスを要求しています)。このランダムなセルの値(最初は0〜255の範囲にあります)は、jit.opオブジェクトによって真(0)または偽(255)にセットされます。 jit.opオブジェクトの>演算子はナンバーボックスからの値(オブジェクトの右インレットに送られます)を取り、これを比較演算子として利用します。セルの値がこの値より小さければセルの値として0を、そうでなければ255をセットします。bangメッセージをjit.noiseに送ると、新しいランダム・マトリクスが生成されます。

jit.opに接続されたナンバーボックスの値を変更してみて下さい。jit.noiseオブジェクトに接続されたbuttonをクリックすると、その都度新しいマトリクスが生成されます。比較する値を大きく設定した場合、結果としてほとんど白いセル(255)が現れないことに注意して下さい。jit.opオブジェクトの下にある小さなjit.pwindowにはランダムマトリクスが表示されます。1プレーンのマトリクスデータは jit.pwindowによってグレースケールの映像として適切に解釈されます。


Jitterマトリクスのフィードバック

パッチの上部で生成されたクォンタイズ(量子化)されたノイズは、jit.opオブジェクトからcellularという名前を持つjit.matrixに送られます。


フィードバックループにある、名前を持つ2つのjit.matrixオブジェクト

パッチの上部でmetroオブジェクトからbangメッセージを受け取るこのjit.matrixオブジェクトは jit.conwayというオブジェクトに接続され、その出力は最初にもう1つの同じ名前(cellular)を持った jit.matrixに接続されます。jit.conwayオブジェクトによって出力されたこの結果は(結果の如何にかかわらず)それを送ったマトリクスと同じマトリクスに書き込まれ、フィードバックループを形成します。

toggleボックスをクリックしてmetroオブジェクトをスタートさせて下さい。パッチの下部にある jit.pwindowにはjit.conwayオブジェクトの出力が表示されます。

新しいランダムマトリクスから始めたい場合は、jit.noiseオブジェクトに接続されたbuttonをクリックして、新しいマトリクスをフィードバックループの種(seed)として書き込むことができます。jit.opオブジェクトから来たマトリクスは、共有されるcellularマトリクスに送られフィードバックループの中で用いられます。


ライフゲーム

jit.conwayオブジェクトは、入力されるマトリクスに対し、「ライフゲーム」と呼ばれる非常にシンプルなセルラー・オートマトンのアルゴリズムを実行します。プリンストン大学のJohn Conwayによって開発されたこのアルゴリズムは、有限な食料供給が行われる環境下での生物の生存サイクルをシミュレートします。マトリクスのセルは「生きている」(非0)か「死んでいる」(0)とみなされます。各々のセルは周囲のセルと比較されます。もし、生きているセルが2つまたは3つの生きているセルと隣り合っていればセルはそのまま生き残り、この値より多いか少ない場合にはセルは死にます(すなわち0がセットされます)。死んでいるセルがちょうど3つの生きているセルと隣り合っていれば生き返ります(すなわち255がセットされます)。非常にシンプルです。

jit.conwayオブジェクトは入力されるマトリクスを受け取る毎に。そのマトリクス上でライフゲームの1世代を実行します。従って、このオブジェクトをフィードバックループ内で使用することはその目的にかなっています。これによって、同一の初期データセットによる何世代にもわたるアルゴリズムの実行結果を見ることができます。

例えば、初期値のランダムマトリクスがこのようなものであった場合、


ランダムなマトリクスの値

jit.conwayオブジェクトによる最初の4回の繰り返しでは次のようなマトリクスが生成されます。


上のデータセットによって実行されたライフゲームの最初の4世代

フィードバックループにランダムマトリクスの「種」を与えたら、metroオブジェクトをオンにしてアルゴリズムが実行されるのを見て下さい!ライフゲームは、マトリクスが最後には自己振動する競るユニットのグループか空の(死滅した世界)マトリクスに安定するように設計されています。いずれにせよ、新しい数値の集合にbangを与えて初めからもう一度スタートさせることができます。


まとめ

Jitter処理では、jit.matrixオブジェクトのnameアトリビュートを使ってフィードバックループを作ることができます。同じnameアトリビュートを持つ2つのjit.matrixオブジェクトをチェーンの両端に置くことによって、チェーンの出力を、入力として用いられる同じJitterマトリクスに書き込むようなパッチを作ることができます。jit.noiseオブジェクトは任意のtype(データ型)、dim(マトリクスの大きさ)、planecount(プレーン数)によるランダムな数値によるマトリクスを生成します。jit.conwayオブジェクトは入力されるマトリクスに対しシンプルなセルラーオートマトン処理を行いますが、こういったフィードバックループの中で最もその機能を発揮します。