将代理定向到特定路径(Netlogo)

将代理定向到特定路径(Netlogo),netlogo,Netlogo,我想问的一个问题是,当我尝试键入此代码时,我得到的错误是 >运算符只能用于两个数字、两个字符串或相同类型的两个代理,但不能用于数字和列表 我想问的是,我如何解决这个问题,错误发生在代码的这一行: 如果oppoint1的pri lev大于[pri lev],oppoint2的pri lev大于[pri lev] 我试着把它改成“开着车”或“开着车”,但它们都没用。我还尝试在Netlogo字典中查找,但在将代理定向到特定路径的代码中没有找到任何结果。 我在这里试图做的是,当一个代理来到一个特定的部分

我想问的一个问题是,当我尝试键入此代码时,我得到的错误是

>运算符只能用于两个数字、两个字符串或相同类型的两个代理,但不能用于数字和列表

我想问的是,我如何解决这个问题,错误发生在代码的这一行:

如果oppoint1的pri lev大于[pri lev],oppoint2的pri lev大于[pri lev]

我试着把它改成“开着车”或“开着车”,但它们都没用。我还尝试在Netlogo字典中查找,但在将代理定向到特定路径的代码中没有找到任何结果。 我在这里试图做的是,当一个代理来到一个特定的部分,它将检查是否有任何代理列为“oppoint1”;“反对意见2”;“反对意见3”;“oppoint4”,然后将值call pri lev与其他值进行比较,以设置其继续移动或停止并等待其他值的决定。 以下是我的代码的一部分:

ask cars
[
  let oppoint1 (cars-at (xcor + 2) (ycor + 2))
  let oppoint2 (cars-at (xcor - 1) (ycor + 1))
  let oppoint3 (cars-at (xcor - 2) (ycor + 1))
  let oppoint4 (cars-at (xcor - 3) (ycor + 1))
  ifelse oppoint1 != nobody and oppoint2 != nobody
  [
    if pri-lev > [pri-lev] of oppoint1 and pri-lev > [pri-lev] of oppoint2
      [
        set pri-lev 4
        speed-up
      ]
  ]
  [
    if oppoint2 = nobody and oppoint3 = nobody and oppoint4 = nobody
    [
      set speed 1
      fd speed
      if turning = "Rtrue"
      [
        set heading heading + 90
        speed-up
      ]
    ] 
  ]
]

诚恳地说,Minh

您出现此错误的原因似乎是您将一个(当前车辆)的属性与多个(oppoint代理集)的属性进行比较。您的代码现在显示类似“如果我的特权大于该组的特权,请执行此操作…”的问题是oppoint1的
[pri lev]返回
oppoint1
代理集的所有成员的
pri lev
,如
[10 12 13 24]
,Netlogo不会自动迭代该列表,并将每个项目与该列表的属性进行比较

有几种方法可以解决这个问题。例如,你可以确保你只比较过两只海龟——也许是通过确保你在给定的时间内每个补丁只有一只海龟。如果要将一个代理与一个代理集进行潜在比较,可以使用
any?
原语检查所查看的组中的任何成员是否满足条件语句。例如,给定此设置:

turtles-own [
  pri-lev
]

to setup
  ca
  reset-ticks
  crt 10 [
    set pri-lev 1 + random 10
  ]
end
你可以让
你的海龟中的一只检查当前补丁中的
海龟的
优先级是否高于提问海龟。如果它们都不这样做,当前的海龟将向前移动。否则,它将打印出当前补丁上有另一只海龟具有更高的
pri-lev

to compare-with

  ask one-of turtles [
    let other-turtles other turtles-here 
    ifelse not any? other-turtles with [ pri-lev > [pri-lev] of myself ] [
      fd 1
    ]
    [ 
      print ("A turtle here has a higher pri-lev than I do." )
    ]
  ]
  tick

end

亲爱的Luke,感谢您的评论,但是,我不想在全球范围内执行此操作,因为当它在全球范围内检查时,总有一些代理的优先级高于当前代理的优先级,我希望代理检查的只是特定区域中的代理。例如:代理当前处于(6,10);我希望他检查其他3个位置(5,11);(7,12)和(5,9),但不检查,例如,(9,11)或(11,12),依此类推。到底有没有具体规定?或者我应该从这些位置组成一个组,然后在一个组中的成员之间进行检查?在我上面的示例中,海龟只检查他们当前所在的补丁(
turtles在此
是这样做的原语)-而不是所有补丁/全局。在一个新文件中尝试它,这是所有需要的代码。我想说的一点是,你不能像以前那样将一个代理与多个代理进行比较,因为你要将一个代理的变量与一个代理集的变量列表进行比较。您所要做的就是更改我上面示例中的
let
语句,以特别适合您的模型(例如,代替我定义的
其他海龟
代理集,替换为您的“oppoint”代理集)。