検索フォーム

コア戦争全体に公開
2009年07月03日20:32
写真写真

 進化したビスケットのワークショップを、原田さんにお願いして早稲田でやってもらった。久しぶりのビスケットは、操作性の単純化がどんどん洗練されている。ビスケットとのつきあいは長くなるけれど、旧友の知らない顔を見るような感じがする。

 目の前のプロジェクターに広がる海に、自分が作った遺伝子をもった生命が泳ぎ始める。ゼミ生たちの作品も、次々と放たれる。遺伝子(プログラム)の中には、《?》マークがあり、これは「任意の相手」を表す。《?》が前にきたら右によけるとか、くっつくといった挙動を書くことができる。

 目を海に泳がせながら、本能的に《?》を食って自分を殖やしたいと思ってしまう。ビスケットの過去を知っている僕は、《?》を食うプログラムが原理的に可能なことを知っている。ここでそれは許されていない。

 さらに、ある記憶が頭をもたげる。それはずっと昔、コンピュータにとりつかれたときにいだいた思いにつながる。

《?》の遺伝子を書き換えたい。

 オペレーター(操作するもの)とオペランド(操作されるもの)が同じ空間で作用しあい、オペレーターがオペランドにもなること。そのきわみを見たのは、PC初期に流行ったコアウォーだ。

 コアウォーについて22年前に書いた文章が、自分の思考の根であり、マニフェストであることに気づく。探してみても、テキストファイルがない。

そうだ、原稿はすべて鉛筆で書いている頃だった。早速雑誌のスキャン画像をOCRにかける。

----------------------------------------------------
「コアウォーズの詩人達」

