z3优化不会产生Solver生成一个

时间:2018-05-13 17:06:51

标签: z3 z3py

我正在编写一个能够识别掉落物体何时会撞到地面的功能。它从一些具有初始速度y的高度值y0开始。它需要考虑重力加速度(9.81m / s)并尝试确定dt的{​​{1}}。

代码(下面)可以很好地确定质量将在什么时候到达地面。但是,我必须找出使用y == 0而不是Solver的困难方法。 (结果:Optimize)。有人能解释一下这个原因吗? 不能优化也能找到解决方案吗? (显然在这种情况下只有一个)

这是我的代码:

unknown

1 个答案:

答案 0 :(得分:1)

Z3的优化器仅适用于线性约束。您有一个非线性项(由于涉及vydt的乘法),因此优化求解器会放弃Unknown

然而,可满足性求解器可以处理非线性实际约束;因此给你一个模型没有问题。

有关Z3中非线性优化的更多信息,只需搜索该术语即可。你会看到许多人提出类似的问题!这是一个例子:z3Opt optimize non-linear function using qfnra-nlsat

(注意非线性优化对于实数来说是一个非常难的问题,而不是纯粹的可满足性。因此,它不仅仅是“尚未实现它”的问题。)