【发布时间】:2014-08-22 18:50:16
【问题描述】:
我的模型中有不同颜色的海龟,每一种都按照不同的规则运行。我希望管理一只乌龟(比如红海龟)运动的程序与其他管理不同颜色乌龟运动的程序同时运行。
【问题讨论】:
-
检查我的回答是否有意义?
标签: simulation netlogo agent-based-modeling
我的模型中有不同颜色的海龟,每一种都按照不同的规则运行。我希望管理一只乌龟(比如红海龟)运动的程序与其他管理不同颜色乌龟运动的程序同时运行。
【问题讨论】:
标签: simulation netlogo agent-based-modeling
假设您有两个海龟程序do-red 和do-blue,要在红色和蓝色海龟上运行。然后你就可以ask turtles [do-something] 并以颜色为条件。假设你没有改变颜色:
to do-something ;; turtle proc
if (color = red) [do-red]
if (color = blue) [do-blue]
end
编辑:
这并不能提供真正的并发性,但是说真的,代理行为真正并发的频率是多少?例如,如果do-red 影响其他海龟(红色或蓝色),当turtle 0 和turtle 1 都影响turtle 2 时,“并发”结果是什么,turtle 2 只对个体影响作出反应。再举一个例子,如果你想让每只海龟选择一个未被占用的补丁移动到,并且两个选择相同的补丁,谁赢了?这就是为什么update-state 解决方案无法解决一般并发问题的原因。当然,对于某些问题,它仍然是至关重要的。 (例如,加利福尼亚州。)
【讨论】:
我不认为艾伦的回答是完整的。在这里,他假设 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 的计算输出。
【讨论】:
艾伦的答案是正确的。然而,仅供参考——每只海龟(无论是红色还是蓝色)都会按照上述程序依次行动,而没有一个乌龟会“同时”行动。默认情况下,这在 NetLogo 中不会发生。
但是,您可以使用一种模拟并发的形式。用户指南中有一个关于“ask-concurrent”的部分详细解释了这个内置函数。
【讨论】: