在订单重要且允许重复时生成K-multisets

时间:2018-04-24 09:24:11

标签: combinations netlogo multiset

很抱歉,如果我的问题是基本的,但我在过去的15年里没有编码,尽管我正在努力学习为研究项目再次编码。我有一组12个对象[ABCDEFGHIJKL],我想为1到6之间的任何K创建任何可能的K-multiset列表。(我确实有一个选择概率列表,但在项目的这个阶段我可以假设所有人都有相同的选择概率。订单事项和重复是允许的(因此它们只是k元组)。例如:[A],[AA] [BAA] [ABA],[BAAAAA]等我尝试在weighted-n-of-with-repeats的{​​{1}}扩展名中使用RND,但似乎是订单并不重要,因此[BA]和[AB]是相同的,并报告为[AB]。你能帮忙解决NetLogo代码吗?

这是我到目前为止所尝试过的,但不幸的是它无法识别顺序:

NetLogo

1 个答案:

答案 0 :(得分:0)

请注意,每个包含K个项目的多个集合可以在12个数字系统中表示为整数值,其中A对应于0,B对应于1,依此类推,直到L = 11.

因此,您可以遍历范围0..12^K-1 中的所有整数(K = 6时约为3百万)并获取12位数字作为项目的索引。

较小项目列表和输出范围的python代码:

List = list('ABC')
L = len(List)
for K in range(1,4):
    for i in range(L**K):
        j = i
        output = []
        for n in range(K):   #K digits
             d = j % L      #integer modulo for n-th digit
             j = j // L     #integer division
             output.insert(0,List[d])
        print(output)
part of output:
['A']
['B']
['C']
['A', 'A']
['A', 'B']
['A', 'C']
...
['C', 'C']
['A', 'A', 'A']
['A', 'A', 'B']
['A', 'A', 'C']
...
['C', 'B', 'C']
['C', 'C', 'A']
['C', 'C', 'B']
['C', 'C', 'C']