繁体   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