1

netlogo で「反発」モーションをコーディングする方法を考えて、燃料が不足しています。ここにあります: 私たちは牧羊犬が羊の群れを群れにするモデルを設定しようとしています. 犬が羊の近くにいるとき(つまり、羊の「反応距離」よりも距離が短いとき)、羊は犬から逃げます。「犬との距離が応答距離よりも小さい場合、羊は犬から逃げる」この方法がわかりません。誰かがそれを手伝ってくれますか?どうもありがとう!!

4

2 に答える 2

4

これが完全な解決策です。説明が続きます。

breed [sheep a-sheep]
breed [dogs dog]

globals [
  panic-distance
  the-dog
]

to setup
  clear-all
  set panic-distance 10
  set-default-shape sheep "sheep"
  create-sheep 50 [
    setxy random-xcor random-ycor
  ]
  create-dogs 1 [
    set the-dog self
  ]
  reset-ticks
end

to go
  ask the-dog [
    rt random 30
    lt random 30
    fd 1
  ]
  ask sheep [
    if distance the-dog < panic-distance [
      face the-dog
      right 180
      fd 1
    ]
  ]
  tick
end

コメントには 2 つの重要なステートメントがあり、NetLogo コードに非常に簡単に変換できます。

犬が最も近い羊に近づき、距離がパニック距離を下回ったとき

「最も近い羊」は、アプローチ方法に関しては、おそらく少し赤いニシンです。おそらくやりたいことは、犬までの現在の距離がパニック距離よりも小さいかどうかを各羊に尋ねることです. NetLogo には、そのdistanceためのプリミティブがあります! コードでは、次のようになります。

ask sheep [if distance the-dog < panic-distance [...]]

...その場合に羊にしたいことでを置き換える必要があるだけです。これは、次のステートメントで説明されています。

羊は犬とは逆に行く

「犬がするのとは反対の方法」は実際には犬に向かっている可能性があるため、おそらく犬から離れるという意味だったと思います。

NetLogoにはプリミティブはありませんが、羊が犬の方を向くプリミティブがあります。あなたはそれを使用することができ、それから完全に元に戻して逃げることができます:face-away-fromface

face the-dog
right 180

そして、そこに行きます。それが核心です。残りは好きなだけ遊べます。

于 2012-12-04T05:14:31.607 に答える
0

NetLogo を開き、 Model LibraryのShepherdsデモを見てみましょう ( [ファイル] メニューにあります)。

また、こちらからオンラインで見つけることもできます。

于 2012-12-03T20:12:40.273 に答える