首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引入output语句时,MiniZinc找不到解决方案

引入output语句时,MiniZinc找不到解决方案
EN

Stack Overflow用户
提问于 2017-06-07 14:21:11
回答 2查看 321关注 0票数 2

我有一个用minizinc编写的简单模型,我使用gecode来解决它,首先将它编译成flat-zinc。作为输入,该模型接受一些常量、数组和矩阵(以二维数组的形式)。该模型的输出是另一个必须满足某些约束的二维矩阵。

目标优化是最小化" Target“的值,”target“是输出矩阵的特定函数,定义如下:

代码语言:javascript
复制
var float: target = sum(i in 1..nodes, j in 1..nodes) (F(i, j) * output_matrix[i, j]);
solve minimize target;

当我执行这个模型时,如下所示:

代码语言:javascript
复制
mzn2fzn model.mzn model.dzn
fzn-gecode -a model.fzn

我可以看到一系列可能的解决方案,列表中的最后一个是最优的。但是,如果我在模型中添加一个output语句来打印"target“变量的值- gecode会挂起几个小时,根本找不到任何解决方案,如果中断,还会打印==UNKNOWN==。

代码语言:javascript
复制
output [
"target: ", show(target), "\n"
];

这是意料之中的行为吗?如果是,你能解释一下为什么吗?

干杯

EN

回答 2

Stack Overflow用户

发布于 2017-10-11 07:55:20

这是因为output语句在求解阶段对变量顺序有影响。

在你的例子中,你输出的是"target",所以solver会尝试首先给“target”赋值,然后赋值给F矩阵(我假设F是你的决策变量?),这个求解的顺序可能永远不会结束。

2个选项:

  • 先尝试输出矩阵F,然后再输出目标变量

output [show(F),show(target)];

在solve 过程中,

  • 会指示求解器首先为F赋值

solve ::int_search(array1d(F),input_order, indomain, complete) minimize target;

票数 2
EN

Stack Overflow用户

发布于 2017-07-04 08:33:15

输出"target:“++ show(target) ++ "\n";

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44404965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档