使用过程作为模型参数

时间:2019-04-25 12:11:50

标签: netlogo

我正在建立一个比较搜索功能的模型。

我可以手动更改代码以引用不同的搜索过程,但是我想使用行为空间来运行我的试验,因此,在最佳状态下,我将拥有一个参数,该参数指示模型根据参数来调用过程。

因此有4种搜索功能:a,b,c,d

我只能使用如下所示的“包装”报告器,但只是想查看netlogo中是否有更好的方法来处理此问题。

搜索功能称为n! -(0.5n)! n是海龟数量的倍数,因此包装器功能并不是一件很棒的事情,因为它效率很低。

我不知道能否将过程用作netlogo中的参数,有没有办法做到这一点?

to-report wrap [function-type]

ifelse function-type = 1
[
    report a
]
[
    ifelse function-type = 2
    [
        report b
    ]
    [
        ifelse function-type = 3
        [
            report c
        ]
        [
            ifelse function-type = 4
            [
                report d
            ]
            [
                report "not a valid function type"
                ; or some sort of error value
            ]
        ]
    ]
]

end

2 个答案:

答案 0 :(得分:3)

我同意Geruter关于使用BehaviorSpace的意见。我不确定我是否完全理解为什么他们的答案不能完全满足您的需求,但这也许对您有用。

假设您的界面上有一个选择器或名为function-selected的滑块,则可以将所需的过程名称存储为字符串,然后使用run来让海龟评估该字符串。这是一个简单的示例:

globals [ function ]

to setup
  ca
  crt 10 [ pd ]
  choose-func  
  reset-ticks
end

to choose-func
  if function-selected = 1 [
    set function "move-1"
  ]
  if function-selected = 2 [
      set function "move-2"
  ] 
  if function-selected = 3 [
      set function "move-3"
  ] 
end

function-selected中,使用setup滑块确定的选择功能来存储三个过程之一的名称。现在,您的海龟只需调用run function,它们就会评估存储在function中的字符串值,以调用适当的过程:

to go 
  ask turtles [
    run function
  ]
  tick
end

to move-1
  rt 5 
  fd 1
end

to move-2
  rt 30
  fd 1
end

to move-3
  rt random 61 - 30
  fd 1
end

function-selected处将setup设置为1:

enter image description here

function-selected处将setup设置为2:

enter image description here

function-selected处将setup设置为3:

enter image description here

如果您希望它更加灵活(例如,所选的搜索类型需要随乌龟或时间而变化,则可以使用表格扩展名:

extensions [ table ]

globals [ function-dict ]

to setup
  ca
  crt 10 [ pd ]
  set function-dict table:make 
  table:put function-dict 1 "move-1"
  table:put function-dict 2 "move-2"
  table:put function-dict 3 "move-3"
  reset-ticks
end

to go 
  ask turtles [
    run table:get function-dict function-selected
  ]
  tick
end

to move-1
  rt 5 
  fd 1
end

to move-2
  rt 30
  fd 1
end

to move-3
  rt random 61 - 30
  fd 1
end

答案 1 :(得分:1)

如果要使用Behavior Space进行实验,建议您在Netlogo的“接口”选项卡中创建选择器(请参见下面的屏幕截图)。在此输入搜索过程的名称(Screen2)。比您可以在“行为空间”中选择它们,然后在其上运行实验(屏幕3)。

Screen1

Screenshot 1

Screen2

Screenshot2

Screen3

Screenshot3

下面的行必须包含在您的代码中,以告诉Netlogo,给定选择器proc的值应应用哪个过程。例如,如果从选择器中选择"a",则将执行过程test1

to go

  if proc = "a" [ test1 ]
  if proc = "b" [ test2 ]
  if proc = "c" [ test3 ]
  if proc = "d" [ test4 ]

end

我希望这对您有用!