2

我的模型中有不同颜色的海龟,每一种都按照不同的规则运行。我希望管理一只海龟(比如红海龟)运动的程序与其他管理不同颜色海龟运动的程序同时运行。

4

3 回答 3

1

假设您有两个海龟程序do-reddo-blue并且您想在红色和蓝色海龟上运行。然后你可以ask turtles [do-something]对颜色进行调整。假设您没有更改颜色:

to do-something  ;; turtle proc
  if (color = red) [do-red]
  if (color = blue) [do-blue]
end

编辑:

这并不能提供真正的并发性,但说真的,代理行为真正并发的频率是多少?例如,如果影响其他海龟(红色或蓝色),当和两者都影响时, do-red“并发”结果是什么,谁只对个体影响作出反应。再举一个例子,如果你想让每只海龟都选择一个未被占用的补丁移动到,并且两个选择相同的补丁,谁赢了?这就是为什么解决方案不能解决并发的一般问题。当然,它对于一些问题仍然是至关重要的。(例如,加利福尼亚州。)turtle 0turtle 1turtle 2update-state

于 2014-07-03T20:13:32.263 回答
1

艾伦的答案是正确的。然而,仅供参考——每只乌龟(无论是红色还是蓝色)都会按照上述程序依次行动,而没有一个乌龟会“同时”行动。默认情况下,这在 NetLogo 中不会发生。

但是,您可以使用一种模拟并发的形式。用户指南中有一个关于“ask-concurrent”的部分详细解释了这个内置函数。

于 2014-07-04T17:09:20.577 回答
0

我不认为艾伦的回答是完整的。在这里,他假设 do-red 不会影响蓝海龟。要模拟并发,您需要存储状态并稍后更新。所有计算都将在给定时间步中对存储的状态执行。

使用艾伦的代码示例:

to do-something  ;; turtle proc
  if (color = red) [do-red]
  if (color = blue) [do-blue]
  update-turtles-state
end

注意: do-blue 在给定的时间步长上不应该以任何方式使用 do-red 的计算输出。

于 2015-02-18T19:46:29.577 回答