0

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

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

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

在此先感谢您的帮助。问候。

4

1 回答 1

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
于 2017-01-24T13:20:13.137 回答