在Netlogo中,我可以要求补丁在乌龟环境中做什么吗?

时间:2018-10-12 14:33:09

标签: netlogo

当每只乌龟在命令中移动时,我需要使用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

2 个答案:

答案 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
  ]
]

现在这样做是否明智是另一个问题。

我不确定我是否了解您要设法解决的问题足以说明您的情况,但是我可以告诉您您当前要执行的操作在计算上会非常昂贵。如果可以的话,您至少应该尝试考虑解决该问题的另一种方法。