Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
使用z3 python API编码线性混合自动机_Python_Python 2.7_Z3 - Fatal编程技术网

使用z3 python API编码线性混合自动机

使用z3 python API编码线性混合自动机,python,python-2.7,z3,Python,Python 2.7,Z3,我试图将线性混合自动机编码为一阶公式的连接,如下所示: s.add(Or(Or(And(off,Not(on),Not(S1),Not(S2),(10*x_next)>=(3*t1)-(3*t2)+(10*x),(10*x_next)<=(10*x)-(t2-t1),x_next>=18,(t2-t1)>0,Implies(), And(Not(off),on,Not(S2),Not(S1),(10*x_next)>=(t2-t1)+(10*x),(5*x_next

我试图将线性混合自动机编码为一阶公式的连接,如下所示:

s.add(Or(Or(And(off,Not(on),Not(S1),Not(S2),(10*x_next)>=(3*t1)-(3*t2)+(10*x),(10*x_next)<=(10*x)-(t2-t1),x_next>=18,(t2-t1)>0,Implies(),
And(Not(off),on,Not(S2),Not(S1),(10*x_next)>=(t2-t1)+(10*x),(5*x_next)<=(5*x)+(t2-t1),x_next<=22,(t2-t1)>0)),    
Or(And(x<19,(t2-t1)==0,S1,Not(off),Not(on),Not(S2),(x-x_next)==0),
And(x>21,(t2-t1)==0,Not(on),Not(off),S2,Not(S1),(x-x_next)==0))))
s.add(或(和)(和)(关,不(开),不(S1),不(S2),(10*x_下一步)>=(3*t1)-(3*t2)+(10*x),(10*x_下一步)=18,(t2-t1)>0,暗示(),

和(非(关)、开、非(S2)、非(S1),(10*x_下一个)>=(t2-t1)+(10*x),(5*x_下一个)寻找或构造一个可以编码的工具可能是有用的 HA公式来自更高级别的描述。它们可以帮助调试一些细节。 例如,您说有两种模式“开”和“关”。这两种模式似乎被编码为命题变量。通常使用程序计数器来编码自动机的状态,因此,例如,将有一个程序计数器“状态”,其值可以是“开”或“关”。您可以使用Z3中的标量对状态变量的可能值进行编码,也可以使用整数或位向量,或者在本例中使用布尔标志。
然后是编码转换关系的问题。您通常需要对不因转换而改变的变量的帧条件进行编码。

跳转条件是什么意思?您能提供更多细节吗?混合自动机由不同的模式组成。每个模式都必须满足某些线性算术约束。但是f特定模式中状态变量的值达到某个值(例如xIn,在这种情况下,只有模式(off,on)。if(xTwo模式(on,off)。HA在off模式下启动。这两个模式确实被编码为建议变量。让我再澄清一点。实际上,每个模式都有两组线性算术约束(它们可以表示为一阶公式的析取)。我面临的真正问题是如何在这两组(或两种模式)的常数之间进行切换。切换必须是最终公式的一个组成部分。s.add(off,Not(on),(10*x_next)>=(3*t1)-(3*t2)+(10*x),(10*x_next)=18,(t2-t1)>0这是我为“关闭”模式实现consriants的方式