スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

人工生命が生まれました 28日目 人工生命モデル

2009年10月08日 23:15

台風のおかげで豊橋は散々でした。


さて、ニコニコ技術部東海勉強会が迫ってきたわけで、学祭の準備にも追われ、人工生命はちっとも進んでいないのです。

そこで、勉強会に出展するのは過去のロボたちにして、人工生命は「webで見てね!」って形にしようかと思います。


こんなのを置いておこうかと。
CIMG3280.jpg

材料:100均にて
赤い糸
緑の糸
丸画鋲 * 2箱
ウレタン
箱(天然木)



それからCocoaですが・・・
スクリーンショット(2009-10-08 23.01.51)

なんかCocoaTouchの本が転がっていたのでiPhoneアプリを作りながら勉強。
CocoaもいいですがMILOもおいしいです。
スポンサーサイト

人工生命が生まれました 28日目 獲物の好み

2009年09月28日 22:24

個体ごとに異なる好みをもつようにしました。


今まで:一極集中
スクリーンショット(2009-09-27 23.45.49)



スクリーンショット(2009-09-27 23.26.58)

スクリーンショット(2009-09-27 23.26.14)1

あえて遠い獲物を狙う = 合理的でない判断 = 好み、です。
狙いがばらけるので、群れの全員が餌にありつける・・・こともあります。

ただそれだけなんですが。



スクリーンショット(2009-09-28 0.19.42)

今、Obj-C と CoreAnimation で人工生命を再構築しようとしているところです。
あわよくば、ボトムアップ方式に変更を・・・まだ無理かな。

人工生命が生まれました 27日目 Part2うp

2009年09月25日 13:14

Part2をアップロードしました。




内容は、前回の群れの話です。


今までのプログラムでも、同族に接触しない個体は子孫を残せないので、同族を追いかける気質のあるものが生き残りました。
しかし、それでは一カ所に集まって動かなくなる危険があるので、確立で散らしてやっていました。
でもそれだと、繁殖したい個体が相手を見つけられなかったり、いろいろ問題があったのです。
群れのルールを導入したことで、そのへんが解決しました。
群れることで、天敵や餌の発見が早くなります。

ただ、肉食動物の場合は、餌を分け与えることができないので、集団で狩りをするメリットはなさそうです。
他に標的があるのに一匹に集中するのは、その個体が目立つ(個体番号が若い)からです。
好みがない(個体番号によらない)ようにすることもできるのですが、やってみると、標的を特定しないので目移りしてうろうろしてしまいます。
---瞬間ごとに好みを再決定するのではなく、生まれた瞬間に決めておけば、狩りのときにも標的がばらけて、なおかつ目移りしないのではないか・・今思いつきました。やってみます---




それから・・・

徹夜明けのハイテンションで、最大個体数8000に設定、実行(普段は3000)。

スクリーンショット(2009-09-25 3.16.23)


なんか、全体が写っていないような・・・
(注:サムネの元画像は、でっかいです。


ALifeScreenSnapz002.jpg


でん。
全体を写そうとするとこうなるの図。
Spaces を起動して、ウィンドウ4つ並べてようやく全体像が見えてきます。
フィールドの広さは2000 * 2000 。でっかいなー。


スクリーンショット(2009-09-25 3.25.02)


創世直後です。
テーマは森と大洋。
森・・・というか初期配置の計算方法の関係でロの字になっています。
それにしても、本当に"大洋"と呼ぶにふさわしい広さです。


スクリーンショット(2009-09-25 3.25.44)


普段は15くらい出ているfpsも、2fpsまで下がっています。
それでも動いているのは凄い。さすがプロ仕様です。


スクリーンショット(2009-09-25 3.28.41)


左右の森はつながってきましたが、上下の大きい間隙はまだ埋まりません。
しかし開拓者の死によって、ぽつぽつと植物が生え始めています。

『いっせいに発芽した むくろからむくろへと 黒い森は拡がり砂漠は やがて広大な腐海と 化していったのじゃ』風の谷のナウシカ 2 (アニメージュコミックスワイド判)


スクリーンショット(2009-09-25 3.52.59)


上下の森がつながりました。
しかし左の空間は、まだ攻略に時間がかかるようです。

これだけ広くなるとようやく分かりますが、""と大洋"の間に生物の密度の低い層ができて、それが、生物が"大洋"へ漕ぎ出すのを阻んでいるようです。



スクリーンショット(2009-09-25 10.11.59)


時は流れて、75000フレーム付近です。(前の絵は5000付近)
生物はフィールドの全てを攻略しました。
ただし、草食動物の密度が肉食動物を維持できるレベルを割ったので、肉食動物は絶滅しました。

寝落ちしていたのでいつ絶滅したのか分かりませんでした。
リプレイの機能も欲しいですね。
Cocoa、オブジェクトの生成で詰まってますが、勉強中です・・・。

人工生命が生まれました 26日目 群れ

2009年09月24日 01:50

今まで、"群れ"という概念はありましたが、それはただひとつのルール「同族に近づけ」に従っているのみでした。
このルールを持った個体が複数集まると、ある一点に固まって群れを形成し、動かなくなってしまいます。

こんなの群れじゃない!ということで、魚や鳥の群れについて調べてみました。
頑張れ森川くんの遺伝子くんが分かりやすかった。

以下引用。

◆ルール1:近くの鳥たちと
      飛ぶスピードや方向を合わせようとすること
◆ルール2:鳥たちが多くいる方へ向かって飛ぶこと
◆ルール3:近くの鳥や物体に近づきすぎたら、
      ぶつからないように離れること


鳥の群れの三原則と呼ぶことにしましょう。

これを私の人工生命に当てはめると、ルール2のみに従っているので、寄り集まって身動きが取れなくなってしまったのだと考えられます。
全てのルールを書き直すと、こうなります。

人工生命の群れ形成の三原則
第一原則:最も近い同族と移動速度,方向を合わせる
第二原則:同族が近くにいない場合、探して近づく
第三原則:最も近い同族とある程度距離をおく
 
ルール2はどうやら、群れの重心を算出して移動方向を決定すると言っているようですが、現状では無理なので近づくだけにしました。


三原則を実装したところです。
集中して群れを作ってもらいたいので、天敵と餌は排除、そして不死化してもらいました。

スクリーンショット(2009-09-24 1.23.05)

創世、ランダムに配置されていたものが・・・

スクリーンショット(2009-09-24 1.22.44)

群れをつくり始めました。
静止画だと分かりませんが、動いています。
群れが合体したり、分裂したりしながらうろうろしているのは、今までは見られなかった光景です。
また何かの要因で、群れ全体が向きを変えたりします。すごい。

Part2はこれで決まりですね。

人工生命が生まれました 25日目 森と大洋

2009年09月23日 16:17

初期配置に"地形"を作りました。


こんな感じ。
スクリーンショット(2009-09-23 10.24.38)


植物が密集した""と、生物が配置されない"大洋"があります。


スクリーンショット(2009-09-23 10.24.55)


"大洋"には、もちろん何もないので、迷い込むと死にます。


スクリーンショット(2009-09-23 2.29.42)
無茶しやがって・・・


""をつくると生物は密集するので、選択圧が弱くなるとともに肉食動物が大繁殖して滅亡します。
3枚目の絵のことです。
なので、生物の密集度に応じた初期個体数を算出させないといけません。

人工生命が生まれました 24日目 Cocoaに移植中・・・

2009年09月21日 23:40

GUIを充実させたいので、プログラムをCocoaに移しています。

スクリーンショット(2009-09-21 22.29.38)


といってもCocoaが何か知らんのですが・・・。
.nibがあればInterface Builder で楽々GUIが作れそう!という、ただそれだけの理由です。

とりあえず、動きはしました。
しかし、OpenCVでウィンドウを作って描画しているのは変わりません。
Cocoaでウィンドウを作って、その上で人工生命を走らせたいなーと思っています。

Save/Load、それから、万単位の個体を動かすには、GUIが要るんです。
CUIでぽちぽちコマンド打つなんていやです・・・。



せっかく秋葉に来たので、昼間はOpenCVとCocoaの本を探してみました。
合わせて一万円也。
た、高いよう。しばらくGoogle先生の元で修行します・・・。

人工生命が・・・増えてます

2009年09月21日 00:30

新しいのがでてきました。




といっても元祖人工生命の作者さん(なんて呼べばいい?)のではなく・・・

C++のソースが理解できなかったので、XNAで創ったそうです。


私も、最近になってようやく、ソースの全貌が見えてきたところです。
これを新規作成するのはすごいなあ。
していないのは私だけですか、そうですね。



動物はランダムウォークです。
植物に根っこ、動物に大型個体が追加されています。すごく、大きいです・・・。

それから、画面に突如現れる「P」の文字。
肉食動物の死亡時に現れるのですが、これは死んだときの栄養の量が反映されているのかな?
どうやって個体数を一定に保っているのかよく分かりません。

私のところは、元祖作者さんのソースを踏襲して、栄養のリソースが一定に保たれています。
植物は1、草食動物が2、肉食動物が5の栄養を持っていて、他の生物を食べると、その生物が持つ栄養量分増加します。
子どもを産むと、その子どもの分の栄養が差し引かれます。
残りステップ数とは無関係なので、栄養を保持していても飢え死にし、そのときはその栄養分の種を蒔いて、栄養が循環するようになっています。


やっかいなのは、栄養リソースが一定でも、全個体数は変動するということです。
例えば、植物5匹と肉食動物1匹がいたとします。
肉食動物はすぐに飢え死にます。
そのときの栄養の割当の変化が次の式です。

植物(1) * 5匹 + 肉食動物(5) * 1匹 = 栄養リソース(10)

肉食動物が飢え死にすると・・・

植物(1) * 10匹 = 栄養リソース(10)

となります。
個体数の上限は定数なので、上の場合で 個体数上限 = 8 とかに定義してあると、肉食動物が死んだ瞬間、 全個体数が個体数上限を超えて、プログラムがハングアップします。
これで結構詰まりました。
いまでは、初期個体数から栄養リソースを算出して、どんな場合でも個体数の上限以下になるようにしてありますが・・・。

人工生命が生まれました 23日目 これってGAじゃなくね?

2009年09月20日 23:34

ふと思ったのですが・・・

「行動パターンの自由度を広げて、進化の結果が顕著に分かるものにしたいと思っています。」

とか言ったけど、初期値指定してたら意味ないのでは?



そうなのです、動画を観てもらえば分かると思いますが、創世時に配置される個体には全て、初期値として、生存する最低限の行動パターンを入力してあります。

1.餌を探す
2.天敵から逃げる
3.繁殖可能となったら同族を探す

というものです。

これに、普段よりも高確立で突然変異を起こして、初代の遺伝子としています。



今までは、この初期値は自然界の生物で言う「呼吸」や「三大欲求」に当たるもの、不可欠なものだと考えていました。
しかし本当にそうなのか?
実は不可欠ではないのではないか、と思ったのです。




そこで、初代の遺伝子をランダムに決定してみました。

スクリーンショット(2009-09-20 21.47.49)
まあ、こうなるのは分かっていたのです(

スクリーンショット(2009-09-20 21.50.56)
なにせ、遺伝子となる行動パターンは、

はらへ閾値 0~255
同じ方向に進む歩数 0~255
周囲の状況6通り * 自分の状況2通り(はらへ時と通常時)
そのときにとる行動パターン12通り * 速度3段階

はらへ閾値と歩数を除いたとしても432通りあります。
さらに速度を無視しても144通り。

植物:草食動物:肉食動物 の現在での最適な個体数は、1500:300:30 。
餌をとって繁殖できる個体が、子孫を残して繁栄する確立は、かなり低いのです。


あげくに・・・

スクリーンショット(2009-09-20 20.28.40)
左端近くにいる、はらへの肉食動物が分かるでしょうか。
餌もないのに生きている・・・そう、彼は不死者なのです。
久しぶりに見ました。


スクリーンショット(2009-09-20 21.46.31)
比較的うまくいった一枚。
草食動物は繁殖に成功しています。
餌をとる本能を持つ肉食動物も一匹、生き残っています。

このように、せいぜい、繁栄するのは草食動物だけです。
やはり、生存の基礎原則を入力しておかなければいけないのか?

それとも、初期個体数などのパラメータを変更すれば、例えば全個体数を変えずに、種族ごとの個体数の比を変更すれば、生き残りやすいパラメータがあったりするのだろうか???



連休ですがぼちぼちやっていきます。

人工生命が生まれました 22日目 長時間バージョンうp

2009年09月19日 03:22

カオスタイムの長時間バージョンをアップロードしました。




録画範囲を狭くした他に、色彩調整もして視認性を上げて、かなり見やすくなったと思います。
実際には800*800のサイズのエリアで実行しています。
↓このリンク先のサイズが800*800。


スクリーンショット(2009-09-19 3.17.47)

この絵は老化した個体とそうでないものを見分けるために、いままでのはらへ色を老化した個体に割り当てたものです。
青年期/壮年期/老年期 の三期に分けて、老化するほど動作のペナルティが大きくなるように設定しました。
各動作に"老化度"が設定され、大体2回子どもを産むと壮年、さらにもう1回生むと老年期に突入、といった感じです。

そして実行したのですが、上の絵を見れば分かるように、老化(壮年期以上)しているものはほとんどいません。
その傾向は草食動物に顕著で、種族ごとに一定数の個体密度が見込まれているときは、寿命は選択圧の重要なファクターにはならないようです。


人工生命が生まれました 21日目

2009年09月18日 23:54

寿命(あと何フレーム生きるかの変数)を実装たのですが、値の設定で詰まったので、いろいろ調べてみました。

CIMG3058.jpg


生物の寿命には、生理的寿命生態的寿命がある。ふむ。

生理的の方が、好条件で限界まで粘ったときの寿命で、生態的の方は、生態系の中で生きられる寿命だそうです。
動物園にいる場合の寿命と、自然に生きているときの寿命、と考えると分かりやすい。

つまり、昨日実装した"死ぬまでのカウントダウン"は生理的寿命というわけです。
これを設定する場合、寿命が尽きると必ず死んでしまいます(当たり前ですが・・・。
人工生命には、自由にのびのび生きてほしい。
神の手が設定するものには、ある程度の自由度が確保されるか、下位の概念(現実だと物理条件とか)でなければいけないと思っています。
そこで、生理的寿命はやめて、老化してもらうことにしました。
捕食しても栄養を全て消化しきれない、移動によりエネルギーを必要とする、高速移動できないなどの条件を設ければ、自然に生態的寿命が設定されるはずです。


・・・。
 


スクリーンショット(2009-09-18 23.16.18)


ニコニコのコメントを見ていると、やっぱり「壁をなくせ」という意見がありますね。
そんなに邪魔かなあ、壁。
どうすれば撤去できるか、は考えがあるけれど、画像の表示周りはどうやって実現すればいいのかよく分からないので、しばらく壁は残ります。

それから、「見えにくい」というのもあったので、ちょっと表示範囲を狭くした長時間バージョンを準備中です。
エリア全体を狭くしてしまうと、肉食動物の個体数が維持できなくなってしまうので、録画範囲のみを狭くしたものです。



スクリーンショット(2009-09-18 23.14.52)


平行して、遺伝子の大規模アップデートのために個体のパラメータを整理しています。
遺伝子を導入、と言っても今のプログラムだとせいぜい、明らかに不利な要素を持つ個体(餌をとらない、天敵に向かっていく、とか)が淘汰されるだけで、生き残った個体がとりたてて有利な条件を持っているわけではありません。
そこで、行動パターンの自由度を広げて、進化の結果が顕著に分かるものにしたいと思っています。


最新記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。