有没有办法在NetLogo中设置不可逾越的障碍?

有没有办法在NetLogo中设置不可逾越的障碍?,netlogo,agent-based-modeling,Netlogo,Agent Based Modeling,我试图编写一个路径查找行为代码,其中代理将在环境中找到一个最佳补丁,并在围栏周围导航以到达所述补丁。我已经创建了一个补丁变量“f”,它被设置为1以表示围栏,0表示任何其他补丁 我想让这些栅栏无法通行(也就是说,我想让它们成为特工人员移动时不会使用的补丁),但特工人员似乎仍然能够在某种程度上使用它们,在某些情况下甚至能够完全穿过它们 代理人的相关决策代码如下: {let moveset patches in-radius 30 with [f = 0 and n > 0] let tar

我试图编写一个路径查找行为代码,其中代理将在环境中找到一个最佳补丁,并在围栏周围导航以到达所述补丁。我已经创建了一个补丁变量“f”,它被设置为1以表示围栏,0表示任何其他补丁

我想让这些栅栏无法通行(也就是说,我想让它们成为特工人员移动时不会使用的补丁),但特工人员似乎仍然能够在某种程度上使用它们,在某些情况下甚至能够完全穿过它们

代理人的相关决策代码如下:

{let moveset patches in-radius 30 with [f = 0 and n > 0]

let target max-one-of moveset [n]

 ifelse patch-here != target 
 [ 
  set heading towards target

  ]
 []

let chance random-float 10
if chance >= 5 [let pick -145]
if chance < 5 [let pick 145] 

ask patches in-radius 1 
[if f = 1 
[ask myself

  [set heading towards min-one-of patches [distance myself] + 180 - random 10 + random 10 ]

]
]

fd 1}
{让moveset面片以[f=0且n>0]的半径在30范围内移动
让目标最大移动集[n]中的一个
ifelse补丁在这里!=目标
[ 
朝着目标前进
]
[]
让机会随机浮动10
如果机会>=5[让我们选择-145]
如果机会小于5[让我们选择145]
询问半径1中的补丁
[如果f=1
[问我自己
[设置朝向最小一个补丁的方向[距离我自己]+180-随机10+随机10]
]
]
fd1}
为清楚起见,“n”只是一个变量,表示我希望我的代理找到并尝试使用的补丁


是否有人知道NetLogo中有一种简单的方法,可以在决策过程中将某些补丁排除在活动区域之外(即硬屏障)?

如果您还没有,请查看模型库中的“展望”示例-这是一个使用补丁颜色控制海龟移动的简单演示。下面是一些基于该模型的代码。使用此设置:

breed [ seekers seeker ]
breed [ goals goal ]
patches-own [ steps-from-goal ]

to setup
  ca
  ask patches [ 
    set steps-from-goal 999
  ]
  ask patches with [ pxcor mod 10 = 0 ] [
    set pcolor red
  ]
  ask patches with [ pycor mod 10 = 0 ] [
    set pcolor black
  ]
  ask one-of patches with [ pcolor = black ] [
    sprout-seekers 1 [
      set color blue
      pd
    ]
  ]
  ask one-of patches with [ pcolor = black ] [
    sprout-goals 1 [
      set color white
      set shape "circle"
    ]
  ] 
  reset-ticks
end
你可以让
搜索者
品种在黑色方块周围游荡,直到它们与
目标
海龟共享一个补丁:

to random-wander 
  ask seekers [
    if any? goals-here [
      stop
    ]
    rt random 61 - 30
    ifelse can-move? 1 and [pcolor] of patch-ahead 1 = black [ 
      fd 1
    ] [
      rt one-of [ 90 -90 ]
    ]
  ]
  tick
end
然而,请注意,海龟仍然可以使用这种方法“跳跃”补丁的角,因为它们能够以任何角度评估
补丁前方1
——因此,海龟前方一个空间的补丁可能会评估另一个补丁的角部。海龟不应该真正降落在禁地上,但你可能会注意到它们的路径可以穿过那些被阻挡的斑块

编辑:

请参阅将海龟“捕获”在方形笼子中的简化代码:

to setup
  ca
  crt 1 [ 
    setxy 5 5
    set heading 180
    repeat 4 [
      repeat 10 [
        ask patch-here [ set pcolor red ]
        fd 1 
      ]
      rt 90
    ]
    die
  ]

  crt 1 [ pd ]
  reset-ticks
end

to go
  ask turtles [
    rt random 61 - 30
    ifelse can-move? 1 and [pcolor] of patch-ahead 1 = black [
      fd 1
    ] [
      rt one-of [ 90 -90 ]
    ]
  ]
  tick
end
1100点后:

13300点后:


我很感激,卢克。这应该会很有帮助。我希望找到一种方法来解决他们“跳过”补丁角落的能力,因为我需要确保他们根本无法跨越障碍。我将在一个新问题中提出这个问题。我已经就上述问题提出了一个新问题:@SC7-别担心!我要指出的是,跳角并不能解释你第二个问题中的问题——这是一个单独的问题,可能与你的动作程序有关(我真的不明白——你可能想再看一看其中的逻辑/意图)。如果您运行我的示例中的代码,您永远不会看到海龟实际越过屏障,如图所示,显示出不希望看到的行为。@SC7我对我的答案进行了编辑,这可能更好地说明我的意思。这看起来确实很有帮助!谢谢分享。希望通过比较和研究这一点可以帮助我在自己的代码方法中找到错误。