Z3优化超时

时间:2017-06-27 11:38:26

标签: c# .net z3

我想在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一起使用

1 个答案:

答案 0 :(得分:1)

我非常怀疑当解算器由于超时或任何其他原因而说Unknown时,你可以可靠地获得“最佳 - 迄今为止”的答案。即使你有一个模型,它也不一定能满足你所​​有的约束条件。由于这是一个非常Z3特定的问题,您可能会在https://github.com/Z3Prover/z3/issues获得更好的里程数,并总结您在这里为社区回答的答案。