簡體   English   中英

如何獲取Z3 java API中的上限和下限?

[英]How to get the upper bounds and lower bounds in Z3 java API?

使用 z3 優化求解器時,需要模型的邊界,尤其是約束很復雜。 I can find the function upper and lower in the Z3 python api but not be available for the Java api. 您能否舉一些例子來說明如何在 Z3 java api 中獲得 model 邊界?

您應該使用Handle object 來訪問邊界。 相關功能在這里:

https://github.com/Z3Prover/z3/blob/master/src/api/java/Optimize.java#L92-L103

Z3 帶有一個 java 優化示例,它訪問優化 class 內部的Handle 看:

https://github.com/Z3Prover/z3/blob/master/examples/java/JavaExample.java#L2216-L2237

只需按照該示例並進一步調用getLowergetUpper ,例如:

Optimize.Handle mx = opt.MkMaximize(xExp);

mx.getLower()
mx.getUpper()

請注意,優化中的最小值/最大值並不總是可靠的,它們也不意味着任何大於最小值和小於最大值的值都將滿足您的約束。 它們只是求解器在約束變量時跟蹤的內容,可能不是您所想的。 最好展示你嘗試了什么,以及在詢問堆棧溢出問題時得到了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM