2008/6/10 23:05
人工生命とオートポイエーシス その1 分類なし
まだできてないけれど、出来たところから載せちゃおう。
1、人工生命プログラム
まず現物のプログラムが動いているところを見たほうが理解しやすいだろう。
アリの捕食と探索を簡易的にシミュレートしたプログラム。
四年くらい前にネットで人気だったもの。
Java AntZ
どういうプログラムなのか解説の邦訳があったので、便宜上一部の文章をいじって載せておく。
1、パンくずがどこにあるかわからないときは、 探索する。
2、他のアリに会ったら、 パンくずのありかを聞いて、 そちらに向かう。
3、他のアリに聞いてみても知らない場合は、 そのアリから離れる (知らないということは、 その近くにパンはないだろうから)。
4、パンくずを見つけたら、 巣 (左上の黒い穴) に持ち帰り、 パンを見つけた場所にもどる (同じ場所にまだパンがある可能性があるから)。
5、パンくずの発見場所からパンがなくなっていたら、 探索を再開し、 その場所にはパンがないことを他のアリに会ったときに伝える。
んでこの文章をもとにして状態遷移図書いたものが以下。これを作るだけで五日くらいかかった。
間違ってる可能性大だけれども、分析として困るかどうかはやってみてから考えるという方向でやる。クリックで拡大可。

