[英]How to calculate Absolute value in z3 or z3py
我一直在努力解决一个包含某些术语绝对值的小问题。 在z3中,不支持abs()函数。 在python中有,但我最终必须将它传递给z3py。 有什么方法可以通过它将绝对运算符的术语从python传递给z3,还是有其他方法吗? 以下是一个小例子的代码。
`
x = Int('x')
y = Int('y')
x= abs(2-y)
s=Solver()
s.add(x>0)
s.add(y>0)
s.check()
m=s.model()
print m`
答案应该是y = 1,这是删除abs()时的情况。 有没有办法用绝对值函数来解决这个问题? ABS()。 或者有什么方法可以在python中解决它,然后我可以将它传递给z3。 我也尝试过同情,但它不起作用。
这是一种方法:
x = Int('x')
y = Int('y')
def abs(x):
return If(x >= 0,x,-x)
s=Solver()
s.add(x == abs(y-2))
s.add(x>0)
s.add(y>0)
s.check()
m=s.model()
print m
绝对价值的想法非常简单。 你想知道从零开始的距离。 这样做的一种方法是翻转所有否定词的符号。
if x<0:
x=-x
你可以改变你的问题所以你不需要abs
。
在你的特定问题'x = abs(2-y),x> 0',所以'abs(2-y)> 0'。 绝对值不能是负数,而你只剩下y!= 2。
所以你可以删除x定义和x相关的约束,只需添加'y!= 2' - 你就会遇到同样的问题。
如果你需要x的值,那么稍后在Python中从y的值得到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.