【问题标题】:Netlogo programming: How to code a "repulsive" motion?Netlogo 编程:如何编写“令人反感”的动作?
【发布时间】:2012-12-03 19:57:01
【问题描述】:

我在思考如何在 netlogo 中编写“令人反感”的动作时已经筋疲力尽了。 就是这样:我们正在尝试建立一个牧羊犬放牧一群羊的模型。当狗靠近羊时(即距离小于羊的“反应距离”时)羊会从狗身上跑开。我不知道如何做到这一点“当它们的距离小于响应距离时,羊会从狗身边跑开”。 有人可以帮我吗? 非常感谢!!

【问题讨论】:

  • 您在搞清楚什么问题?你能计算出牧羊犬的距离吗?你能找到想要的羊的方向吗?
  • @TimN 我无法弄清楚狗和最近的绵羊之间的关系以及它们的恐慌距离。当狗靠近最近的羊并且距离下降到恐慌距离以下时,羊会和狗走相反的方向。如何编码?假设我们有“panic_distance”等术语。

标签: math computer-science netlogo


【解决方案1】:

这是一个完整的解决方案。解释如下。

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

您的 cmets 中有两个关键语句,它们非常直接地转换为 NetLogo 代码:

当狗靠近最近的绵羊并且距离低于恐慌距离时

就如何接近它而言,“最近的绵羊”可能有点牵强。您可能想要做的是询问每只羊当前与狗的距离是否小于恐慌距离。 NetLogo 有 distance 原语就是为了这个!在代码中,它变成:

ask sheep [if distance the-dog &lt; panic-distance [...]]

您只需将... 替换为在这种情况下您想让羊做的事情,这将在您的下一个语句中描述:

羊会和狗走相反的路

我猜你的意思可能是远离狗,因为“与狗相反的方式”实际上可能是朝向狗。 p>

NetLogo 没有有一个face-away-from 原语,但它有一个face 原语,这将使羊转向狗。你可以用它,然后把它转回来让它跑掉:

face the-dog
right 180

然后就可以了。这就是它的核心。其余的你可以随意玩。

【讨论】:

    【解决方案2】:

    打开 NetLogo 并查看 模型库Shepherds 演示(在 文件 菜单中找到它)。

    您也可以找到它online here

    【讨论】:

    • 谢谢你的信息。我不认为我们在谈论同一件事。
    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2011-10-23
    • 2021-06-29
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多