【问题标题】:How to run several procedures simultaneously in NetLogo?如何在 NetLogo 中同时运行多个程序?
【发布时间】:2014-08-22 18:50:16
【问题描述】:

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

【问题讨论】:

  • 检查我的回答是否有意义?

标签: simulation netlogo agent-based-modeling


【解决方案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 时,“并发”结果是什么,turtle 2 只对个体影响作出反应。再举一个例子,如果你想让每只海龟选择一个未被占用的补丁移动到,并且两个选择相同的补丁,谁赢了?这就是为什么update-state 解决方案无法解决一般并发问题的原因。当然,对于某些问题,它仍然是至关重要的。 (例如,加利福尼亚州。)

【讨论】:

    【解决方案2】:

    我不认为艾伦的回答是完整的。在这里,他假设 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 的计算输出。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-17
        • 1970-01-01
        相关资源
        最近更新 更多