忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

時間逆転シミュレーションはたくさんの解の候補を計算しなくてはいけないのか?

時間逆転カメラは、画像の削除ボタンを押すと、未来の景色をメモリに創造します。これをシミュレートしようとすると、まだ計算されていない景色をメモリに保存しなければならないという、ナンセンスな状況が生まれます。実際にはこれはある方法ではかんたんで、別の方法ではとても難しいということを示します。


簡単な方法

時間逆転カメラのシミュレーションはある意味かんたんです。というのも、カメラが写真を撮るシミュレーションをして、その最終段階を元にプログラムを逆再生すればよいだけだからです。逆再生というのは、速度をひっくり返して普通に再生するということですから、現実世界では不可能でもシミュレーション世界の中でならとてもかんたんです。

ただしこれをやるには、空気分子をすべてシミュレートしなくてはいけないという代償が存在します(まあそれにしたって空気分子が少ない世界をシミュレートすればいいので、たいして問題ではありません)。カメラの画像は削除されると熱として周りの空気に逃げていくので、逆再生すると空気のランダムな分子運動から画像データが作られるということになります。実は、画像データは空気に含まれているのです。無から画像データを作り出すには、空気分子がなければいけません(だから実際には無ではないのです)!

これはダグラス・R・ホフスタッターの『ゲーデル、エッシャー、バッハ』でカメがカニに聴かせたバッハの演奏レコードの作り方に似ています。カメは空気中の全分子の運動から、かつてバッハがチェンバロを弾いた時の演奏を復元したのです。実際には、全分子の運動を正確に測定することは量子力学のせいで不可能ですし、そもそも演奏の情報の断片は熱放射として宇宙中に散らばっているので空気中だけでは全く足りないのですが、考え方としては時間逆転カメラと同じです。現実では不可能でも、シミュレーション世界でならとてもかんたんなテクニックです。

この方法には1つ大きな欠点があります。私たちは、そのシミュレーションに介入できないのです。一度実行したプログラムを逆再生しているだけなので、ゲームのようにその世界の物体を動かしたりすることはできず、見ていることしかできません。シミュレーションというよりはアニメーションです。

難しい方法

私達がシミュレーション中の物体を自由に操作できるようにするには、ある程度シミュレーションを不完全にしておく必要があります。たとえばゲームでプレイヤーが操作するキャラクターは脳をシミュレートされていません。そのキャラクターの脳はプレイヤーの脳だからです。ある意味、プレイヤーの脳をプログラムの一部として使っているともいえます。

しかしそれがすべてを難しくします。時間逆転するには、シミュレーション宇宙全体を同時に時間逆転させる必要がありますが、プレイヤーの脳の状態は時間逆転できないからです。いや、プレイヤーの脳の状態だけではありません。プレイヤーの操作に影響を与える周りの環境(寒いと、プレイヤーは操作を間違えるかもしれません)、それに影響を与える太陽、銀河、全宇宙も時間逆転しなくてはいけません。狂気の沙汰です。

私がこれまで作ってきた時間逆転シミュレーションは、全てこの問題を回避できるよう注意深く条件を設定されています。たとえば、プレイヤーは最初に操作はできるものの、その後は一切干渉できない、とか、プレイヤーの無神経な操作による悪影響を打ち消せる都合のいい存在――空気――を、用意するといった具合です。後者の場合、空気は上記の分子レベルのきちんとしたシミュレーションにしてはいけません。イカサマが必要なのです!時間逆転ランダムウォークは周囲の分子をシミュレートせず、すべてを確率的に計算していますが、それは確率はねじ曲げることが出来るからです。きちんと周りの分子をシミュレートしてしまったら、プレイヤー付きの時間逆転などできっこありません。

しかし、空気分子をきちんとシミュレートしないというのは、別の悪夢を引き起こします。時間逆転カメラのシミュレーションが難しくなるのです。時間逆転カメラは空気分子の運動から画像データをもらうからです。空気分子を使わないとしたら、やはり確率をねじ曲げ画像データを無から作り上げるしかないのですが、一体どんな画像を作ればいいのでしょう?今作らなければいけないのは、未来の景色で……しかし未来の景色は現在のデータをもとに作られるのです。時間逆転カメラに自分が殺される画像が写っていたら、誰だってその未来を回避しようとするでしょう。しかし回避してしまうとタイムパラドックスです。タイムパラドックスが起きないような情報を時間逆転カメラに作らせねばいけません。現在を計算するためには未来が必要で、未来を計算するには現在が必要。つまり…

これを正攻法で解くのは不可能です。少しばかりインチキをする必要があります。現在からいくつかの可能な未来をじっさいに計算して、矛盾がない未来を選ぶのです。もしあなたがとても元気で、しかも周りを沢山の護衛に囲まれていたら、あなたが死ぬ確率はかなり低いでしょう。その場合、未来からあなたが死ぬというメッセージがやって来る歴史は未来に矛盾が生まれやすく、あなたは生きているというメッセージが来る歴史はかなり矛盾が生まれにくいでしょう。両方の歴史をじっさいに計算してみて、後者を選ぶわけです。

この計算の様子はきっと面白いでしょう。シミュレーション世界の住人たち(現実的には意思をもった人間ではなく、単純な粒子かなにかでしょうが)が、タイムパラドックスが解消されるまで、何度も同じ時間を繰り返すのです。そういう物語はたくさんありますからね。最終的に出来上がったシミュレーション歴史も面白いでしょうが、それを作り出す過程もかなり面白おかしい見世物となるでしょう。

まとめ

時間逆転シミュレーションにはかんたんなものと難しいものがあります。かんたんなものはプログラムはかんたんですが、新たな情報を付け加えることのできない(たとえばユーザーが外部から操作できない)、ただのアニメーションです。一方難しい方はプログラムは難しくなるものの、新たな情報を付け加え続けることができます。

拍手[0回]

PR