単純な規則から複雑系へ

cntt.tv の Ngoc さんの文章をベトナム語の勉強をかねて翻訳してみる。
今日のお題は、めくるめく神秘の世界、複雑系についてだ。

Từ qui luật đơn giản đến hệ thống phức tạp (単純な規則から複雑系へ)

原文のほうには、美しい画像がふんだんに使われていたり、ライフゲームそのものが、アニメーション GIF で動いていたりするので、ベトナム語がわからなくても、上のリンクを一度たどって内容を確認してみてほしい。(2009/4/10 原作者の指摘により Javascript => アニメーションGIFに変更)

Quartz Composer か。Mac を買ったらいじってみよう(笑)。

===翻訳開始

単純な規則から複雑系

自然界で、各個体に対しては極めて単純なのに、群れのすべての個体に適用されると、巨大な作用をもたらすような規則があります。どのようにして、イナゴの群れは数百万もの個体を同じ方向に移動させることができるのでしょうか。どのようにして、アリの群れは(「アリの群れのように密集して」という表現のように)移動しながらも、なお「渋滞」しないで済むのでしょうか。どのようにして、魚の群れは、敵を避けるため、同時に突然方向を変えることができるのでしょうか。これらのすべての現象は、数個の極めて単純な規則に基づいています。

最近数十年の間に、人々はこのことに気づくようになり、複雑系(complex system)と呼ばれる新しい研究分野が開かれました。この研究分野は非常に広く、もっとも有名なトピックは、おそらくバタフライ効果フラクタル幾何学でしょう。応用として一番よく目に付くのは、シュミレーションに関する応用で、次のようなものがあります。正確な気象予報のための気候モデルシュミレーション、渋滞を避ける方法を探すための交通モデルシュミレーション、山火災の延焼速度および延焼範囲を予測するための山火事モデルシュミレーション、効果的な避難方法を提案するための洪水モデルシュミレーション、など。一般的に言って、この研究分野は群れについての研究なのでマクロな話が多く、そのため政府からの関心と補助をとても必要としています。多くの方にインスピレーションを与えられるように、この記事では、ライフゲームQuartz Composer を使ってシュミレーションプログラムを書く方法について紹介します。

ライフゲーム

これは、人が操作するものでなくて、群れの進化に関連するものです。碁盤状の格子(セル)の上に、自然を模した次の4つの規則を定めます。

  1. 生きているセルの周囲に生きているセルが1個以下しかなかったら、人口が過疎で、死ぬ。
  2. 生きているセルの周囲に生きているセルが4個以上あれば、人口が過密なので、やはり死ぬ。
  3. 生きているセルの周囲に生きているセルが2個あるいは3個あれば、着実に成長して、そのまま。
  4. 死んでいるセルの周囲に3つの生きているセルがあれば、そのセルは生きかえる。

わずか数個の単純な規則しかないのに、画面上には魅力的な画像が表示されます。いま私たちにとっての問題は、この映像をシュミレーションして記録するなんらかツールを使うことです。

Processing vs. Quartz Composer

学生に複雑系の学問を教えるとき、多くの大学で Processing を使います。これは、図形を描くプログラムを書くためにJavaに似たより単純な言語を使うことができるIDE です。大半の学生が Java を通じて学んできているので、これは合理的でよい選択ですね。筑波大学(日本)では、学生たちはわずか2時限の指導の後には、Processing を使って、交通信号のある交差点の交通状態をシュミレートするプログラムや、山火事の延焼シュミレーションプログラムを書けるようになっていました。

Vimeo には Processing を使ってプログラムを書くためのチュートリアルの動画があります。読者に試練を与えるため、この記事では Mac OS X 上に用意されているQuartz Composer というツールを使います。

ここから先の部分を試してみるには、Mac(Mac はいまでは Windows マシンと同じくらい安いのに、より使いやすいです。もしまだないなら、一台購入を検討してみてもいいかも(笑)) と Quartz Composer の概要に関する知識が必要です。(Google 検索で一時間くらい調べてみてください)

Quartz Composer を使ってシュミレーションプログラムを書く

下のファイルダウンロードして、Youtube 上の動画 の最後の製品を見てください。

プログラムダイアグラム:

(図略)

コアになるのは、Core Image Filter と JavaScript で、nanki さんの netswitch! というブログの Quartz Composer - Conway's Game of Life - 宇宙大決戦 というエントリから持ってきました。Core Image Filter パッチは、単に1世代について計算するだけで、ループを作るには JavaScript パッチを使う必要があります。

dummy 入力は JavaScript パッチの中で使用されませんが、存在していなければなりません。というのはそれがイベントを「トリガー」するからです。Quartz Composer は入力の変化に気がつくと、画面を再描画します。注意点は、このパッチでは、前の世代の画像がObject グローバルオブジェクトにそのまま残ることです(ちょうど C言語の関数の中の静的変数のように)。この技は本当に強力ですね!

===翻訳終了