我的模型中有不同颜色的海龟,每个海龟都按照不同的规则运作。我想要控制一只乌龟(比如红乌龟)运动的程序与控制不同颜色乌龟运动的其他程序同时运行。
答案 0 :(得分:1)
假设您有两个要在红色和蓝色海龟上运行的海龟程序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
时,“并发”结果是什么,update-state
仅响应个体影响。再举一个例子,如果你想让每只乌龟选择一个未被占用的补丁移动到,并且两个选择相同的补丁,谁赢了?这就是{{1}}解决方案无法解决并发性的一般问题的原因。当然,它仍然是一些问题的关键。 (例如,CA。)
答案 1 :(得分:1)
但是,您可以使用一种模拟并发形式。有一部分用户指南在" 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的计算输出。