我正在尝试获取两个代理品种(xagents和yagents)来检查变量的值是否在xagents的半径范围内移动时是否相同。然后他们应该联系。
当我尝试下面的代码时,它们会链接但是当我检查链接代理的值时,变量值不相等;他们不应该联系。问题过程在代码的末尾。任何想法为什么会这样?
当我可以移动这部分时,我希望代理更改另一个变量的值,但前提是它们具有与VAR1相同的值(因此是链接)。
breed [xagents xagent]
breed [yagents yagent]
turtles-own [var1]
to setup
clear-all
resize-world -20 20 -20 20
setup-patches
setup-turtles
reset-ticks
end
to
setup-patches
ask patches [set pcolor gray ]
end
to
setup-turtles
set-default-shape xagents "circle 3"
create-xagents 10
[
set color white
set size 2
set var1 random-normal 5 1
setxy random-xcor random-ycor
]
set-default-shape yagents "circle 3"
create-yagents 20
[
set color blue
set size 2
set var1 random-normal 5 1
setxy random-xcor random-ycor
]
end
to go
move-xagents
move-yagents
ask xagents [communicate]
tick
end
to move-xagents
ask xagents [
rt random 50
lt random 50
forward 1
]
end
to move-yagents
ask yagents [
rt random 50
lt random 50
forward 1
]
end
;;THIS IS THE PROBLEM
to communicate
ask xagents in-radius 1 with [var1 = [var1] of myself]
[create-links-with other yagents-here
[
set color white
set thickness 0.1
]
]
end
答案 0 :(得分:1)
这里有一些可能导致问题的问题。第一:
set var1 random-normal 5 1
如果您需要进行匹配,两个代理将从random-normal
共享值的可能性非常低 - 它会返回一个浮点值:
observer> show random-normal 5 1
observer: 4.051232264359846
选择其他方式为var1
选择值(例如random-poisson
或one-of [ 1 2 3 4 5 ]
),否则您将无法获得匹配。原始代码提供链接的唯一原因是因为other xagents
代码块中未包含to communicate
(见下文)。
ask xagents in-radius 1 with [var1 = [var1] of myself]
在这里你应该使用other xagents
,否则你将包括询问代理,而不仅仅是其他代理in-radius 1
。
[create-links-with other yagents-here
...
所以在这里,您已经使用条件来选择要形成链接的xagents
,但同样的条件不适用于yagents
方。因此,您正在xagents
与任何yagents-here
建立链接。要解决此问题,请确保yagents
还必须包含您之后的var1
,例如:
to communicate
ask other xagents in-radius 3 with [var1 = [var1] of myself]
[create-links-with yagents in-radius 3 with [var1 = 2 ]
[
set color white
set thickness 0.1
]
]
end