NetLogo - calculate the difference of a variable o

2019-07-26 10:42发布

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

标签: netlogo
1条回答
▲ chillily
2楼-- · 2019-07-26 10:47

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.

查看更多
登录 后发表回答