[英]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.