- 1 名前:名無しさん@3周年 [04/10/01 11:57:01]
- Tierraっぽい人工生命的な進化プログラムを作ろうと思っています。
Tierra:www.his.atr.jp/~ray/tierra/index.html 原理を簡単に説明すると、まず仮想世界(プログラム本体)をつくり、その中に仮想生物を入れます。 仮想生物にはそれぞれコードが書かれていて、そのコードに従って自己複製をしていきます。 仮想生物の特徴は以下の通りです。 (1)自己複製をする 一定時間経つと仮想生物は自分のコピーを作ります。 (2)死ぬ 一定時間経つと仮想生物は死滅します。 (3)突然変異をする 自己複製時にある一定の確率(1/1000程度)で、仮想生物の命令 コードをランダムに変化させて、突然変異をシュミレートします。 Tierraと同じ原理ですが、Tierraは昔のもので、MS-DOSプロンプトでしか動作しません。 しかも他のツール郡もあったようですが、現在はどこからもDLする事が出来ません。 とりあえず開発するための言語はDelphiかVBにしようかと思っています。 実を言うとCが出来ません…。 自分が造ろうと思っている人工生命は、Tierraの原理のほかに 「食物を食べ、そのエネルギーで自己複製をする」 というものを追加しようと思っています。 仮想世界の中には「草木」が存在し、例え食べつくされても生えてきます。 皆さんの反応や、一緒に開発してくれるという方、お願いします。 Tierraの解説ページ: www.h5.dion.ne.jp/~terun/doc/jinkou.html svbcpaf.exblog.jp/ (ブログですが、Tierraについて解説されています。)
- 2 名前:仮想生物1 [04/10/01 12:07:49]
- 1です。
とりあえずどの様なものにすれば上手く進化をしてくれるかを色々と考えました。 ・仮想生物には「セル」が設けられる 「セル」と呼ばれるいわゆる「部屋」を作ります。 空いているセルがあれば、自己複製によって誕生した新たな仮想生物がそこに配置されます。 仮想生物は、草木が生えているセルに移動し、草木を食べ、自己複製を行います。 ・仮想生物は何処に食料があるかを計算してから移動し、食料を食べる 仮想生物はそれに見合った食料を探し、何処に移動するかを考えてから食料を食べます。 突然変異によってこのコードが変わった時、面白い事が起きるんじゃないかなぁと思ってます。 ・自己複製の時、何処に複製するかを探す 自己複製の際、当然、空セルが無ければいけません。 仮想生物は空セルを計算してから自己複製を行います。 こうやって書いてきましたが、、未だTierraがどうなっているのかよくわかっていません。 どなたか、Cの出来る方、、Tierraのソースを読んで下さい。
- 3 名前:& ◆lnO3ISv0v6 [04/10/01 22:58:54]
- Tierraにあった機能を少々書かせていただきます。
Tierraでは仮想生物が突然変異を起こしたとき、「遺伝子バンク」と呼ばれる 一種倉庫の様なものの中に、コードが日時と一緒に記録されました。 今気付いたのですが、EXCELでプログラムを作ってもいいんじゃないかなぁとも思い始めてます。
- 4 名前:仮想生物1 [04/10/01 22:59:41]
- すみません。何故か知りませんが文字化けしてます。
上の書き込みは仮想生物1です。
- 5 名前:名無しさん@3周年 [04/10/02 00:35:42]
- item.furima.rakuten.co.jp/item/29361245/
- 6 名前:名無しさん@3周年 [04/10/02 00:37:02]
- .NETでコンテストやってなかったっけ?
- 7 名前:名無しさん@3周年 mailto:sage [04/10/03 01:55:45]
- ティエラーにとって必見のTierra入門、消えてたけどWebArchiveで何とか拾えた。
ttp://web.archive.org/web/20001202002200/www.hip.atr.co.jp/~kim/TIERRA/tierra.html
- 8 名前:& ◆lnO3ISv0v6 [04/10/04 00:13:18]
- >>6
テラリウムですね。あれは進化はせず、ただ単に繁殖するだけのようです。 申し訳ないですが、私の目指しているものでは無いようです。 >>7 情報ありがとうございます。 早速ハードディスクに保存して、一通り目を通しました。 ん〜、、、これはやはりCとアセンブリも勉強しないとダメみたいですね…。 色々Tierraについてググったのですが、なんせ10年程前で、尚且つかなりマニアックな分野 なので非常に資料が少ないですね。 その中で出てきたもので、シミュレート板の方々も興味深く思われるのではないかと 思った資料がこちらです↓ www.is.titech.ac.jp/~kojima/lab/thesis/2001/yamashita.pdf Tierra 的手法を用いた植物系の進化のシミュレーションとその解析 実際に植物が環境に適応しようとしながら進化を遂げているところが凄いです。 ちなみにパッとしか読んでないのですが、非常に難しいです。
- 9 名前:仮想生物1 [04/10/04 00:16:08]
- 何故文字化けしてしまうのか・・・。
上は私の書き込みです。 それと細かい訂正ですが シミュレート板→シミュレーション板 でした。
- 10 名前:名無しさん@3周年 [04/10/04 16:53:29]
- 植物を食うなら、突然変異した相手が、その変異元を食うようにしたら
面白くなる予感。
- 11 名前:名無しさん@3周年 [04/10/04 22:20:33]
- あなたのやる気次第で、月収60万!!
* 完全無料!入会金や年会費は一切無料! * バナー広告や、メール広告をクリックして報酬ゲット! * クリック単価は0.01〜11.11円までと多様な設定! * 提携サイトのご利用で報酬ゲット! * ダウンラインの構築で、5段階(20%-5%-5%-1%-1%)の紹介ボーナス支給! * 上級会員にアップグレードするとレベルに応じて エグゼクティブクラス 6段階(20%-10%-5%-3%-2%-1%) ファーストクラス 7段階(20%-10%-5%-5%-3%-2%-1%) プレジデントクラス 9段階(20%-10%-5%-5%-5%-3%-3%-2%-2%) と紹介報酬が大幅にアップ! * 報酬のお支払いは3,000円から!最短で翌日振込です! イーバンク銀行、PayPal、郵貯、東京三菱銀行、三井住友銀行でお受け取り! 登録は、こちらから↓ clicklounge.com/index.php?r=6921
- 12 名前:& ◆lnO3ISv0v6 [04/10/06 00:17:01]
- >>10
ご意見ありがとうございます。 その考えは非常に面白いなぁと思い、少しその様な形で色々と考えてみました。 しかしその仕組みは、一見効率良く進化をしていくプログラムのように見えて、穴があります。 祖先種Aから進化をした突然変異種Bが、Aのことを食べながら自己複製をしていく時、 BがAを食べつくした段階で突然変異が起きていない場合、Bは食料の無いまま自己複製が出来ずに 「生物の絶滅」が起こってしまいます。 絶滅してしまったら元も子も無くなってしまうので、この案は少し問題ありです。 でもこの案を少し取り入れて、突然変異をする時に「食のスイッチ」を0か1かにして、 突然変異が起こったときに、スイッチが0(オフ)だったら「草食」という事で食料は草にし、 スイッチが1(オン)だった場合、同種でない仮想生物を食べる、いわば「肉食」にする、と言う考えも ありでは無いかと考えています。 でもこれも若干問題ありだなぁ・・・。
- 13 名前:名無しさん@3周年 [04/10/19 03:02:27]
- >>12さん
食べつくさないようにしたら良いかと思います。
- 14 名前:名無しさん@3周年 mailto:sage [04/10/23 18:32:21]
- なんかヒューリスティックだな。
>>10とか>>12の案はTierra自身が作って行くんじゃないの?
- 15 名前:名無しさん@3周年 mailto:sage [04/10/25 15:48:24]
- Tierraの本質は遺伝子シミュっすよ。
そこのところを理解しないとそこらに転がってるパラメータシミュになってしまう予感。
- 16 名前:名無しさん@3周年 mailto:sage [04/10/26 16:19:27]
- ttp://web.archive.org/web/20000611145021/www.hip.atr.co.jp/~kim/TIERRA/Ances/ancestor.html
まずはこれを理解してTierraを再現してみようぜ。 ここで述べられている寄生種というのは43番目のコードビットが反転したために コピープロシジャーコードが終了コードになるためということは想像が付く。 そして、このプログラムではcallで呼び出されるコピールーチンが 「生物」内にある必要はないために、後続の他生物のコピールーチンが 利用されているな。
- 17 名前:名無しさん@3周年 mailto:sage [04/10/26 19:56:02]
- Tierraに興味深いところは、「生物」の存在をリスト化していることかと。
「生物」が活動を実行するためには命令ポインタが与えられていなければならない。 つまり、「生物」として機能しうるコードが偶然そこに存在したとしても、 命令ポインタがなければ活動が行えないということ。 人間の死体が動かないのと同様であり、仮想デジタル世界にも 言わば「魂」というものが必要であることに他ならない。 母セルが娘セルを生んで初めて命令ポインタを分け与えるあたりからも そのことは窺い知れる。
- 18 名前:名無しさん@3周年 mailto:sage [04/10/27 19:58:31]
- つまり俺らの体はソースで,心は命令ポインタであり,プロセスであると。
Tierra,娘セルへの書き込み権限がなくなるあたりもおもしろいね。 unixのシェルスクリプトとかで生物実装できないかなぁ。アセンブリより高レベルだけど。 プロセスが魂,スクリプトが本体で,mvで移動,cpで増殖,killでsibouとか。 lsが視覚で,psは生物探知? ディレクトリのパーミッションが縄張りみたいな。chownで継承みたいな。 パーミッション755で別プロセスに実行させたりとか。 でchownトラップで乗っ取られたり。
- 19 名前:名無しさん@3周年 [04/11/01 16:58:41]
- >植物を食うなら、突然変異した相手が、その変異元を食うようにしたら
これってそのうち、生態系ができあがるんじゃないかな。 ようわからんなあ。
- 20 名前:名無しさん@3周年 mailto:sage [04/11/01 19:46:37]
- 充分狭い空間に捕食者と被捕食者を設置しておいたら被捕食者の数が減ってそのうち全滅するだろうね。
逆に、捕食者がその一生の間に被捕食者を見つけられないくらい広大な空間が存在すれば、 一部地域の捕食者が繁殖して、周囲の被捕食者を全て食い尽くしても、別の地域の被捕食者が残って 繁殖するから生態系として成り立つ可能性がある。
- 21 名前:名無しさん@3周年 mailto:sage [04/11/02 18:02:01]
- 草食性のティエラ、か。
60000byteのスープの海(このスレでは荒れ地か)のうち、 生物の存在しないアドレスの数値を増やして行く形で 植物の繁茂状態を再現出来るかな? ティエラでは5bitで1byteだから、0から31のエネルギーの蓄積が可能になる。 通常の移動や複製では生物同士が重ならないよう働くが、 ここのチェックコードが突然変異で抜け落ちた時、 無生物・生物の区別なしにそのアドレスに移動(つまり捕食) するようになるわな。 そうなると、食物としての生物も最大31のエネルギーを蓄積した コードの集合体となる。 とりあえずメモ書きまでに。。。
- 22 名前:名無しさん@3周年 [04/11/03 18:41:51]
- Tierra上で"動物的"仮想生物が発生したらおもしろいですね。
そもそもancestorも植物的です。 ALife関係の文献を調べればTierra以後(avidaなど)の研究が 見付かると思いますよ。
- 23 名前:名無しさん@3周年 [04/11/03 20:49:27]
- v
- 24 名前:名無しさん@3周年 [04/11/05 18:08:28]
- Tierra入門ってよく読むと所々間違いがあるんで気をつけないかんな。
- 25 名前:名無しさん@3周年 mailto:sage [04/11/10 17:43:55]
- 今VBでTierra入門を読む限りで(ver6.02は複雑なので)わかる部分を作っています。
現在、突然変異と死に神のところで手こずっています。 それ以前に自分のプログラムテクニックが不安です。
- 26 名前:名無しさん@3周年 mailto:sage [04/11/10 19:22:23]
- 60000byteのスープ一杯に祖先種が満たされるところまでは実装できた?
突然変異やらリーパキューやらはそれができてからのことだからね。 突然変異は例えばスープのbit反転なら乱数で1/2000の確率で起こして、 これまた乱数で300000bitのどこかを反転させてやればいいし、 コードコピー部分の突然変異なら、iabのルーティンを一定確率で 2回ループさせたり、素通りさせたりすれば、そこのコードが重複したり 抜け落ちたりするでしょ。 死神の方はちょっと厄介なんだよなぁ……各コードの実行時に そのコードが上手く実行できなかった場合(例えばjmp先が見つからないとか)に そいつのリーパランクを下げる方法とか、死神発動時に 確保していた自分自身や、コピー中の娘のアドレスの開放とかよくわからん。
- 27 名前:名無しさん@3周年 mailto:sage [04/11/10 19:28:15]
- それと突然変異によって生まれた娘の挙動がおかしい場合に不都合が出てくることがある。
例えば、コピープロシジャー内のdec_cが抜け落ちると 母セルの頭のコードを永遠にコピーしつづけ生命が生まれる。 親が確保した娘セルのアドレスを越えて、そいつが死ぬまで ダラダラとコピーし続けてしまうことになるが、これはどう処理すればいいのかねぇ。
- 28 名前:Reaperman ◆pjhxgti2Zk mailto:sage [04/11/11 19:11:49]
- >>26
母セルとコピー中な娘セルの開始アドレスを何らかの形で記録して、 死神がリーパー・キューからそれを引っ張り出して、開始アドレスからサイズ分まで解放。 なんか見当違いな事言ってるかもしれません。ごめんなさい。 >>27 こちらでは、メモリ読み込み権は全範囲ですが、 書き込み権は自分の領域、mal確保した領域以外書き込めないよう制限しています。 しかしそれでは、「食う」という動作は行われません。
- 29 名前:名無しさん@3周年 mailto:sage [04/11/11 22:16:49]
- >>28
それだと突然変異のルーチンであるコードを2回コピーした場合、 最後のコードがコピーされず、サイズが1長い生命の誕生が 許されないことになりませんか? ABCDE→ABCCD(Eがコピーできずエラー)
- 30 名前:Reaperman ◆pjhxgti2Zk mailto:sage [04/11/12 19:37:36]
- >>29
あ、本当だ!いけませんね。
- 31 名前:Reaperman ◆pjhxgti2Zk mailto:sage [04/11/12 19:40:47]
- >>29
本当だ。全く突然変異の意味がない。 情けないなあ
- 32 名前:名無しさん@3周年 mailto:sage [04/11/12 21:23:43]
- 難しいな・・・とりあえず母セルの長さ分の領域を確保して
コピー中に他生物に奪われないようにしておいて、 娘セルがその長さを超えるときはその超えたセルに 別の生物が存在しなければ延長して領域を 確保させていくのかな? で、別の生物にぶつかったらエラーを返すようにするとか。 そのあたり、元のティエラはどうしてるんですかね。
- 33 名前:Reaperman ◆pjhxgti2Zk mailto:sage [04/11/13 14:13:02]
- >>32
Tierra入門(ほかに読むものがないなあ)の メモリの割り当て ― 細胞性 より抜粋 >Tierraではデジタル生物の基本単位を「細胞(セル)」としている。 >各セルは1個の CPUを持ち(現在のバージョンでは複数のCPUを持つことで多細胞性を実現させる事もできる)、 >またスープ内のあるブロックを確保していて、そこに各セルのゲノム(Tierra 言語のシーケンス)が保存されている。 >このブロックへはそれを所有しているセルは書き込みおよび読み込み動作を行う事ができる。 >しかしそのブロックの所有者でないセルは読み込みだけしか行う事ができない。 >これは各セルが「半透膜」性の細胞膜で守られている事を意味する。 これは、誰もいない領域(所有者がいない領域)なら何を書き込んでもよい、ということでしょうか。 ということは、延長しつつ確保する形になりますが、 違う種類の生物が同時に書き込みだして、ぶつかってエラーということにもなりそうです。
- 34 名前:仮想生物1 [04/11/20 00:08:17]
- なかなかこのスレに顔を出すことが出来ずにいましたが、1は健在です。
自分のいない間に、大分意見が出ているようですね。 ざっと読んでみたところ、何だか難しいですね。。 まずTierraの原理とアセンブリを完全に理解しないとダメですねこれは…。 とりあえず、このスレを埋もれさせたくありません。 結構盛り上がってきているので、更なるご意見をお待ちしております。
- 35 名前:& ◆lnO3ISv0v6 [04/11/20 00:12:51]
- >>25
おお!よくみたらもう制作に取り掛かっている方も! 原理が完全に決まるまで制作は難しいでしょうけれど、頑張ってください。 自分も早く勉強しなくては。。
- 36 名前:Reaperman ◆pjhxgti2Zk mailto:sage [04/11/20 12:17:51]
- jmpやcall、adrbなどの相補的テンプレートの捜索範囲はどのくらいになっているのですか?
こちらではとりあえず300程度としています。
- 37 名前:名無しさん@3周年 mailto:sage [04/11/21 00:52:37]
- こちらは200にしてみてますが、どのくらいがいいものですかね。
あるいは「生物の長さの3倍」のようにすると長い寄生種の方が 短い寄生種よりも繁殖能力が高いことが期待されるかもしれません。 突然変異の処理が非常にやっかいなので、突然変異はなしに設定し、 祖先種と寄生種を1つづつ放り込んで育成してやると 最初は祖先種が増え、その後寄生種が隙間を埋めるように 繁殖する様が見て取れました。 そういえば、malによって娘セルの確保を行いますが、 この確保位置は母セルの後方に探索するのか、ランダムな アドレスに置けるかどうかの判定を行うって置くのか、 どちらなんでしょうね。 生物の繁殖という観点からすれば母セルの近くに生まれるのが自然ですが こちらではランダムで置くようにしています。
|

|