告诉代理商不要在Netlogo模型中过马路

问题描述 投票:0回答:1

我正在尝试添加不允许代理人越过道路的条件。道路补丁设置为红色。我似乎无法弄清楚如何使这种情况起作用。如果道路在前方,我最终希望代理商回头。到目前为止,这是我的净徽标代码。

to go
  ask turtles [
 move
  ]
    tick
  if ticks >= 60 [stop]
end

to move
  ifelse random-float 1 < q
  [
    ifelse random-float 1 < w
    [uphill veg-suitability]
    [uphill pelev]
  ]
  [
    move-to one-of neighbors
    ldd-normal
  ]
 ifelse [pcolor] of patch-ahead 1 = red
[lt random-float 180]
[fd 1]

end

 to ldd-normal
  let ldd-distance (ldd-scale)
  fd ldd-distance

end
netlogo
1个回答
0
投票

我认为您的移动程序的逻辑有些混乱。首先,您有一个随机的机会转到具有较高关注变量值的色块(带有uphill原语),或者,如果随机抽取失败,它将移至随机邻居。如果您不希望其移动到红色补丁上,则需要测试所选补丁是否为红色,但是您只需要移动它就无需检查。

移动了乌龟后,然后检查patch-ahead的颜色。您在这里的问题是patch-ahead取决于乌龟所面对的方向,而这与它一直在移动的方向无关。您要么使它转弯(尽管可能转弯不够),要么继续前进。因此它实际上从未移开。

我无法给您实际的答案,因为我不知道您的逻辑应该是什么。但是您可以看一下类似的结构:

move-to one-of neighbors with [pcolor != red]

或者,如果红色补丁足够多,有可能没有任何非红色邻居(如果您尝试移动到一个红色邻居,则可能会导致错误,可以使用:

let okay-patches neighbors with [pcolor != red]
if any? okay-patches [move-to one-of okay-patches]

[另一种选择是,您仅打算face,而不是移至代码的第一部分中的补丁,然后测试它是否面对红色补丁,然后转为红色补丁。

© www.soinside.com 2019 - 2024. All rights reserved.