簡體   English   中英

如何在z3py中獲取組合列表?

[英]How to get a list of combinations in z3py?

我在python中有一個像這樣的整數列表:

myList = [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57]

我想讓Z3輸出所有都是myList成員的各種數字集或列表...本質上,我想使用Z3獲得所有存在於myList中但以各種不同順序排列的數字列表。 換句話說,我想從Z3獲得各種輸出,這些輸出包含上面的set myList中的數字。

我在使用Z3py這樣做時遇到了麻煩,因為假設s = Solver() ,我不知道在調用s.model()時如何讓z3返回列表或集合作為模型。

from z3 import *

myList = [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57]

s = Solver ()
pick = []
for (i, v) in enumerate(myList):
  b = Bool ('pick_%d' % i)
  s.add(b == b)
  pick += [(b, v)]

while (s.check() == sat):
    m = s.model()

    chosen = []
    block  = []
    for (p, v) in pick:
        if m.eval(p, model_completion=True):
            chosen += [v]
            block.append(Not(p))
        else:
            block.append(p)

    print chosen
    s.add(Or(block))

請注意,這將打印2^n解決方案,其中n是列表中元素的數量。 因此,如果n大,則需要一段時間才能完成!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM