我正在尝试在 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 之间。是否有一个如何执行此操作的示例,或者任何人都知道我可以检查的某种伪代码算法?谢谢!
最佳答案
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
关于permutation - 在 Netlogo 中计算组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48387942/