首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netlogo编程:如何编写“排斥性”动作?

Netlogo编程:如何编写“排斥性”动作?
EN

Stack Overflow用户
提问于 2012-12-04 03:57:01
回答 2查看 333关注 0票数 1

我正在想如何在netlogo中编写一个“令人厌恶”的动作,我的燃料正在耗尽。这就是:我们正在尝试建立一个模型,在这个模型中,牧羊犬放羊。当狗靠近羊时(即距离小于羊的“反应距离”时),羊就会从狗那里跑开。我不知道该怎么做“当羊的距离小于反应距离时,羊就会跑开狗”。有人能帮我吗?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2012-12-04 13:14:32

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

代码语言:javascript
复制
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

注释中有两个关键语句,它们可以非常直接地转换为NetLogo代码:

当狗靠近最近的绵羊时,距离降到了惊恐距离以下

“最近的羊”可能在如何接近它方面有点转移视线。您可能想要做的是询问每只羊到狗的当前距离是否小于恐慌距离。NetLogo就是为此提供了distance原语!在代码中,它变成了:

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

在这种情况下,您只需将...替换为您希望sheep执行的操作,这将在您的下一条语句中描述:

羊会和狗走相反的路。

我猜,你的意思可能是远离狗,因为“狗所做的相反的方式”实际上可能是向狗靠近。

NetLogo 没有 face-away-from原语,但它有一个face原语,它会让羊转向狗。你可以使用它,然后把它倒回去,这样它就可以跑开了:

代码语言:javascript
复制
face the-dog
right 180

这就对了。这就是它的核心。你可以随心所欲地玩剩下的。

票数 4
EN

Stack Overflow用户

发布于 2012-12-04 04:12:40

打开NetLogo并查看Model Library的Shepherds演示(在File菜单中找到它)。

您也可以在online here中找到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13690666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档