Netlogo:如果变量值相同,则让代理链接

时间:2017-05-22 22:12:30

标签: netlogo

我正在尝试获取两个代理品种(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

1 个答案:

答案 0 :(得分:1)

这里有一些可能导致问题的问题。第一:

set var1 random-normal 5 1

如果您需要进行匹配,两个代理将从random-normal共享值的可能性非常低 - 它会返回一个浮点值:

observer> show random-normal 5 1
observer: 4.051232264359846

选择其他方式为var1选择值(例如random-poissonone-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