厄介なループが多いため、あんまりプログラマーの立場からは見慣れないものになっている。
言い訳がましいのだけれども、この状態遷移図はおそらくプログラム本体の動作とは異なる。俺が書いた状態遷移図の場合、自分以外のアリから聞いた餌場を自分以外のアリに伝える、ということはできないように設計してある。言い方を変えると、餌場を伝える場合は、「自分が発見した餌場のみ」を他のアリに伝えるようにしてある。
<補足>
たぶんプログラマーは、「他のアリから聞いた餌場も、自分で発見した餌場も、自分以外のアリに出あった時にはたんに餌場として伝える」という風に設計してあると思う。こっちのプログラムのほうが、プログラマーの心理として書きやすいもの。
状態遷移図が面倒くさくなるために、簡略化した。
蛇足になるかもしれないけれども、プログラマーが餌場の情報を区別しない場合、「自分が餌場を発見した後に、他のアリから餌場の情報を聞く」という状態が出てくる。
この時、
(1) 自分が発見した餌場
(2) 他のアリから聞いた餌場
のふたつの情報の中から、自分が発見した餌場を選択する、という具合に書いてあると考える。
まーどっちのプログラムでも、見た目上はあんまり差が出ないと思うけれどね。
<補足終わり。蛇足臭くなったな>
2、状態遷移図の説明
まぁ一匹のアリの気分になった上で、迷路を解くように読んでいけば分かると思うんだけれども、簡単に。
四角は状態で、ひし形は条件文。
(1) Random_Search(青)
ふらふらと適当に探す
(2) Find_food(オレンジ)
自分がエサを見つけたかどうかの条件文
(3) Meet_ant(グリーン)
他のアリに会ったかどうかの条件文。Encount_antのほうがよかったかな。
(4) Question(パープル)
他のアリが餌場を知っているかどうかの条件文
(5) Go_to_Listenpoint
アリから聞いた餌場に向かっている状態
(6) Special_Search(青)
他のアリが餌場を発見していないため、そのアリから離れた場所をランダムに探索する状態
(7) Go_to_Home
巣に帰っている状態
(8) Home_to_findpoint
自分が発見した餌場へと向かっている状態
(9) Tell
自分が発見した餌場を、他のアリに伝える状態
オートポイエーシスシステムとして記述しようとすると、こいつの扱いを巡って後々疑問点や問題点が山ほど出てくる。これのおかげで三日潰れた。
3、観察できるもの
人間がこのプログラムの動作を見て、観察できるものは二つしかない。
(1)エサを探しているアリがいる
(2)エサを持ったら巣に帰るアリがいる
アリ同士で通信をしているとか、餌場を伝えているようだという点が観察されているものなのかどうかを見極めるのは難しい。アリにタグをつけて、さらにタグをつけたアリの周辺の動きを考えた上で、どうやら通信が行われているらしい、と推測しているに過ぎない(と思うよ)。
さらによく観察すると、もうちょっと詳しくアリの挙動が見えてくる
(1) −1 ランダムに探索をしているアリ
(1) −2 フィールドからエサ場に一直線に向かってゆくアリ
(1) −3 巣から餌場へと一直線に向かうアリ
(1) −4 ある特定の方向にのみ、ランダムに探索しているアリ
これらは上記の状態遷移図における、状態ひとつひとつに対応づけることができる。
(1) −1 ランダムに探索をしているアリ
Random_Search(青)
(1) −2 フィールドからエサ場に一直線に向かってゆくアリ
Go_to_Listenpoint
(1)−3 巣から餌場へと一直線に向かうアリ
Home_to_findpoint
(1)−4ある特定の方向にのみ、ランダムに探索しているアリ
Special_Search(青)
とまぁ、今日はここまで。
カンのいい人は、このマクラの話だけで、だいたい何をやろうとしているのか理解していると思うけれどね。
1、人工生命プログラム
まず現物のプログラムが動いているところを見たほうが理解しやすいだろう。
アリの捕食と探索を簡易的にシミュレートしたプログラム。
四年くらい前にネットで人気だったもの。
Java AntZ
どういうプログラムなのか解説の邦訳があったので、便宜上一部の文章をいじって載せておく。
1、パンくずがどこにあるかわからないときは、 探索する。
2、他のアリに会ったら、 パンくずのありかを聞いて、 そちらに向かう。
3、他のアリに聞いてみても知らない場合は、 そのアリから離れる (知らないということは、 その近くにパンはないだろうから)。
4、パンくずを見つけたら、 巣 (左上の黒い穴) に持ち帰り、 パンを見つけた場所にもどる (同じ場所にまだパンがある可能性があるから)。
5、パンくずの発見場所からパンがなくなっていたら、 探索を再開し、 その場所にはパンがないことを他のアリに会ったときに伝える。
んでこの文章をもとにして状態遷移図書いたものが以下。これを作るだけで五日くらいかかった。
間違ってる可能性大だけれども、分析として困るかどうかはやってみてから考えるという方向でやる。クリックで拡大可。
厄介なループが多いため、あんまりプログラマーの立場からは見慣れないものになっている。
言い訳がましいのだけれども、この状態遷移図はおそらくプログラム本体の動作とは異なる。俺が書いた状態遷移図の場合、自分以外のアリから聞いた餌場を自分以外のアリに伝える、ということはできないように設計してある。言い方を変えると、餌場を伝える場合は、「自分が発見した餌場のみ」を他のアリに伝えるようにしてある。
<補足>
たぶんプログラマーは、「他のアリから聞いた餌場も、自分で発見した餌場も、自分以外のアリに出あった時にはたんに餌場として伝える」という風に設計してあると思う。こっちのプログラムのほうが、プログラマーの心理として書きやすいもの。
状態遷移図が面倒くさくなるために、簡略化した。
蛇足になるかもしれないけれども、プログラマーが餌場の情報を区別しない場合、「自分が餌場を発見した後に、他のアリから餌場の情報を聞く」という状態が出てくる。
この時、
(1) 自分が発見した餌場
(2) 他のアリから聞いた餌場
のふたつの情報の中から、自分が発見した餌場を選択する、という具合に書いてあると考える。
まーどっちのプログラムでも、見た目上はあんまり差が出ないと思うけれどね。
<補足終わり。蛇足臭くなったな>
2、状態遷移図の説明
まぁ一匹のアリの気分になった上で、迷路を解くように読んでいけば分かると思うんだけれども、簡単に。
四角は状態で、ひし形は条件文。
(1) Random_Search(青)
ふらふらと適当に探す
(2) Find_food(オレンジ)
自分がエサを見つけたかどうかの条件文
(3) Meet_ant(グリーン)
他のアリに会ったかどうかの条件文。Encount_antのほうがよかったかな。
(4) Question(パープル)
他のアリが餌場を知っているかどうかの条件文
(5) Go_to_Listenpoint
アリから聞いた餌場に向かっている状態
(6) Special_Search(青)
他のアリが餌場を発見していないため、そのアリから離れた場所をランダムに探索する状態
(7) Go_to_Home
巣に帰っている状態
(8) Home_to_findpoint
自分が発見した餌場へと向かっている状態
(9) Tell
自分が発見した餌場を、他のアリに伝える状態
オートポイエーシスシステムとして記述しようとすると、こいつの扱いを巡って後々疑問点や問題点が山ほど出てくる。これのおかげで三日潰れた。
3、観察できるもの
人間がこのプログラムの動作を見て、観察できるものは二つしかない。
(1)エサを探しているアリがいる
(2)エサを持ったら巣に帰るアリがいる
アリ同士で通信をしているとか、餌場を伝えているようだという点が観察されているものなのかどうかを見極めるのは難しい。アリにタグをつけて、さらにタグをつけたアリの周辺の動きを考えた上で、どうやら通信が行われているらしい、と推測しているに過ぎない(と思うよ)。
さらによく観察すると、もうちょっと詳しくアリの挙動が見えてくる
(1) −1 ランダムに探索をしているアリ
(1) −2 フィールドからエサ場に一直線に向かってゆくアリ
(1) −3 巣から餌場へと一直線に向かうアリ
(1) −4 ある特定の方向にのみ、ランダムに探索しているアリ
これらは上記の状態遷移図における、状態ひとつひとつに対応づけることができる。
(1) −1 ランダムに探索をしているアリ
Random_Search(青)
(1) −2 フィールドからエサ場に一直線に向かってゆくアリ
Go_to_Listenpoint
(1)−3 巣から餌場へと一直線に向かうアリ
Home_to_findpoint
(1)−4ある特定の方向にのみ、ランダムに探索しているアリ
Special_Search(青)
とまぁ、今日はここまで。
カンのいい人は、このマクラの話だけで、だいたい何をやろうとしているのか理解していると思うけれどね。
