如何访问 netlogo 代理集中代理内的属性?
how to access an attribute inside an agent in agentset for 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 的值保存在 turtles-own
best-food
= 每个代理保存他们的食物质量-在最好的食物中找到;然后所有代理比较哪个具有最高值,并且这种比较发生在代理集中。
询问我的团队[
设置食品质量发现食品质量<br>
设置最好的食物食品质量发现
在此处设置位置补丁
设置本地最佳食物位置]
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])
但它并没有将价值与他所有的队友进行比较,而只是与这个特定的代理人进行比较,这是错误的...
提前致谢。
这是您问题的简化版本的解决方案。我忽略了所有不同类型的食物变量,只是为每只乌龟分配了一个名为食物的变量的随机值。每只乌龟也是红队或蓝队(分别称为 R 和 B)的成员。他们找到团队中食物价值最高的成员,用那只乌龟创造一个 link 并面对那只乌龟。
这里重要的原语是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
.
这是问题所在:
我需要将 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 的值保存在 turtles-own
best-food
= 每个代理保存他们的食物质量-在最好的食物中找到;然后所有代理比较哪个具有最高值,并且这种比较发生在代理集中。
询问我的团队[
设置食品质量发现食品质量<br>
设置最好的食物食品质量发现
在此处设置位置补丁
设置本地最佳食物位置]
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])
但它并没有将价值与他所有的队友进行比较,而只是与这个特定的代理人进行比较,这是错误的...
提前致谢。
这是您问题的简化版本的解决方案。我忽略了所有不同类型的食物变量,只是为每只乌龟分配了一个名为食物的变量的随机值。每只乌龟也是红队或蓝队(分别称为 R 和 B)的成员。他们找到团队中食物价值最高的成员,用那只乌龟创造一个 link 并面对那只乌龟。
这里重要的原语是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
.