NetLogo:在设置中选择一个程序?

时间:2014-08-08 07:09:32

标签: netlogo procedures

在我的模型中,海龟的行为是由不同程序的组合定义的,具体取决于设置参数。我们说我有一个代码:

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

1 个答案:

答案 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 ]