我正在建立一个比较搜索功能的模型。
我可以手动更改代码以引用不同的搜索过程,但是我想使用行为空间来运行我的试验,因此,在最佳状态下,我将拥有一个参数,该参数指示模型根据参数来调用过程。
因此有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
答案 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:
在function-selected
处将setup
设置为2:
在function-selected
处将setup
设置为3:
如果您希望它更加灵活(例如,所选的搜索类型需要随乌龟或时间而变化,则可以使用表格扩展名:
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
Screen2
Screen3
下面的行必须包含在您的代码中,以告诉Netlogo,给定选择器proc
的值应应用哪个过程。例如,如果从选择器中选择"a"
,则将执行过程test1
:
to go
if proc = "a" [ test1 ]
if proc = "b" [ test2 ]
if proc = "c" [ test3 ]
if proc = "d" [ test4 ]
end
我希望这对您有用!