防止NetLogo海龟撞墙

防止NetLogo海龟撞墙,netlogo,Netlogo,我正试图做一些非常简单的事情,但由于某些原因,我就是不能让它工作 我的设置函数创建一个从(-20,20)到(20,20)的正方形墙,并在墙内生成一个大小为3的圆形海龟。正方形的墙只是由蓝色的补丁组成的 现在我有了一个go函数,它告诉海龟旋转-90到90度,然后向前移动0.5步。不允许“走进”墙壁;当它撞到墙上时,它只是选择另一个方向移动。乌龟在真正走进墙之前无法“感知”墙 我使用的代码如下: ask turtle 0 [ let invalid true let turn-degree

我正试图做一些非常简单的事情,但由于某些原因,我就是不能让它工作

我的设置函数创建一个从(-20,20)到(20,20)的正方形墙,并在墙内生成一个大小为3的圆形海龟。正方形的墙只是由蓝色的补丁组成的

现在我有了一个go函数,它告诉海龟旋转-90到90度,然后向前移动0.5步。不允许“走进”墙壁;当它撞到墙上时,它只是选择另一个方向移动。乌龟在真正走进墙之前无法“感知”墙

我使用的代码如下:

ask turtle 0 [
  let invalid true
  let turn-degree (random(180) - 90)
  rt turn-degree

  let next-patch patch-ahead 1 ;; Declare next-patch before moving

  while [invalid] [ ;; While invalid condition
    ask next-patch [
      ;; Neighbors of the next patch are counted, because turtle is size 3
      if ( count neighbors with [pcolor = blue] = 0 ) [
        set invalid false
      ]
    ]

    if (invalid) [
      lt turn-degree ;; Turn the turtle back to the original direction
      set turn-degree (random(180) - 90) ;; Randomize turn degree again
      set next-patch patch-ahead 1 ;; Declare next-patch before moving again
    ]
  ]

  ;; Finally, jump 0.5 steps ahead in the chosen direction
  jump 0.5
]
我很难过地说,上面的代码不起作用,因为海龟仍然设法与蓝色的墙重叠,这是不应该发生的。我怀疑这是因为两个原因:

1) 0.5个步骤正在破坏“提前补片”条件。然而,我尝试了0.5版本的补丁,但没有效果。 2) 随机转向度导致蓝墙与海龟的距离略大于0.5,但我对此没有解决办法


有什么建议吗?

问题是,当乌龟移动到离接触墙壁的面片边缘较近的位置时,乌龟面片的
邻居不属于墙壁的一部分,但乌龟离墙壁的距离仍然小于1.5。试试这个:

ask turtle 0 [
  rt (random 180) - 90

  fd .5
  while [ any? patches in-radius 2 with [ pcolor = blue ] ] [
    bk .5
    rt (random 180) - 90
    fd .5
  ]
]

我并没有完全尝试布赖恩的方法,但我已经为我解决了同样的问题。我最终使用了以下方法:

if (any? patches in-cone 3 60 with [pcolor = blue])

作为我的墙壁检测条件。它运行得很好

我们正在尝试实现什么模型?我正在做一些非常类似的工作,但是使用了连续的力模型。