我想在z3中设置超时,所以我没有得到最佳解决方案,但是符合约束的解决方案。 我使用.Net并试过这样的事情:
using(Context context = new Context(new Dictionary<string, string>() { { "model", "true" } })) {
var solver = context.MkSolver(); // i actually want to use MkOptimize()
Params p = context.MkParams();
p.Add("timeout", 1000);
solver.Parameters = p;
IntExpr x = context.MkIntConst("x");
// ...
solver.Check();
solver.Model.Evaluate(x);
}
超时工作正常但我无法使用到目前为止找到的解决方案,因为solver.Check()是UNKNOWN ......
当我使用MkOptimize而不是MkSolver时,我得到一个未知参数异常
所以现在我的问题是如何在超时后获得最佳解决方案,以及如何将其与MkOptimize一起使用
答案 0 :(得分:1)
我非常怀疑当解算器由于超时或任何其他原因而说Unknown
时,你可以可靠地获得“最佳 - 迄今为止”的答案。即使你有一个模型,它也不一定能满足你所有的约束条件。由于这是一个非常Z3特定的问题,您可能会在https://github.com/Z3Prover/z3/issues获得更好的里程数,并总结您在这里为社区回答的答案。