安斎利洋

 私の息子がまだ1歳半に満たない頃、全紙に引き伸ばしたマンデルブロ集合の画像を、なかば意図的に壁に貼り続けていたことがある。予想に違わず、その画像は無垢な視覚を捉えて離さなかった。彼の眼はさまよい込んだ昆虫を追うように、しきりに何かを追跡していたように思う。
 経験の鱗をまとったわれわれの眼も、ある映像について直感的に生と死を峻別することがある。たとえば、このデッサンは線が死んでいるとか、彼の目は生きているとかいうように。あるシステムが創造的な生成過程をはらんでいるか、ある定常状態に捉えられているかということを、われわれの感覚はいち早く判断することができる。生きているデッサンは、決して物体の外形をなぞったりしない。線は物体の内側を包むばかりでなく、物体の外側の空間をも包むだろう。また線は、ある方向へ出発するとともに他の線の帰結でもあるだろう。それに反して死んだ緑は、多くの意味が重畳することはない。生きている線が眼を惹き付けるのは、重畳した意味が視覚の運動を喚起するからだ。
 こうした直感は、視覚だけに備わったものではない。たとえばコンピュータのプログラムを操作しながら、そのシステムがあたかも生きていると感じる瞬間がある。そのプログラムはあたかも生き生きとした絵画のように、われわれの精神の運動を喚起する。もっともそういうプログラムに出くわすのはごく希で、大抵われわれは「プログラムは死んでいる」ということを前提にコンソールに向かっている。
 たとえば私の前にあるホームドクタープログラムは、私の体調に関するいくつかの入力に対して「ひょっとすると癌である」といったアドバイスを出力する。おそらくこのプログラムの中には家庭医学辞典ほどのデータベースが蓄積されていて、私の体調にマッチしたある項目が表示されたのであろうことが容易に想像できる。プログラムの全分岐を網羅した入出力テープルがプログラムのすべてであり、それをいかに圧縮したかがプログラムの出来映えを決める。あるいは光線追跡法による画像出力プログラムは、物体と光源の定義された記述をもとに、光線の束のひとつひとつについて屈折、反射、減衰を算出する。このプログラムの目的は、圧縮表現された記述を画像に展開することにある。
 いずれにせよこういったプログラム達は、他のほとんどのプログラム同様、入力をある明確な遷移によって出力に結びつける。そしてそれが明白である限り、われわれはシステムにバイタリティーを感じることはない。システムが生きているように感じられるのは、展開された出力からは容易に想像できないある圧縮された表現が秘められるときである。

         ●

 コンピュータのバイタリティーを如実に示す好例は、ゲームの体裁をとった2つのプログラム「ライフ」と「コアウォーズ」に見ることができる。ここで言うプログラムは、ゲームを可能にする仮想コンピュータのシミュレータである。ライフの仮想マシンは、格子状に並んだ無数の(理想的には無限個の)単位コンピュータ(セル)の集まりである。コアウォーズマシンの方は、同一のメモリ空間にプログラムカウンタをもつ2つのCPUである。このような仮想マシンを構築するプログラムは、それほど高級なものである必要はない。ライフやコアウォーズのプログラムは決して生きている訳ではなく、生きられる環境を準備するに過ぎない。この仮想マシンには、もうひとつ別な(生きている)プログラムをわれわれ自身が与えなくてはならない。
 このプログラムは、プログラムであると同時に仮想マシンに入力された初期データでもある。プログラムを走らせると、これらの仮想マシンは初期データに圧縮された遷移を順次展開し、データすなわちプログラムそのものを変換していく。われわれはその展開をただちに予想することはできない。そればかりか、自分自身で作った最小のプログラムに隠された最大の能力にしばしば目をみはることになる。プログラムが自分自身を参照し書き換えるという自己言及性によって、これらの遊びは極めて今日的な舞台に立たされていると言える。
 プログラマーは多かれ少なかれ、コンピュータソフトウェアが自己言及によって増殖するこの魔術の恩恵を受けている。ソフトウェアはもともと何もないところから靴組を編み上げるように構築される。もしプログラムを生み出すプログラムがなかったら、プログラマーの仕事は指数関数的に増大するはずだ。しかしながら今日のソフトウェア工学は、先のゲームのように極端な自己言及を許している訳ではない。むしろコントロールされたヒエラルキー構造によって、自ら放った砲弾を受けない方法を推賞している。完全に自律的なシステムは、制御の恩恵に慣れすぎたわれわれの工学的生活環境にそう安々と滑り込んでは釆ないだろう。なぜならそれは、コアウォーズのメモリ空間に投げ込まれた癌紐胞のように、たやすく自らを否定し得るからだ。
 するとわれわれは、如何なる手だてで生きたシステムを掌中に収めることができるだろうか。いや私の興味は、もっと安直なところにある。ライフやコアウォーズの仮想マシンに驚くべき圧縮法で記述された宝石を残していった多くのプログラマー達は、如何なる方法でそれらに接近し「ものにした」のだろうか、ということである。在来の分析的方法からすると、それらは余りに天下り的で謎に満ちている。私はむしろ、美学や詩学の必要を感じる。詩人は恣意的な音韻(たとえば樹と気が同じ音であるというようなこと)を必然的ななにものかに転換する能力を持っている。コアウォーズのプログラマーは、同じように恣意的な命令コードを必然的なデータとして操らなくてはならない(コアの戦場では命令Aと命令Bの足し算が命令Cになるという偶然も考慮しなくてはならない)。またライフゲームの匠達は、画家が線に多くの意味を重畳するように、将来の華々しい展開を単純なパターンに畳み込むことができる。

         ●

 われわれの視覚も非常に複雑なフラクタル画像に対してでたらめを感じる以前に、それを生成するプロセスの単純さを察知することができる。これは感覚に備わった情報の圧縮能力である。フラクタル画像を生成するプログラムは簡潔な記述を画像に展開するが、われわれはまったく反対の方向に生成を辿り、パターンを統合するあるモデルを感知する能力を持っている。われわれが画像に「生きている」なにものかを発見したり「美しい」と感じる作用は、この生成の遡行に他ならない。コアやセルを自在に操る詩人達が「生きている」かに見えるシステムを作り得る能力も、おそらくこれと同じ精神の帰納的な作用がかかわっている。するとわれわれのテーマはたんに「生きている」システムとは何かということにとどまらず、「生きていることを感じる」システム、また「生きているシステムを創出できる」システムというように円環を広げていく。
 当面私は、それをコンピュータによって模倣するという刺激的な野心を保留しよう。現在私が取り組んでいるのは、ライフゲームをはじめとするセルオートマトンモデルを、ペイントシステムというCGにとっては最も原始的でインタラクティブなソフトウェアに応用することである。私を焚きつけるのは、手でフレームの情報を書き換えるという変哲もない作業が、データを生成する作業であると同時に、そのデータの振舞いを決定するプログラムの生成でもあるという点である。彼の描いた線は、彼の描いた線の変容をも決定する。このシステムを相手にすると、われわれはフラクタル画像の中で落ち着きを失う子供の眼のように、作品とわれわれとの間の予測困難な循環にしだいに引きつけられていくはずだ。
 私はこのシステムが、人間と機械のインタラクションによる「生きている」円環の実験装置だと考えている。

