在我的模型中有不同颜色的乌龟,每个乌龟都在不同的规则下运行。我希望控制一只海龟(比方说红海龟)运动的程序与控制不同颜色海龟运动的其他程序同时运行。
发布于 2014-07-04 04:13:32
假设您有两个海龟过程do-red和do-blue,您希望在红海龟和蓝海龟上运行它们。然后你可以只对颜色进行ask turtles [do-something]和condition。假设您不更改颜色:
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解决方案不能解决并发的一般问题。当然,对于一些问题,它仍然是至关重要的。(例如,加利福尼亚州)
发布于 2014-07-05 01:09:21
艾伦的答案是正确的。然而,仅供参考-每只海龟(无论是红色的还是蓝色的)都将按照上述程序依次行动,而不是“同时”行动。默认情况下,这在NetLogo中是不会发生的。
但是,您可以使用一种模拟并发的形式。在用户指南的"ask-concurrent“中有一节详细解释了这个内置函数。
发布于 2015-02-19 03:46:30
我不认为Alan的答案是完整的。在这里,他假设do-red对蓝海龟没有影响。要模拟并发,您需要存储状态并在以后更新它。所有计算都将在给定时间步长内对存储的状态执行。
使用Alan的代码的示例:
to do-something ;; turtle proc
if (color = red) [do-red]
if (color = blue) [do-blue]
update-turtles-state
end注意:对于给定的时间步, do-blue不应该以任何方式使用do-red的计算输出。
https://stackoverflow.com/questions/24523335
复制相似问题