使用迷你锌进行优化 - 仅打印最佳解决方案



目前我正在仔细研究Minizinc。 求解模型时,Minizinc 在输出窗口中显示我的模型的所有有效解。我有点困惑,因为我没有要求mini锌解决模型作为满意度问题。 是否有可能只显示最佳解决方案? 感谢您的回答。

此致敬意

solve的说法是什么?如果是solve satisfy,那么您会要求所有解决方案。如果是solve minimize xsolve maximize x则求解器将显示最优解的进展,最优解最后显示。

使用OptiMathSAT版本1.5.1,现在可以使用选项打印给定FlatZinc公式的所有相同成本最优解

-opt.fzn.all_solutions=[BOOL]

例如,获取以下test.fzn文件

var 0..3: x ::output_var;
var 0..3: y ::output_var;
var bool: r1 ::output_var;
var bool: r2 ::output_var;
constraint int_lin_le_reif([1, 1, -1], [x, y, 4], 0, r1);
constraint int_lin_le_reif([1, 1, -1], [x, y, 2], 0, r2);
constraint bool_or(r1, r2, true);
solve maximize x;

并按如下方式解决:

~$ ../bin/optimathsat -input=fzn -opt.fzn.all_solutions=True < test.fzn
% allsat model
x = 3;
y = 0;
r1 = true;
r2 = false;
----------
% allsat model
x = 3;
y = 1;
r1 = true;
r2 = false;
----------
=========

x的最大值为3,因此求解器打印所有且仅打印那些x等于3test.fzn模型。


当然,正如@hakank在他的回答中提到的,人们可能对解决方案向最佳解决方案的进展感兴趣。这也可以在OptiMathSAT使用选项

-opt.fzn.partial_solutions=[BOOL]

在上面的例子中,这将产生

~$ ../bin/optimathsat -input=fzn -opt.fzn.partial_solutions=True < test.fzn
% objective: x (model)
x = 2;
y = 0;
r1 = true;
r2 = true;
----------
% objective: x (model)
x = 3;
y = 0;
r1 = true;
r2 = false;
----------
% objective: x (optimal model)
x = 3;
y = 0;
r1 = true;
r2 = false;
----------
=========

在这里,优化搜索找到两个不同的模型:一个初始模型,其中x等于2,另一个最优模型,其中x等于3。后一个模型被打印两次:第一次是找到它,第二次是求解器能够证明它实际上是问题的最佳解决方案。

相关内容

  • 没有找到相关文章

最新更新