如何在NetLogo中同时运行多个程序?

时间:2014-07-02 05:14:32

标签: simulation netlogo agent-based-modeling

我的模型中有不同颜色的海龟,每个海龟都按照不同的规则运作。我想要控制一只乌龟(比如红乌龟)运动的程序与控制不同颜色乌龟运动的其他程序同时运行。

3 个答案:

答案 0 :(得分: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 1都影响turtle 2时,“并发”结果是什么,update-state仅响应个体影响。再举一个例子,如果你想让每只乌龟选择一个未被占用的补丁移动到,并且两个选择相同的补丁,谁赢了?这就是{{1}}解决方案无法解决并发性的一般问题的原因。当然,它仍然是一些问题的关键。 (例如,CA。)

答案 1 :(得分:1)

艾伦的答案是正确的答案。然而,仅仅是FYI - 每只乌龟(无论是红色还是蓝色)将依次采用上述程序行动,而没有任何行动同时采取行动。"默认情况下,这在NetLogo中不会发生。

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

答案 2 :(得分:0)

我不认为艾伦的答案是完整的。在这里,他假设做红色并不会影响蓝龟。 要模拟并发,您需要存储状态并在以后更新它。所有计算都将在给定的时间步长内对存储的状态执行。

使用Alan代码的示例:

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

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