Z3 优化:通过 API 检测无界性
Z3 optimization: detect unboundedness via API
我在检测优化问题的无限性时遇到困难。如示例和此处的一些答案所述,无界优化问题的打印结果等于 "oo",必须对其进行解释(通过字符串比较?)。
我的问题是:有什么方法可以使用 API 来检测吗?
我已经搜索了一段时间了,唯一可能做我想要的功能是 Z3_mk_fpa_is_infinite(Z3_context c, Z3_ast t)
其中 returns 一些 Z3_ast
对象。问题是:这是正确的方法吗?我如何从那个 Z3_ast
对象中得到无限制的 属性?
目前没有内置的方法来提取无界值或无穷小。
优化引擎在表示 maximal/minimal
是无界的或严格限制的。这些常量没有内置识别器,并且正式地,它们不属于 Reals 域。它们属于扩展字段。因此,正式地说,我将不得不 return 一个不同数字字段的表达式,或者 return 相当于一个数字的三元组(epsilon、标准数字、无限)。例如,标准数字 5.6 将表示为 (0, 5.6, 0),刚好低于 5.6 的数字表示为 (-1, 5.6, 0),+无穷大的数字表示为 (0, 0, 1).作为 returning 表达式,返回三个值而不是一个值对我来说似乎不是更令人满意的解决方案。我将它留给用户 post-处理 returned 并且确实匹配符号 "oo" 和 "epsilon" 的表达式,以便在需要时分解值。
我在检测优化问题的无限性时遇到困难。如示例和此处的一些答案所述,无界优化问题的打印结果等于 "oo",必须对其进行解释(通过字符串比较?)。
我的问题是:有什么方法可以使用 API 来检测吗?
我已经搜索了一段时间了,唯一可能做我想要的功能是 Z3_mk_fpa_is_infinite(Z3_context c, Z3_ast t)
其中 returns 一些 Z3_ast
对象。问题是:这是正确的方法吗?我如何从那个 Z3_ast
对象中得到无限制的 属性?
目前没有内置的方法来提取无界值或无穷小。 优化引擎在表示 maximal/minimal 是无界的或严格限制的。这些常量没有内置识别器,并且正式地,它们不属于 Reals 域。它们属于扩展字段。因此,正式地说,我将不得不 return 一个不同数字字段的表达式,或者 return 相当于一个数字的三元组(epsilon、标准数字、无限)。例如,标准数字 5.6 将表示为 (0, 5.6, 0),刚好低于 5.6 的数字表示为 (-1, 5.6, 0),+无穷大的数字表示为 (0, 0, 1).作为 returning 表达式,返回三个值而不是一个值对我来说似乎不是更令人满意的解决方案。我将它留给用户 post-处理 returned 并且确实匹配符号 "oo" 和 "epsilon" 的表达式,以便在需要时分解值。