我想用Z3优化一组方程。问题是我的方程是非线性的,但最重要的是它们确实具有三角函数。 z3中有没有办法解决? 我正在使用z3py API。
答案 0 :(得分:2)
SMT求解器通常不支持先验数和三角函数。
正如Christopher所指出的(谢谢!),Z3确实支持三角函数和超验性。但是支持相当有限。 (实际上,这意味着您不应该期望Z3决定您要向其抛出的每个公式;在复杂的情况下,最有可能只返回unknown
。)
有关出版物,请参见https://link.springer.com/chapter/10.1007%2F978-3-642-38574-2_12。以下讨论线程中有一些示例可以帮助您入门:https://github.com/Z3Prover/z3/issues/680
此外,请注意Z3的优化求解器不处理非线性方程;因此您将无法对其进行优化。对于这类优化问题,传统的SMT求解器不是正确的选择。
但是,如果您对δ可满足性满意(允许一定的误差因子),请查看dReal
,它可以处理三角函数:http://dreal.github.io/据我所知,但是,它不会执行优化。