【发布时间】:2015-09-18 10:40:37
【问题描述】:
我有一个模型,其中代理或补丁对 A 和 B 两件事有意见:
patches-own[
OpinionA
OpinionB
]
然后在开始时随机设置这些值。
我怎样才能改变这一点,以便有两个以上的东西?事实上,我希望通过滑块设置该数字。如何动态更改代理或补丁所具有的变量数量?
【问题讨论】:
标签: netlogo
我有一个模型,其中代理或补丁对 A 和 B 两件事有意见:
patches-own[
OpinionA
OpinionB
]
然后在开始时随机设置这些值。
我怎样才能改变这一点,以便有两个以上的东西?事实上,我希望通过滑块设置该数字。如何动态更改代理或补丁所具有的变量数量?
【问题讨论】:
标签: netlogo
我认为不可能即时创建新的代理变量,但您可以只使用一个代理变量并使用一个列表来存储多个意见。您可以通过滑块定义该列表的长度,并将列表的每个位置随机设置为特定的意见。 例如,如果您希望补丁具有 x 个不同的意见(由滑块 x 定义),它们具有“a”、“b”或“c”,您可以按如下方式执行:
patches-own[
opinion
]
to setup
... (some setup procedure stuff)
let opinion-options (list "a" "b" "c")
ask patches[
set opinion n-values x [one-of opinion-options]
]
【讨论】:
您可以使用table 扩展名:
extensions [table]
patches-own[
opinions
]
to setup
ask patches [
set opinions table:make
]
; ...
end
使用“键值”对设置意见,其中键是意见类型,重视实际态度。例如:
ask n-of 5 patches [
table:put opinions "favorite-color" "blue"
table:put opinions "food" "pizza"
]
您可以为另一组补丁设置不同数量的意见:
ask n-of 5 patches [
table:put opinions "favorite-color" "red"
table:put opinions "food" "chocolate"
table:put opinions "age" 5
]
显示对食物的看法(对于带有食物看法的补丁):
ask patches with [ table:has-key? opinions "food" ]
[ show table:get opinions "food ]
例如,如何随机设置n意见:
let number-of-opinions 3
ask n-of 5 patches [
(foreach n-values 3 [?] n-values 3 [random 10]
[ table:put opinions ?1 ?2 ])
]
这里 3 个意见(分别命名为 0、1 和 2)设置了随机数(从 0 到 9)。要检查意见 1,请使用:
ask patches with [ table:has-key? opinions 1 ]
[ show table:get opinions 1 ]
请注意,with 在请求值之前会检查是否设置了特定意见类型。
另请参阅documentation 中的表格示例。
【讨论】: