Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用z3求解器求解Kirkman’;女学生的问题是什么?_Python_Z3_Smt - Fatal编程技术网

Python 如何使用z3求解器求解Kirkman’;女学生的问题是什么?

Python 如何使用z3求解器求解Kirkman’;女学生的问题是什么?,python,z3,smt,Python,Z3,Smt,我对SMT问题还不熟悉,并尝试使用Dennis Yurichev编写的一个示例,模仿如何在SAT/SMT中使用z3/MK85解决Kirkman的女学生问题。但当我试图得到模型时(我使用的是Z3): m[%d\ud”%(人,天)] Python有一些错误: 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“D:\Z3\Z3 master\Z3 master\build\python\Z3\Z3.py”,第6138行,在\uuuuu getitem\uuuuuuuuuuuuz3\u ass

我对SMT问题还不熟悉,并尝试使用Dennis Yurichev编写的一个示例,模仿如何在SAT/SMT中使用z3/MK85解决Kirkman的女学生问题。但当我试图得到模型时(我使用的是Z3):

m[%d\ud”%(人,天)]

Python有一些错误:

回溯(最近一次呼叫最后一次):

文件“”,第1行,在

文件“D:\Z3\Z3 master\Z3 master\build\python\Z3\Z3.py”,第6138行,在\uuuuu getitem\uuuuuuuuuuuuz3\u assert中(False,“需要整数、Z3声明或Z3常量”)

文件“D:\Z3\Z3 master\Z3 master\build\python\Z3\Z3.py”,第92行,在Z3_断言引发Z3Exception(msg)Z3.z3types.Z3Exception:需要整数、Z3声明或Z3常量

我不知道我是否对模特的表情感到困惑。我想调试一下。 此外,我想知道在Z3中是否有另一种解决方法以及Z3和MK85之间的表达式差异

从z3导入*
进口itertools
人、天、组=15、7、5
s=解算器()
tbl=[[BitVec(“%d_U%d”%(人,天),16)表示范围内的天(天)]表示范围内的人(人)]
对于范围内的人(人):
对于范围内的天(天):
s、 添加(和(待定[人][日]>=0,待定[人][日]<组))
定义成对中只有一个可以相等(l1,l2):
断言len(l1)=len(l2)
expr=[]
对于范围(len(l1))内的对_eq:
tmp=[]
对于范围内的i(len(l1)):
如果对_eq==i:
tmp.append(l1[i]==l2[i])
其他:
tmp.append(l1[i]!=l2[i])
expr.追加(和(*tmp))
s、 添加(或(*expr))
对于itertools.组合中的配对(范围(人),r=2):
配对中只有一个配对可以相等(tbl[配对[0]],tbl[配对[1]])
断言s.check()
m=s.模型()
打印(“每个人的组:”)
打印(“人:“+”。加入([chr(ord('A')+i)+”表示范围内的i(人)])
对于范围内的天(天):
打印(“日期=%d:%day)
对于范围内的人(人):
打印(m[%d_u%d”%(人,天)])#错误
打印(“”)
def组中的人员(天,组):
rt=“”
对于范围内的人(人):
如果m[%d_u%d”%(人,天)]==组:#错误
rt=rt+chr(ord('A')+人)
返回rt
对于范围内的天(天):
打印(“日期=%d:%day)
对于范围内的组(组):
打印(组中的人员(天,组)+“”)
打印(“”)

我希望调试它或用另一种方法解决这个问题。

这里的问题是您使用不正确的索引访问模型。而不是:

m["%d_%d" % (person , day)]
使用:

(您有两个这样的实例,需要同时使用这两种方法。)

m[tbl[person][day]]