当每只乌龟在命令中移动时,我需要使用Ask turtles上下文进行补丁更新。因此,本质上,我想让补丁在乌龟环境中做某事。我知道您可以让海龟在该特定补丁程序上访问补丁程序变量,但是我需要的是补丁程序计算所有补丁程序(包括那些不包含在内的补丁程序)的“边际值”(我组成的补丁程序变量)有乌龟。我的目标是每当海龟在“问海龟”命令中移动时,边际值都会更新。因此,在这种情况下,乌龟可以访问其位于补丁变量上的补丁这一事实似乎无济于事。这可能吗?如果是这样,您如何建议我解决?
例如,我现在无法使用,但可能有助于理解我要执行的操作:
ask turtles
[ ask patches
[ calculate-marginal-vaule ]]
to calculate-marginal-vaule
ifelse
count turtles-here > 0
[ set possible-consumption ( quality ) / ( strength-of-competition * count turtles-here ) ]
[ set possible-consumption quality ]
set marginal-value mean [ possible-consumption ] of patches
end
答案 0 :(得分:4)
NetLogo特别禁止使用ask turtles [ ask patches [ <do something> ] ]
之类的代码,因为这种格式的代码几乎总是错误(并且是效率低下的主要根源)。但是,您可以要求满足某些条件的一部分补丁来执行某项操作,如以下代码所示。
to testme
clear-all
create-turtles 10
ask patches [ set pcolor 15 ]
ask turtles
[ ask patches with [ pxcor >= 0 ] [ set pcolor pcolor + 5 ]
]
end
如果您有10只乌龟,那么ask turtles [ ask patches [ ] ]
会使补丁执行10次操作。那真的是你想要的吗?只需执行一些操作,就可以从所有补丁访问信息都是没有问题的。
答案 1 :(得分:2)
如果使用patch-set
报告程序将特殊的patches
代理集转换为“常规”补丁代理集,则可以绕开Jen解释的限制:
ask turtles [
ask patch-set patches [
calculate-marginal-value
]
]
现在这样做是否明智是另一个问题。
我不确定我是否了解您要设法解决的问题足以说明您的情况,但是我可以告诉您您当前要执行的操作在计算上会非常昂贵。如果可以的话,您至少应该尝试考虑解决该问题的另一种方法。