Netlogo:如果变量值相同,则让代理到 link
Netlogo: getting agents to link if variables values are the same
我正在尝试让两种代理(xagents 和 yagents)检查当它们在 xagents 的半径之一内移动时变量的值是否相同。那么他们应该 link.
当我尝试下面的代码时,它们 link 但是当我检查 linked 代理的值时,变量值不相等;他们不应该 linking。问题过程在代码的末尾。知道这是为什么吗?
当我可以越过这部分时,我希望代理更改另一个变量的值,但前提是它们具有与 VAR1 相同的值(因此 link)。
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
这里有一些问题可能会给您带来麻烦。第一:
set var1 random-normal 5 1
如果您需要匹配,两个代理共享来自 random-normal
的值的可能性极低 - 它 returns 一个浮点值:
observer> show random-normal 5 1
observer: 4.051232264359846
为您的 var1
选择另一种 select 值(例如 random-poisson
或 one-of [ 1 2 3 4 5 ]
),否则您将无法匹配。您的原始代码给出 link 的唯一原因是因为 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
...
所以在这里,你已经使用了 select 你想要形成 link 的 xagents
的条件,但是相同的条件不适用于 yagents
边。因此,您正在 xagents
与任何 yagents-here
形成 link。要解决此问题,只需确保 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
我正在尝试让两种代理(xagents 和 yagents)检查当它们在 xagents 的半径之一内移动时变量的值是否相同。那么他们应该 link.
当我尝试下面的代码时,它们 link 但是当我检查 linked 代理的值时,变量值不相等;他们不应该 linking。问题过程在代码的末尾。知道这是为什么吗?
当我可以越过这部分时,我希望代理更改另一个变量的值,但前提是它们具有与 VAR1 相同的值(因此 link)。
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
这里有一些问题可能会给您带来麻烦。第一:
set var1 random-normal 5 1
如果您需要匹配,两个代理共享来自 random-normal
的值的可能性极低 - 它 returns 一个浮点值:
observer> show random-normal 5 1
observer: 4.051232264359846
为您的 var1
选择另一种 select 值(例如 random-poisson
或 one-of [ 1 2 3 4 5 ]
),否则您将无法匹配。您的原始代码给出 link 的唯一原因是因为 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
...
所以在这里,你已经使用了 select 你想要形成 link 的 xagents
的条件,但是相同的条件不适用于 yagents
边。因此,您正在 xagents
与任何 yagents-here
形成 link。要解决此问题,只需确保 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