/**/

チュートリアル 17:
名前を持ったマトリックスによるフィードバック

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

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

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


jit.noise オブジェクト


jit.noise オブジェクトは全体がランダムな値からなるJitterマトリックスを生成します。オブジェクトの dimplanecounttype というアトリビュートによって、出力されるマトリックスが決定されます(この場合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 オブジェクトはこのようなフィードバックループの中で最もその機能を発揮し、入力されるマトリックスに対しシンプルなセルオートマタ処理を行います。