有一个问题,我想问一下,当我尝试输入此代码时,我收到的错误是
>运算符只能用于两个数字,两个字符串或两个相同类型的代理,但不能用于数字和列表。
我想问的是我如何解决这个问题,错误发生在代码的这一行:
如果pri-lev> [pri-lev] oppoint1和pri-lev> oppoint2的[pri-lev]
我试图把它改成"汽车开启"或"汽车用"但他们都没用。我也尝试在Netlogo字典上找到,但是我发现在特定路径上引导代理的代码没有结果。 我在这里要做的是当代理人来到特定部分时,它将检查是否有任何代理人列为" oppoint1&#34 ;; " oppoint2&#34 ;; " oppoint3&#34 ;; " oppoint4"然后将值调用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
答案 0 :(得分:1)
似乎您收到此错误的原因是您正在将一个(当前汽车)的属性与许多属性(oppoint代理集)进行比较。你的代码现在说的是"如果我的特权超过了该组的特权,那么就做这件事......"问题是[pri-lev] of oppoint1
会返回pri-lev
代理集的所有成员的oppoint1
列表,例如[ 10 12 13 24 ]
,而Netlogo不会自动遍历该列表并将每个项目与询问龟的属性进行比较。
有几种方法可以解决这个问题。例如,您可以确保只比较两只海龟 - 也许确保您在给定时间每个补丁只有一只乌龟。如果您要将一个代理程序与代理程序集进行比较,则可以使用any?
原语来检查您正在查看的组中的任何成员是否满足条件语句。例如,给定此设置:
turtles-own [
pri-lev
]
to setup
ca
reset-ticks
crt 10 [
set pri-lev 1 + random 10
]
end
你可以让one-of
你的海龟检查当前补丁上的not any?
只乌龟是否比问龟高pri-lev
。如果他们都不这样做,那么当前的乌龟将向前移动。否则,它会打印出当前补丁上有另一只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