我实际上正在使用Z3py来安排解决问题,而我正在尝试代表一个2处理器系统,其中必须完成4个不同执行时间的过程。
我的实际数据是: 过程1:到达0,执行时间为4 过程2:到达1并执行时间为3 过程3:到达3,执行时间为5 过程4:到达1和执行时间2
我实际上试图在同等时间的子进程中分解每个进程时代表每个进程,所以我的数据类型是这样的:
Pn = Datatype('Pn')
Pn.declare('1')
Pn.declare('2')
Pn.declare('3')
Pn.declare('4')
Pt = Datatype('Pt')
Pt.declare('1')
Pt.declare('2')
Pt.declare('3')
Pt.declare('4')
Pt.declare('5')
Process = Datatype('Process')
Process.declare('cons' , ('name',Pn) , ('time', Pt))
Process.declare('idle')
其中pn和pt是流程名称和流程的一部分(流程1分为4部分,......)
但现在我不知道如何能够代表我的处理器添加我需要的3条规则:unicity(每个子进程必须完成1次,只有1次只需1次)检查到达(进程的第一部分)在到达之前无法处理)和订单(流程的每个部分必须在先例之后处理) 所以我想用数组代表我的2个处理器用这种声明:
P = Array('P', IntSort() , Process)
但是当我尝试执行它时,我收到一条错误消息:
Traceback (most recent call last):
File "C:\Users\Alexis\Desktop\test.py", line 16, in <module>
P = Array('P', IntSort() , Process)
File "src/api/python\z3.py", line 3887, in Array
File "src/api/python\z3.py", line 3873, in ArraySort
File "src/api/python\z3.py", line 56, in _z3_assert
Z3Exception: 'Z3 sort expected'
知道我不知道如何处理它...我必须创建一个新的数据类型并想办法添加我的规则吗?或者有没有办法将数据类型添加到数组,这将让我创建这样的规则:
unicity = ForAll([x,y] , (Implies(x!=y,P[x]!=P[y])))
提前致谢
答案 0 :(得分:2)
有一个关于使用Python API中的数据类型的教程。该教程的链接是: http://rise4fun.com/Z3Py/tutorialcontent/advanced#h22 它显示了如何创建列表数据类型并使用“create()”方法从声明数据类型时使用的对象实例化Sort对象。对于您的示例,只需在要将声明的类型用作排序的位置添加对“create()”的调用即可。 请参阅:http://rise4fun.com/Z3Py/rQ7t
关于您正在研究的其他案例研究:当然可以使用量词和数组来表达您描述的常量。您还可以考虑更有效的编码:
玩得开心!