0

从每个乌龟的角度来看,我必须为乌龟运行一个函数来决定它将分配给哪个乌龟,因为它是“伙伴”。

现在我有下面的代码,但它没有达到效果。

foreach sort other turtles [
      ask ? [
        if Smin < Sim myself ? and self != ? [
        ]
      ]
 ]

在 C/Java 中它会很简单,只是一个简单的 for 循环,然后就是这样。显然我很难理解 NetLogo 的 foreach 功能和“?”的集成。在循环中。我怎样才能做到这一点?

4

1 回答 1

1

从您发布的代码示例中不清楚您到底想要做什么。

一些可能有帮助的事情:

  • 除非您想按特定顺序处理您的海龟,否则通常不需要使用foreach. 只是做ask other turtles [ ... ]可以代替整体foreach sort other turtles [ ask ? [ ... ] ]
  • 鉴于您在一个ask ?块内,self != ?始终为假,因此,and您的if. 永远无法到达内部块内的代码。
  • myself从“外部”询问块中引用代理(例如,在ask x [ ask y [ ... ] ]self将是ymyself将是x)。既不myselfself不受 影响foreach?也不受 影响ask

我的猜测是,也许你只是想要:

ask other turtles [
  if Smin < Sim myself self [
  ]
]

但我不能确定,特别是因为我不知道什么SminSim是什么。如果您发布更多详细信息,也许我们可以进一步帮助您。

最后:NetLogo 代码通常比等效的 C/Java 代码简单得多,但您必须学会接受“NetLogo 方式”。在 Java/C 中思考然后尝试在 NetLogo 中进行翻译通常会导致误入歧途。

于 2013-09-03T16:48:25.257 回答