Hatena::ブログ(Diary)

Tosikの雑記 このページをアンテナに追加 RSSフィード Twitter

2008-03-31

ヘビゲーム(Snake)でライフゲーム(人工生命)

ヘビゲーム(Snake)とはこんなやつ

http://gyazo.com/6918f2d404e20efaa0b5e6ca8de2cc42.png

http://www.neave.com/games/snake/game.php (誰かさんの作ったフラッシュゲームが動きます。参考に。)

ルールが簡単で画面もシンプルで、高校1年2年の頃はこんなんばっかり作って遊んでました。

で、今回はこのヘビゲームでライフゲームを作ってみました。いわゆる人工生命です。

ヘビライフのルール

仮にヘビライフという名前をつけました。ヘビライフのルールはこんな感じ。

  • 基本的にヘビゲームと同じルール
    • エサを食べると体が長くなる
    • 頭が障害物やヘビの体に衝突すると死亡する
  • 操作は人間ではなくヘビ自身が行う
  • ヘビは複数匹登場し、同時に画面中を動き回る
  • ヘビが死亡すると、その体のあった場所がエサになる
  • ヘビが一定の長さに成長したら、体の真ん中で分裂し、2匹になる
  • 画面の端は壁ではなく、ループしている

そして、肝心なのが操作(ヘビの行動)の決定方法です。ここにはニューラルネットワークを用いました。ニューラルネットワークとは言ってますが、学習はしません。答えがないからです(なので、正確にはニューラルネットワークではないかも)。ヘビ1匹に1つのパーセプトロンを作って、子供が生まれるとき、親のパーセプトロンをコピーし、乱数でニューロンの結合荷重を変更(突然変異)しています。つまり、学習ではなく進化で行動を変化させていくライフゲームになります。

入力信号は、ヘビの頭の前方と左右に蛇の体が存在するかの3ビットです。出力信号は、そのまま直進か、左右のどちらかに曲がるかの2ビットです。

ヘビは進化しているか

ヘビライフの初期パラメータを適当につけてやり、どんな進化をしているか見てみました。

CUIベースで作っていて映像を見せるのが難しいのでわかりにくいかもしれませんがご了承をお願いいたします。

段階A 原始時代

直進しかしません。まっすぐ進むので、横切るヘビと衝突して死亡して、わずかに運よく生き残ったヘビが居ます。

まれに同じ場所をぐるぐる回る特殊なヘビも生き残ります。

段階B 沈黙時代

生き残りが、段階Aで死亡したヘビの跡(エサ)を食べて成長し、分裂を繰り返します。このとき、分裂したヘビも直進しかしないので一本の長いヘビのようになるか、前のヘビ(親)がエサを食べて体がひとつ伸びるので後ろのヘビ(子)が親の尻尾に頭をぶつけて死亡します。死亡した子供を食べてまた子供を生み、これを繰り返します。

段階C 風雲時代

段階Bで生まれる新しい命が、誕生した瞬間にまれに左右のどちらかに曲がり、親から離れます。親から離れることに成功したヘビがようやく誕生します。

突然変異を待っているので、この段階にたどり着くまでには時間がかかることが多くなります。

段階D 出産バブル期

段階Cで誕生した親離れヘビは、エサを食べて成長し、子供を次々に誕生させます。この子供も親に遺伝しているのでほとんどが親を離れることができます。

また、この子供は障害物をよける能力も備わっています。親は障害物だったので、同じく他の障害物にも「曲がる」という反応を見せているのでしょう。

そして、ヘビが生き残りやすくなったのでフィールド中がヘビだらけになります。

段階E

一定数以上に増えなくなります。エサが足りないことが原因だと思われます。なので、子供を増やすより、いかにして死なないかがポイントとなっているようです。

このとき、今まで単に「曲がる」だけだったヘビの中に、「Uターン」をするものがちらほら現れます。縦横にぐるぐる回ってフィールド中を移動していくのは少々危険で、Uターンにより今まで何度も通っている安全な場所を行き来することを選択したためと考えています。しかし、何度も通った場所はほとんどエサがないので子供を増やすことに成功するのは難しいようです。

また、今までは曲がる方向が左にしか曲がらない、右にしか曲がらない、といったヘビばかりでしたが、前に障害物があるとき、右に障害物があれば左へ、左に障害物があれば右へ曲がるタイプも居るようです(きちんと確認はしていませんが)。

わりと優秀なヘビたちがこの段階で誕生しているようですね。

感想

今のところ、この辺りで進化はストップしてます。初期パラメータに依存するとは思うのですが、ほとんどがこの段階を踏んでいく進化ですね。多様かと言われればうーんと考えてしまいますが。

しかしながら、進化する人工生命の作成に成功したのでしょう。これまでもいくつか作ってきましたが、前回は GeneLife という細胞単位での人工生命で、セルオートマトンを使用しているので性質はずいぶん違っていて、それに比べて今回は非常にわかりやすいものになったと感じています。

僕は生態学は専門じゃないのですが、この程度なら僕でも簡単に作れるところが「進化の単純さ」であり、またその単純さがもたらす多様さにいつも驚かされます。

追記

今は、このヘビライフに壁を設置して実験しています。ヘビの体のように動くものではなく固定障害物となる壁を置くことで、フィールドの環境条件にムラを作って多様化を図ろうという寸法です。

通りすがり通りすがり 2008/04/01 09:52 めちゃめちゃ面白いですね。是非動画で見たいです!

t___st___s 2008/04/01 22:31 ゲームはすぐに死んでます・・・
私も動画みたいです!

tosiktosik 2008/04/01 22:46 動画を作ってもいいですが、実際に触れて遊べるものを作る予定なのでお待ちください。
描画はDirectXやOpenGL等で作ったほうがよさそうなのですが、ちょっと触った程度なので勉強しながらゆっくり作っていこうと思います。
気長にお待ち願います。

もしくは適当なラッパーを探して使ってみるのもいいかも知れませんね。

t___st___s 2008/04/02 01:17 はい、待ちます。

TT 2008/10/05 23:13 すごいですね。ヘビゲームをC言語で書ける?欲しいけど、

TT 2008/10/05 23:17 すごいですね。実際は、私はヘビゲームを作成したいのですが、難しいと思うんですよ。C言語で作れる?私はLINUXで一回作ってみたけど、無理だった。。。。大変わあああああああ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tosik/20080331/1206953660