Как получить доступ к атрибуту внутри агента в agentset для netlogo?

Вот проблема:

Мне нужно сравнить значение внутри turtles-own, который best-foodс другими агентами в том же наборе агентов, но я не знаю, как заставить агента спрашивать своих товарищей по команде об этом значении, и мне нужно, чтобы они постоянно сравнивали друг с другом ценность лучшей еды в течение всего моделирования. (чтобы они могли получить наибольшую ценность пищи)

если это в Java, это что-то вроде этого =

if agent1.best-food > agent2.best-food then agent1 go to agent2

но в netlogo я не могу сделать это так. Кто-нибудь может мне помочь?

вот код:

food_quality = пищевой агент найден в мире

food_quality_found = ценность food_quality хранится в собственных черепахах

best-food = каждый агент сохраняет свои качества, найденные в лучших продуктах питания; затем все агенты сравнивают, какой из них имеет наибольшее значение, и это сравнение происходит в наборе агентов.

ask myteamset [ set food-quality-found food-quality
set best-food food-quality-found set location patch-here set loca-best-food location]

ask myteamset[

            if best-food != 0 ; I need them to compare constantly so "!=0" need to be substitute with his teammates' best-food, but I don't know how to ask other teammates in same agentset about this value
            [

if (best-food < food-quality-found) ;to make sure best-food always have the highest value.[set best-food food-quality-found set location patch-here set loca-best-food location]

          if best-food > best-food ;

логически это неверно, потому что все они сравнивают свою собственную лучшую еду, но я понятия не имею, как спросить у других черепах их лучшую еду и сравнить ее с моей., [

              set g random 100
              if (g >= probability_teammates_to_go) 
             [ move-to loca-best-food]]  

if (patch-here is loca-best-food) ;how to write if with patches? [set i random 100 if (i >= probability_to_ignore) ;after agent arrives at best-food, they still need to choose whether or not they want to stay there. [ fd 0.25 ]

я пытался let best-food-turtle (turtles with-max [food-quality-found])но это не сравнивает значение со всеми его товарищами по команде, а только с этим конкретным агентом, что неправильно...

Заранее спасибо.

1 ответ

Вот решение упрощенной версии вашей проблемы. Я проигнорировал все различные типы пищевых переменных и просто присвоил каждой черепахе случайное значение для переменной, называемой пищей. Каждая черепаха также является членом красной или синей команды (называемой R и B соответственно). Они находят члена своей команды с самой высокой ценностью еды, создают связь с этой черепахой и сталкиваются с этой черепахой.

Важный примитив здесь max-one-of, который идентифицирует агента в указанном наборе агентов (в данном случае, всех черепах в одной команде), который имеет наибольшее значение указанной переменной (в данном случае, пищи).

turtles-own
[ food
  team
]

to testme
  clear-all
  create-turtles 10
  [ setxy random-xcor random-ycor
    set food random 100
    set team one-of [ "B" "R" ]
    ifelse team = "B"
    [ set color blue ]
    [ set color red]
  ]
  ask turtles
  [ let best-teammate max-one-of turtles with [team = [team] of myself] [food]
    if self != best-teammate
    [ create-link-to best-teammate
      face best-teammate
    ]
  ]
end

Тот, который вы определили черепаху с наибольшим значением, вы можете спросить ask эта черепаха для своего патча (используя [patch-here] of ...). Если вы просто хотите значение, то вы хотите max скорее, чем max-one-of,

Другие вопросы по тегам