見出し画像

趣味としての人工生命づくり第4回〜ハチの幼虫集め〜

かなり久しぶりになりますが、NetLogoを使った人工生命づくりの続きです。前回考えていたのは、目隠しをした状態で広い空間にあるボールを一箇所に集めるというミッションでした。

NetLogoのダウンロードや基本的な使い方などは、これまでの内容は↓こちらをみてください。


作ってみよう

前回の内容を元に実装してみましょう。

NetLogoを起動したら初期設定ボタンを作ります。

スクリーンショット 0003-05-27 14.29.24

名前は「setup」とします。入力したらOKを押します。

スクリーンショット 0003-05-27 14.34.26

次にプログラムのスタートボタンを作ります。

名前は「go」とします。このときフォーエバーにチェックを付けてください。自動的に繰り返して実行してくれます。

スクリーンショット 0003-05-27 14.34.52

これだけでは何も起こらないので、プログラムを入れていきましょう。

コードタブを押します。

スクリーンショット 0003-05-27 14.52.55

ここにプログラムを入れていきます。

to setup ;;setupが実行されたとき
 clear-all ;;すべて消す
 crt 100 ;;タートルを100匹つくる
end ;;おわり

to go ;;goが実行されたとき
ask turtles ;;タートルたちに対して[ ]内の命令を送る
 [
   rt random 360 ;;リターンタートルの略 デタラメに角度を変える
   fd 1 ;;一歩進む
 ]
end

「;;」のあとはプログラムの内容についてのコメントで実行はされません。

とりあえずこれでデタラメに動き回るタートルを100匹作ることができました。

動かしてみる

インターフェイスタブを押して元の画面に戻って、「setup」ボタンを押したあと「go」ボタンを押してみます。

三角が動き回りますが早すぎてよくわかりません。

スクリーンショット 0003-05-27 15.18.19

ここを動かしてスピードを調節できます。

三角では味気ないのと、どのように動いているかわかりにくいので軌跡をつけるようにしてみます。

to setup ;;setupが実行されたとき
clear-all ;;すべて消す
crt 100 [
pd ;;ペンダウン 軌跡を描く
set shape "bug" ;;形を虫にする

];;タートルを100匹つくる
end ;;おわり

to go ;;goが実行されたとき
;;タートルに対して[ ]内の命令を送る
ask turtles ;;タートルに対して[ ]内の命令を送る
[
rt random 360 ;;リターンタートルの略 デタラメに角度を変える
fd 1 ;;一歩進む
]
end

作業が進んだらこまめに保存をおすすめします。

簡単なプログラムでカラフルな絵を書くプログラムができました。

いよいよ本番

ここから、前回の設定を加えて行きます。

追加する変数
 ハチ役のタートル
  *幼虫を持っているか?
  *足元に幼虫がいるか?
初期設定ボタンでやること
 *前回のシミュレーションの内容をすべて消す。
 *ハチ役のタートルを作って、画面上にばら撒く。
 *幼虫役のタートルを作って、画面上にばら撒く。
 
実行ボタンでやること
 *でたらめに歩き回る
 *ハチ役
  幼虫をもっておらず、足元に幼虫がいたら幼虫を拾う
  幼虫持っていて、足元に幼虫がいたら幼虫を置く
 *幼虫役
  ハチに拾われたらハチについて行く

この条件をプログラムにしたのがこちらです。コードにコピペしてください。

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上で動かすこともできます。今回作ったものを上げておいたので動かしてみてください。プログラムを変えることもできます。

スクリーンショット 0003-05-27 17.10.10

マガジン 趣味としての人工生命づくり

よかったらフォローお願いします。


記事はすべて無料で公開していますが、購入していただくと記事更新のペースが上がりそうな気がしますのでよろしくお願いいたします。

ここから先は

0字

¥ 100

この記事が参加している募集

この記事が気に入ったらチップで応援してみませんか?