如何让海龟在 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 中从世界边界反弹的主要内容,如果未能解决你的问题,请参考以下文章

在 NetLogo 中计算特定补丁的海龟航向

NetLogo - 如何显示海龟的当前坐标

如何让一只乌龟能够在 Netlogo 中保存其他乌龟 ID?

我的世界海龟为啥不生蛋反而在那一动不动?

如何设置场景物理主体的边界以正确反弹?

NETLOGO:如果一块地有两只乌龟,我该如何让乌龟死掉?