繁体   English   中英

如何计算z3或z3py中的绝对值

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM