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-poissonone-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