z3优化不会生成解算器生成的结果

z3优化不会生成解算器生成的结果,z3,z3py,Z3,Z3py,我正在写一个函数,可以识别掉落的物体何时会落地。它从某个高值y开始,初始速度为y0。它考虑了重力加速度9.81m/s,并试图确定y==0时的dt 下面的代码可以很好地确定质量将在什么点撞击地面。然而,我必须找出我必须使用解算器而不是优化的困难方法。结果:未知。有人能解释一下原因吗? 难道优化还不能找到解决方案吗?显然,在这个场景中只有一个 这是我的密码: from z3 import * vy0, y0 = Reals("vy0 y0") # initial velocity, initia

我正在写一个函数,可以识别掉落的物体何时会落地。它从某个高值y开始,初始速度为y0。它考虑了重力加速度9.81m/s,并试图确定y==0时的dt

下面的代码可以很好地确定质量将在什么点撞击地面。然而,我必须找出我必须使用解算器而不是优化的困难方法。结果:未知。有人能解释一下原因吗? 难道优化还不能找到解决方案吗?显然,在这个场景中只有一个

这是我的密码:

from z3 import *

vy0, y0 = Reals("vy0 y0")  # initial velocity, initial position
dt, vy, y = Reals("dt vy y")  # time(s), acceleration, velocity, position
solver = Solver()  # Optmize doesn't work, but why?
solver.add(vy0 == 0)
solver.add(y0 == 3)

solver.add(dt >= 0)  # time needs to be positive
solver.add(vy == vy0 - 9.81 * dt)  # the velocity is initial - acceleration * time 
solver.add(y == y0 + vy/2 * dt)  # the position changes with the velocity (s = v/2 * t)
solver.add(y == 0)
# solver.minimize(dt)  # Optmize doesn't work, but why?
print(solver.check())
print(solver.model())

Z3的优化器只适用于线性约束。由于涉及vy和dt的乘法,您有一个非线性项,因此优化解算器放弃未知项

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

有关Z3中非线性优化的更多信息,只需搜索该术语。你会看到很多人问类似的问题!这里有一个例子:

注意,相对于纯可满足性,非线性优化对于REAL来说是一个非常困难的问题。因此,这不仅仅是一个尚未实施的问题