我正在编写一个能够识别掉落物体何时会撞到地面的功能。它从一些具有初始速度y
的高度值y0
开始。它需要考虑重力加速度(9.81m / s)并尝试确定dt
的{{1}}。
代码(下面)可以很好地确定质量将在什么时候到达地面。但是,我必须找出使用y == 0
而不是Solver
的困难方法。 (结果:Optimize
)。有人能解释一下这个原因吗?
不能优化也能找到解决方案吗? (显然在这种情况下只有一个)
这是我的代码:
unknown
答案 0 :(得分:1)
Z3的优化器仅适用于线性约束。您有一个非线性项(由于涉及vy
和dt
的乘法),因此优化求解器会放弃Unknown
。
然而,可满足性求解器可以处理非线性实际约束;因此给你一个模型没有问题。
有关Z3中非线性优化的更多信息,只需搜索该术语即可。你会看到许多人提出类似的问题!这是一个例子:z3Opt optimize non-linear function using qfnra-nlsat
(注意非线性优化对于实数来说是一个非常难的问题,而不是纯粹的可满足性。因此,它不仅仅是“尚未实现它”的问题。)