计算Netlogo中的组合

时间:2018-01-22 18:22:29

标签: permutation netlogo

我试图在NetLogo中生成一个列表,其中包含几个不同的0和1的唯一列表.1的数量取决于j,列表的数量取决于i。例如,我有这些代码行:

if (i = 4) and (j=1) [set mylist = [[1 0 0 0][0 1 0 0][0 0 1 0][0 0 0 1]]]
if (i = 4) and (j=2) [set mylist = [[1 1 0 0][1 0 1 0][1 0 0 1][0 1 1 0][0 1 0 1] [0 0 1 1]]]

我写的是在列表中没有任何重复的情况下制作0和1的所有可能的唯一组合。我希望能够做同样的事情,但对于i和j的值,范围从1-10。有没有一个如何做到这一点的例子,或某种伪代码算法,任何人都知道我可以检查出来?谢谢!

1 个答案:

答案 0 :(得分:2)

to-report combinations [_m _s]
  if (_m = 0) [ report [[]] ]
  if (_s = []) [ report [] ]
  let _rest butfirst _s
  let _lista map [? -> fput item 0 _s ?] combinations (_m - 1) _rest
  let _listb combinations _m _rest
  report (sentence _lista _listb)
end

;convert location list to bitstring
to-report bitstring [#len #locs]
  report map [? -> ifelse-value (member? ? #locs) [1] [0]] range #len
end

;try it out:
to-report test-values [#i #j]  ;e.g., test-values 4 2
  report map [? -> bitstring #i ?] combinations #j range #i
end