忍者ブログ

Memeplexes

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

より高い山に登る

コンピュータで仮想の山を登っていく時の計算について考えます。


井戸の中のかえる

コンピュータで行う計算には、仮想の山を考えそこを登っていくという計算というのがあります。それはプログラマが熱心な登山家だからではなく、単純に少しでもスコアの良いデータがほしいからです。たとえば新幹線N700系の奇妙な形はこの方法で計算されており、高速走行スコアの山を登って作られたのです。はじめはあまり速く走るのに向いていない形だったはずですが、それが変形していき、速く走れる形へ(コンピュータ中で)進化したのです。

なるべく高い山へ登るには、単純で大きな落とし穴があります。それは、今自分のいる場所が世界で一番高い山なのか、それとも自分が見える範囲で一番高いだけなのか、という点です。ひょっとしたらあなたはまだ幼稚園児で、今あなたが踏破した「今までの人生で一番高い山」は公園の遊具にすぎないのかもしれません。あるいは周りが霧に覆われていて、実は隣にもっと高い山があるのかもしれません。コンピュータで山登り計算する場合は、まさにこの状態で、自分のいる場所の高さしかわかりません。他の場所がどのくらいの高さなのかは、そこに行ってみなければわからないのです。現在スコアが最高だったとしても、もしかすると離れたところに、よりスコアの高い山があるかもしれないのです。

この問題を解決するには、一度低い方へ移動する勇気を持つ以外ありません。しかし、それは本当に勇気といえるのでしょうか?もしかしたら低い方へ移動した先に高い山などないかもしれません。

交叉

1つの解決方法としては、有性生殖のやり方を真似してみることです。複数のデータを混ぜ合わせたら、ひょっとすると、より高い山に登れるどこかにたどり着けるかもしれません。

母親データと父親データがそれぞれの局所的な山の頂上にたどり着いて、そこから更に上に行けなかったとしても、それらを混ぜ合わせた子データはさらに高い山に登れるかもしれません。この時、子に完璧を期待する必要はありません。要は進化の袋小路から逃げ出すのが目的であり、子が両親より低い場所に行ってしまったとしても、孫やひ孫が両親より高い場所に行くことができればそれでいいのです。

この方法は、両親の間に違いがあることを利用するテクニックですが(両者が全く同じ位置にいたら、子も同じ位置です)、あまりに両親がかけ離れすぎていてもうまくいかないということにも注意して下さい。富士山とアコンカグアの位置座標の平均をとっても、エベレストの位置座標にはたどり着けません。上の図のように、ある程度山が近い場所にまとまっている山脈のときに役に立つのです。

飽き

ここでは、私が以前思いついた方法(まだ未検証)をメモしておきます。うまく動作するかもわかりませんのでここに書いてある内容はあまり信用しないでください。あるいは、もう既に誰かが思いついている気もしますが。しかし、自分で考えてみるのも大切なので、ここで文章にしてアイデアを固めておきます。

これ以上高い場所に移動できなかったら、その場所に立入禁止の看板のようなデータを追加するのです。

はじめは(低い方の山の)山頂に立入禁止マークが1つ出て、登山家はそこからはじき出されます。次に、はじき出された先にも立入禁止マークが出ます。登山家はそこから上へ行けないからです。これを延々と続けると、低い頂上を中心に立ち入り禁止マークが広がっていくように見えるでしょう。そして、登山家は高い山の方まではじき出されるでしょう(あるいは、運が悪いと平地の方まで)。

擬人化した表現をするとこうなります:山を見つけた登山家は、最初一生懸命低い方の山に登るのですが、やがてこれ以上上に登ることはできないと分かるやいなや、より高い山を探してそこから離れようとします。はじめは低い頂上の周りをブラブラしますが、どんどんブラブラする範囲が広がっていき、最終的には別の、登るべき山を見つけるのです。その山が元の山より高いという保証はどこにもありません。しかし、より高い山に登りたいと思ったら、進むしかないのです。

ところで、これは山登り計算には直接役に立たない気もしますが、立入禁止マークに寿命を設けると、2つの山の間を行ったり来たりし続ける登山家が作れそうです(真面目な話ではなく、アニメーションにすると見てて面白いかもしれない、という話をここではしています)。片方の山に飽きると、別の山に登ります。しかしそうしている間に元の山の立入禁止マークはすべて消滅してしまうので、また登れるようになります。久しぶりにやってみるか、というわけです。

拍手[0回]

PR