【问题标题】:How to filter only the unique scenarios in netlogo behavior space如何仅过滤netlogo行为空间中的独特场景
【发布时间】:2017-01-24 21:20:13
【问题描述】:

我想在 netlogo 中使用行为空间运行一组场景,其中 n 个竞争海龟使用不同的决策规则。我的意思是说我想在掷硬币的场景中测量一个指标,其中每个玩家都被编程为在每个滴答声中都叫正面或反面,即在 2 只乌龟的情况下,玩家 A 总是叫正面,玩家 B 总是叫反面.

当海龟的数量超过 3 时,会出现 ABC 或 ACB 或 BCD 会叫正面而其他叫反面的情况。本质上,HHTH 与 HHHT 相同。

所以我要做的简而言之就是只过滤唯一的出现,而不考虑样本空间中 H 或 T 的位置,即我只想要那些只有 1H 和 3T、2H 和 2T 的情况, 3H 和 1T。

提前感谢您的帮助。问候。

【问题讨论】:

    标签: netlogo behaviorspace


    【解决方案1】:

    您提出的问题似乎不涉及行为空间。要计算列表中的头数,请使用 table 扩展名。 (你给的例子是二进制的,有固定长度的序列,所以正面的数量决定了反面的数量,所以你只需要数其中之一即可。)

    extensions [table]
    
    to-report nHeads01 [#lst]
      let _t table:counts #lst
      report ifelse-value (table:has-key? _t "H") [
        table:get _t "H" ;case sensitive ...
      ][
        0
      ]
    end
    

    例如,我们可以生成一些长度为 4 的随机序列(来自您的示例)并过滤出长度为 2 的随机序列(或其他任何序列)。

    to-report randomHT [#n]
      report n-values #n [[?] -> one-of ["H" "T"]]
    end
    
    to test
      let _xss n-values 20 [[?] -> randomHT 4] ;20 lists to filter
      print filter [[?] -> (2 = nHeads01 ?)] _xss ;print those with 2 heads
    end
    

    如果您将序列存储为字符串,您可以在使用上述代码之前安装字符串扩展名和explode 字符串,或者您可以按照NetLogo read in file as list of characters 将字符串转换为字符列表。例如,

    to-report nHeads02 [#str]
      let _lst map [[?] -> item ? #str] n-values length #str [[?] -> ?]
      report nHeads01 _lst
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2020-03-23
      相关资源
      最近更新 更多