我有一个用minizinc编写的简单模型,我使用gecode来解决它,首先将它编译成flat-zinc。作为输入,该模型接受一些常量、数组和矩阵(以二维数组的形式)。该模型的输出是另一个必须满足某些约束的二维矩阵。
目标优化是最小化" Target“的值,”target“是输出矩阵的特定函数,定义如下:
var float: target = sum(i in 1..nodes, j in 1..nodes) (F(i, j) * output_matrix[i, j]);
solve minimize target;当我执行这个模型时,如下所示:
mzn2fzn model.mzn model.dzn
fzn-gecode -a model.fzn我可以看到一系列可能的解决方案,列表中的最后一个是最优的。但是,如果我在模型中添加一个output语句来打印"target“变量的值- gecode会挂起几个小时,根本找不到任何解决方案,如果中断,还会打印==UNKNOWN==。
output [
"target: ", show(target), "\n"
];这是意料之中的行为吗?如果是,你能解释一下为什么吗?
干杯
发布于 2017-10-11 07:55:20
这是因为output语句在求解阶段对变量顺序有影响。
在你的例子中,你输出的是"target",所以solver会尝试首先给“target”赋值,然后赋值给F矩阵(我假设F是你的决策变量?),这个求解的顺序可能永远不会结束。
2个选项:
output [show(F),show(target)];
在solve 过程中,
solve ::int_search(array1d(F),input_order, indomain, complete) minimize target;
发布于 2017-07-04 08:33:15
输出"target:“++ show(target) ++ "\n";
https://stackoverflow.com/questions/44404965
复制相似问题