在我的模型中,海龟的行为是由不同程序的组合定义的,具体取决于设置参数。我们说我有一个代码:
to go
ask turtles [
if (parameter1 = "A") [behaviour-1A]
if (parameter1 = "B") [behaviour-1B]
if (parameter2 = "a") [behaviour-2a]
if (parameter2 = "b") [behaviour-2b]
...
]
end
(实际上,我现在有3个这样的参数,每个参数有2或3个可能的值,但我必须在我开发模型时添加更多)这是有效的,但是非常笨拙。两个参数都是恒定的,在模拟开始时设置,并且每个时间步的每只乌龟必须询问这些参数的值的情况非常无效。是否有可能在模拟开始时只询问一次?类似的东西:
if (parameter1 = "A") [set behaviour1 behaviour-1A]
if (parameter1 = "B") [set behaviour1 behaviour-1B]
if (parameter2 = "a") [set behaviour2 behaviour-2a]
if (parameter2 = "b") [set behaviour2 behaviour-2b]
...
to go
ask turtles [
behaviour1
behaviour2
]
end
答案 0 :(得分:3)
当然,你可以这样做!这就是tasks的用途!
以下是使用任务的代码变体:
globals [
behaviour1
behaviour2
]
to setup
crt 2
if (parameter1 = "A") [ set behaviour1 task [ show "1A" ]]
if (parameter1 = "B") [ set behaviour1 task [ show "1B" ]]
if (parameter2 = "a") [ set behaviour2 task [ show "2a" ]]
if (parameter2 = "b") [ set behaviour2 task [ show "2b" ]]
end
to go
ask turtles [
run behaviour1
run behaviour2
]
end
task
原语在变量中存储命令块,您可以稍后使用run
执行该代码。
如果您已经定义了一个过程,则不需要提供代码块:您可以将过程名称直接传递给task
。我在我的示例中使用了[ show "1A" ]
之类的块,但在您的情况下,您可以执行以下操作:
if (parameter1 = "A") [ set behaviour1 task behaviour-1A ]