【问题标题】:How can I dynamically change the number of variable a netlogo agent has?如何动态更改 netlogo 代理拥有的变量数量?
【发布时间】:2015-09-18 10:40:37
【问题描述】:

我有一个模型,其中代理或补丁对 A 和 B 两件事有意见:

patches-own[
OpinionA
OpinionB
]

然后在开始时随机设置这些值。

我怎样才能改变这一点,以便有两个以上的东西?事实上,我希望通过滑块设置该数字。如何动态更改代理或补丁所具有的变量数量?

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    我认为不可能即时创建新的代理变量,但您可以只使用一个代理变量并使用一个列表来存储多个意见。您可以通过滑块定义该列表的长度,并将列表的每个位置随机设置为特定的意见。 例如,如果您希望补丁具有 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]
      ]
    

    【讨论】:

      【解决方案2】:

      您可以使用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 中的表格示例。

      【讨论】:

      • 我不建议在没有首先确定列表不足以解决问题的情况下使用表格。所以我建议先尝试 Tyr 的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      相关资源
      最近更新 更多