1
私はz3にタイムアウトを設定したいので、最適な解決策は得られませんが、制約に合ったタイムアウトを設定してください。 私は、.NETを使用して、このような何かを試してみました:私が使用している場合...Z3タイムアウトを最適化する
をタイムアウトが正しい取り組んでいるが、solver.Check()が不明であるため、私は、これまでに見つかったソリューションを使用するカント
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);
}
MkOptimize代わりのMkSolver iは、未知のパラメータ例外
を取得するだから私の質問は今、私は非常に疑問いただきたいどのように私はこれまでのタイムアウト後に最適なソリューションを入手できますし、どのように私はMkOptimize
** z3 **は、最適化アルゴリズムで使用されているため、最新の既知の最適近似値を確実に保存します。この値は、*タイムアウト*イベントの信頼できる最善のものです。だからそれはただ印刷する必要があります。 ** OptiMathSAT **はこれを行い、最適化検索に沿って数式モデル全体を保存するので、* timeout *が発生しても* best-so-far *最適値に対応するモデルを常にダンプすることができます。そのような*近似解が見つかった場合に限ります。 –
フェアポイント。しかし、いくつかの内部データ構造で利用可能なものと、タイムアウト後にAPIを介して利用できるものは同じではないかもしれません。しばらく前のソルバ状態に関する同様の議論がありました:https://stackoverflow.com/questions/44110746/saving-the-state-of-a-z3-solver-in-smt2-format。だからこそ私は、OPがZ3の開発者にgithubサイトで直接尋ねるよう奨励しました。 –