AIジャーナル(株式会社ユー・ピー・ユー) 1987年12月号

コメント

安斎利洋2009年07月04日 01:56
にしのさんのところに、飛び火。
http://mixi.jp/view_diary.pl?id=1215000530&owner_id=4077071
びすけっと2009年07月04日 08:32
ビスケットは,どんなに下手くそなファシリテータでもワークショップは成功する,というのを目標に進化させたので,ああなってます.ソフトの目標が一人もおちこぼれを作らない,ということでもあったので.

早稲田の彼らは,今のビスケットを完璧に理解できただろうから,今度,それらの制約を取り払った素のビスケット(危険でもあるけど,それがまさにコンピュータというべきもの)を触らせてみましょうか.たしかに,それをコースの最後に入れないと,コンピュータを全部教えたことにはならないですね.
メンタルスタッフ2009年07月04日 13:05
Rubyのよいところを説明するのにevalがあること、つまり、「プログラムがプログラムを文字列として作り出して、それをその場で実行するのが簡単にできる。」というようなことを言ったりすることがありますが、その話を聞いた後、実際にやってみて、「本当だ!」と思ってくれるか、「面白い話ですね。」ということで、終わってしまうのかの間に、何か違いがあるような気がします。「あ、動く!」っていうことを確認することの面白さって何なのだろう。

一方、Rubyの良いところには、「C言語なんかと違って、GCがあって、メモリーの管理をしなくったっていいんだよ。」とか言うこともありますが、実感という意味では初心者が「out of range, segmentation fault.」なんかを、厭というほど経験するのも意味がある???
安斎利洋2009年07月04日 14:24
>今度,それらの制約を取り払った素のビスケット(危険でもあるけど,
>それがまさにコンピュータというべきもの)を触らせてみましょうか.

いいですねー。海をながめながら思ったのは、自分のオブジェクトが泳いでいるのはうれしいけれど、ほかの人のオブジェクトへの関心はそれほど沸いてこない。

たとえば捕獲と増殖のような闘争的な関係ができてくると、突然ほかのオブジェクトのふるまいが、自分のプログラムの戦略の対象として見えてくるんじゃないかな。

ひとつがふたつになるとか相手を消してしまう規則は、発火するたびに効力を減少させるというのはどうでしょう。
安斎利洋2009年07月04日 14:37
>プログラムがプログラムを文字列として作り出して、それをその場で実行するのが簡単にできる。

コードがコードを吐き出すのはあたりまえとしても、この「その場」性、つまり同じ時間区切りの中で、コードを解釈するものがコード自身の吐き出したコードを解釈するかどうか。

野球のように、攻守が時間で区切られているのを好むか、サッカーのようにディフェンスがゴールできるのを好むか。

スクリプトの功績は、プログラミングをサッカー化したことかもしれませんね。

>実感という意味では初心者が「out of range, segmentation fault.」なんかを、厭というほど経験するのも意味がある???

再帰的なプログラムの美しさを終了条件で汚すときというのは、計算機の有限性が立ちはだかって、ある意味うれしさがある。このまえ高野明彦さんが言っていた、数学者かハッカーか、って話ですね。
安斎利洋2009年07月08日 12:08
にしのさんのところに飛び火、その2
http://mixi.jp/view_diary.pl?id=1217819777&owner_id=4077071

 安斎利洋mixi日記 一覧へ