Как получить доступ к атрибуту внутри агента в 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
,