如何让海龟在 netlogo 中从世界边界反弹
Posted
技术标签:
【中文标题】如何让海龟在 netlogo 中从世界边界反弹【英文标题】:How do I make turtles bounce off the world boundary in netlogo 【发布时间】:2016-05-18 21:26:13 【问题描述】:我在 Netlogo 中有一个盒子绑定的世界,我的海龟正在按照我想要的方式移动,但有些会卡在墙上,这会吸引其他人(我使用植绒模型作为主干),直到所有海龟都被卡住面对墙壁并停止移动。我尝试在 Go 中包含一个 wall_jump,但是一旦有太多的群友靠墙它就没有帮助,所以我放了另一个块让群友从墙上反弹,但它似乎没有任何效果。如果您想重现整个问题,请打开植绒模型并关闭世界边界。
其他人是如何解决这个问题的?
to wall_jump
ifelse any? flockmates
[
if ycor >= max-pycor * 0.95 [set heading (random-normal 180 2)]
if xcor >= max-pxcor * 0.95 [set heading (random-normal 270 2)]
if xcor <= min-pxcor * 0.95 [set heading (random-normal 90 2)]
if ycor <= min-pycor * 0.95 [set heading (random-normal 0 2)]
]
[if ycor >= max-pycor * 0.95 [set heading (random-normal 180 2)]
if xcor >= max-pxcor * 0.95 [set heading (random-normal 270 2)]
if xcor <= min-pxcor * 0.95 [set heading (random-normal 90 2)]
if ycor <= min-pycor * 0.95 [set heading (random-normal 0 2)]
]
end
【问题讨论】:
你的 if 和你的 else 语句有什么区别? flockmates 是我所依据的“植绒”模型的继承,它归海龟所有。基本上,他们将附近的海龟识别为群友,然后根据群友的平均航向确定它们的新航向。我用那个 ifelse 声明的目的是基本上说你附近是否有任何羊群伙伴,以同样的方式决定一个新的方向,因为你被困在墙上。还是不行 【参考方案1】:这个问题在 Random Balls 模型中得到解决(在 NetLogo 模型库中): http://ccl.northwestern.edu/netlogo/models/RandomBalls
虽然与您的问题没有直接关系,但您可能会发现查看 Heroes and Cowards 模型也很有趣,该模型会产生墙聚类(在 Cowards 模式下): http://ccl.northwestern.edu/netlogo/models/HeroesandCowards
【讨论】:
感谢您向我介绍艾伦的那些模型。我调整了我的模型以适应他们的解决方案的要求,即简单地放置'if abs pxcor = max-pxcor [ set heading (- heading)] if abs pycor = max-pycor [ set heading (180 - heading) ]'这有效,但前提是您的原点位于中心(我的原点位于角落)。我最终告诉我的海龟无论如何都要通过一个辅助功能在左边缘产卵,如果有人需要,我可以分享它以上是关于如何让海龟在 netlogo 中从世界边界反弹的主要内容,如果未能解决你的问题,请参考以下文章