NetLogo - вычислить разницу переменной соседних агентов - PullRequest
0 голосов
/ 11 февраля 2019

Я бы хотел, чтобы каждый агент спрашивал своих соседей об их значении переменной, принадлежащей черепахе, и устанавливал их в соответствии с различиями, которые имеют.

Я знаю, как сделать это для расстояний:

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 голосов
/ 12 февраля 2019

Ваш псевдокод оставляет много места для интерпретации, так что это может быть не совсем то, что вы хотите, но я думаю, что это может помочь вам начать:

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

Здесь много чего происходит, но ничего слишком сложного.Я думаю, что основные концепции, которые вы должны будете здесь понять: self и myself, идея сохранения набора агентов в локальной переменной и идея написания процедуры, которая принимает аргументы.Вы можете прочитать обо всем этом в руководстве по программированию и посмотреть соответствующие примитивы в словаре .

...