我有一个模型,其中代理或补丁对A和B两件事有意见:
patches-own[
OpinionA
OpinionB
]
然后在开始时随机设置这些值。
我怎么能改变它以便可能有两件以上的东西?实际上,我希望通过滑块设置该数字。如何动态更改代理或补丁的变量数量?
答案 0 :(得分:4)
我认为不可能动态创建新的代理变量,但您可以只使用一个代理变量并使用列表来存储多个意见。您可以通过滑块定义该列表的长度,并将列表的每个位置随机设置为特定的意见。 例如,如果您希望补丁具有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]
]
答案 1 :(得分:1)
您可以使用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中的表格示例。