簡體   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