在Netlogo中,我可以要求补丁在海龟上下文中执行某些操作吗?

在Netlogo中,我可以要求补丁在海龟上下文中执行某些操作吗?,netlogo,Netlogo,当每个海龟在命令中移动时,我需要有一个补丁自己的更新,使用ask turtles上下文。所以,本质上,我想让补丁在海龟上下文中做些事情。我知道你可以让海龟在特定的补丁上访问补丁变量,但我需要的是让补丁计算所有补丁的“边际值”(我组成的补丁变量),包括那些没有海龟的补丁。我的目标是,每当海龟在“ask turtles”命令中移动时,边际值都会更新。因此,海龟可以访问他们所在的补丁变量,这一事实在这种情况下似乎没有帮助。这可能吗?如果是,你会建议我怎么做 例如,我现在拥有的东西不起作用,但可能有助于

当每个海龟在命令中移动时,我需要有一个补丁自己的更新,使用ask turtles上下文。所以,本质上,我想让补丁在海龟上下文中做些事情。我知道你可以让海龟在特定的补丁上访问补丁变量,但我需要的是让补丁计算所有补丁的“边际值”(我组成的补丁变量),包括那些没有海龟的补丁。我的目标是,每当海龟在“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

NetLogo特别禁止像
ask turtles[ask patches[]]
这样的代码,因为这种格式的代码几乎总是错误的(并且是效率低下的主要原因)。但是,您可以要求满足某些条件的修补程序子集执行某些操作,如以下代码所示

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次动作。这真的是你想要的吗?访问所有修补程序中的信息没有问题,只需执行一些操作。

NetLogo特别禁止像
ask turtles[ask patches[]]
这样的代码,因为这种格式的代码几乎总是错误的(并且是效率低下的主要原因)。但是,您可以要求满足某些条件的修补程序子集执行某些操作,如以下代码所示

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次动作。这真的是你想要的吗?访问所有补丁的信息没有问题,只需执行一些操作。

如果您使用reporter将特殊的
补丁
代理集转换为“常规”补丁代理集,您可以绕过Jen解释的限制:

ask turtles [
  ask patch-set patches [
    calculate-marginal-value
  ]
]
现在,这样做是否明智是另一个问题


我不确定我是否理解您试图解决的问题,以便能够在您的案例中进行判断,但我可以告诉您,您当前尝试做的事情在计算上非常昂贵。如果可以的话,你至少应该尝试另一种解决问题的方法。

如果你使用reporter将特殊的
修补程序集变成“常规”修补程序集,你可以绕过Jen解释的限制:

ask turtles [
  ask patch-set patches [
    calculate-marginal-value
  ]
]
现在,这样做是否明智是另一个问题


我不确定我是否理解您试图解决的问题,以便能够在您的案例中进行判断,但我可以告诉您,您当前尝试做的事情在计算上非常昂贵。如果可以的话,你至少应该想办法解决这个问题。

是的,这正是我想要的(我想,我需要先试试)。例如,如果我有10只海龟,在一个刻度内,每次不同的海龟移动时,我都需要更新我的边际值计算(补丁计算)。因此,我相信这有助于解决这个问题。如果只有一只海龟移动,那么(我认为)该海龟的新补丁和旧补丁的值只会改变——所有其他补丁的变量值保持不变。所以你只需要更新两个补丁的变量值,然后计算平均值。是的,这正是我想要的(我想,我需要先试试)。例如,如果我有10只海龟,在一个刻度内,每次不同的海龟移动时,我都需要更新我的边际值计算(补丁计算)。因此,我相信这有助于解决这个问题。如果只有一只海龟移动,那么(我认为)该海龟的新补丁和旧补丁的值只会改变——所有其他补丁的变量值保持不变。因此,只需更新两个面片的变量值,然后计算平均值。