NetLogo - calculate the difference of a variable of neighbouring agents

时光毁灭记忆、已成空白 提交于 2019-12-13 17:56:02

问题


I would like to have each agents ask their neighbours of their value of a turtle-owned variable and set them according to the differences the have.

I know how to do this for distances:

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"]
    ]

however I struggle with implementing it for an exchange of values. How do I achieve this?

This is my MWE.

Note that the code part in question is in pseudo-code.

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:


Your pseudo-code leaves a lot of room for interpretation, so this might not be exactly what you want, but I think it can get you started:

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

There is a lot going on here, but nothing overly complicated. I think the main concepts you will have to understand here are: self and myself, the idea of storing an agentset in a local variable, and the idea of writing a procedure that takes arguments. You can read about all of this in the programming guide and look up the relevant primitives in the dictionnary.



来源:https://stackoverflow.com/questions/54637192/netlogo-calculate-the-difference-of-a-variable-of-neighbouring-agents

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!