趣味としての人工生命づくり第4回〜ハチの幼虫集め〜
かなり久しぶりになりますが、NetLogoを使った人工生命づくりの続きです。前回考えていたのは、目隠しをした状態で広い空間にあるボールを一箇所に集めるというミッションでした。
NetLogoのダウンロードや基本的な使い方などは、これまでの内容は↓こちらをみてください。
作ってみよう
前回の内容を元に実装してみましょう。
NetLogoを起動したら初期設定ボタンを作ります。
名前は「setup」とします。入力したらOKを押します。
次にプログラムのスタートボタンを作ります。
名前は「go」とします。このときフォーエバーにチェックを付けてください。自動的に繰り返して実行してくれます。
これだけでは何も起こらないので、プログラムを入れていきましょう。
コードタブを押します。
ここにプログラムを入れていきます。
to setup ;;setupが実行されたとき
clear-all ;;すべて消す
crt 100 ;;タートルを100匹つくる
end ;;おわり
to go ;;goが実行されたとき
ask turtles ;;タートルたちに対して[ ]内の命令を送る
[
rt random 360 ;;リターンタートルの略 デタラメに角度を変える
fd 1 ;;一歩進む
]
end
「;;」のあとはプログラムの内容についてのコメントで実行はされません。
とりあえずこれでデタラメに動き回るタートルを100匹作ることができました。
動かしてみる
インターフェイスタブを押して元の画面に戻って、「setup」ボタンを押したあと「go」ボタンを押してみます。
三角が動き回りますが早すぎてよくわかりません。
ここを動かしてスピードを調節できます。
三角では味気ないのと、どのように動いているかわかりにくいので軌跡をつけるようにしてみます。
作業が進んだらこまめに保存をおすすめします。
簡単なプログラムでカラフルな絵を書くプログラムができました。
いよいよ本番
ここから、前回の設定を加えて行きます。
この条件をプログラムにしたのがこちらです。コードにコピペしてください。
breed [bees bee] ;;ハチとして種族beeと複数形のbeesを定義する。
breed [eggs egg] ;;幼虫として種族eggと複数形のeggsを定義する。
breed [eggs-up egg-up] ;;持ち上げられた幼虫として種族eggs-upと複数形のegg-upを定義する。
bees-own ;;bees(ハチ)の変数としてmotteru?を定義する。
[
motteru?
]
to setup
clear-all
create-bees 10 ;;[]の初期状態でハチを20匹つくる
[
set shape "bug" ;;形を虫に
set xcor random-xcor ;;x座標をデタラメに
set ycor random-ycor ;;y座標をデタラメに
set motteru? false ;;motteru?を偽に
]
create-eggs 100 ;;[]の初期状態で幼虫を300匹つくる
[
set shape "dot" ;;形を点に
set color yellow ;;色を黄色に
set xcor random-xcor ;;x座標をデタラメに
set ycor random-ycor ;;y座標をデタラメに
]
end
to go
ask bees
[
rt random 360
fd 1
if any? eggs-here and not motteru? ;;自分の場所に幼虫があって自分が幼虫を持っていない時
[
create-links-with eggs-here [ tie ] ;;幼虫と自分をリンクで結びつけて一緒に動かす
ask eggs-here ;;自分の場所にいる幼虫に対して
[
set breed eggs-up ;;持ち上げられた幼虫に種族を変える
set shape "dot" ;;形を点にする
set color red ;;色を赤にする
]
set motteru? true ;;motteru?を真にする
rt random 360
fd 1
]
if any? eggs-on neighbors and motteru? ;;ハチの隣に幼虫があって幼虫を持っている時
[
set motteru? false ;;motteru?を偽に
ask my-links ;;幼虫とのリンクに対して
[
ask end2 ;;繋がっている幼虫に対して
[
set breed eggs ;;種族をeggsにする
set shape "dot" ;;形を点にする
set color yellow ;;色を黄色にする
]
die ;;幼虫とのリンクを消す
]
rt random 360
fd 20
]
]
end
できたかな?
なんとなく黄色い点が集まっている感じになっています。画面は上下、左右が繋がっているので集団が分割されたように見えますが実質は繋がっています。
初めにゆっくりと動かしているときにビュンビュン飛んでいる虫がありますが、これは幼虫をおいたあと、すぐとなりの幼虫を持っていかないように飛ばしています。
ハチと幼虫の比率を変えるとうまく集まらないこともあるので少し改良が必要だと思います。
一つ一つの命令については筑波大学の倉橋研究室で翻訳されたマニュアルがあるので、調べて見てください。
このプログラムはTermites(シロアリ)というプログラムとしても知られていて、NetLogoのサンプルにも入っています。
ファイルメニューからモデルライブラリーを選んでTermitesと検索してみてください。
やはり、こちらのほうがちゃんとできていますが、試行錯誤でもなんとかなるものです。
NetLogoはweb上で動かすこともできます。今回作ったものを上げておいたので動かしてみてください。プログラムを変えることもできます。
マガジン 趣味としての人工生命づくり
よかったらフォローお願いします。
記事はすべて無料で公開していますが、購入していただくと記事更新のペースが上がりそうな気がしますのでよろしくお願いいたします。
ここから先は
¥ 100
この記事が参加している募集
この記事が気に入ったらチップで応援してみませんか?