NetLogo-计算相邻代理变量的差值

时间:2019-02-11 18:50:08

标签: netlogo

我想让每个特工向他们的邻居询问乌龟拥有的变量的值,并根据其所拥有的差异进行设置。

我知道如何做到这一点:

if (any? other turtles-here)
  [
    ask neighbors [ ;; ask 8 neighbors / neighbors4 for 4
      ;if (max-one-of turtles [distance myself]) <= 3
      ;[set opinion opinion - .1] ; no change in opinion
      ;if (distancexy point1-pxcor point1-pycor) > 20 and (distancexy point1-pxcor point1-pycor) <= 50
      ;[set point1-location "middle"]
      ;if (distancexy point1-pxcor point1-pycor) > 50
      ;[set point1-location "far"]
    ]

但是我为实现价值交换而为实现它而苦苦挣扎。我该如何实现?

这是我的MWE。

请注意,所涉及的代码部分是伪代码。

breed [ turtles ]
turtles-own [ variable ]

to setup
  clear-all
  create-turtles 100
  [
    set variable random-float 10
  ]
  reset-ticks
end

to communicate
  if (any? other turtles-here)
  [
    ask neighbors [
      pseudo-code: if difference of your variable and my variable is bigger then 3, than do nothing
      if differences less then 3, calculate the higher variable minus 0.1 and the lower variable plus 0.1
      if difference less then 2, calculate the higher variable minus 0.3 and the lower plus 0.3
      if difference less then 1, calculate the arithmetical mean
    ]
  ]

end

to go
  ask turtles [
    rt random 360
    fd 1
    communicate
  ]
  tick
end

1 个答案:

答案 0 :(得分:2)

您的伪代码为解释留下了很大的空间,因此这可能不是您想要的,但是我认为它可以帮助您入门:

to communicate
  ask turtles-on neighbors [
    let both-turtles (turtle-set self myself)
    let difference abs (variable - [ variable ] of myself)
    if difference < 1 [ ask both-turtles [ set variable mean [ variable ] of both-turtles ] ]
    if difference < 2 [ bring-closer both-turtles 0.3 ]
    if difference < 3 [ bring-closer both-turtles 0.1 ]
  ]
end

to bring-closer [ both-turtles delta ]
  ask min-one-of both-turtles [ variable ] [ set variable variable + delta ]
  ask max-one-of both-turtles [ variable ] [ set variable variable - delta ]
end

这里发生了很多事情,但是没有什么过于复杂。我认为您在这里必须了解的主要概念是:selfmyself,将代理集存储在局部变量中的想法以及编写带有参数的过程的想法。您可以在programming guide中了解所有这些信息,并在dictionnary中查找相关的原语。