引入输出语句时MiniZinc找不到解决方案

2024-01-04

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

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

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

我可以看到一系列可能的解决方案,其中列表中的最后一个是最佳解决方案。但是,如果我将输出语句添加到模型中以打印“目标”变量的值 - gecode 会挂起几个小时而根本找不到任何解决方案,并且如果中断则打印 ==UNKNOWN== 。

output [
"target: ", show(target), "\n"
];

这是预期的行为吗?如果是,您能解释一下原因吗?

Cheers


发生这种情况是因为输出语句会影响求解阶段的变量顺序。

在您的情况下,您输出“目标”,因此求解器将尝试首先将值分配给“目标”,然后将值分配给 F 矩阵(我假设 F 是您的决策变量?),并且这种求解顺序可能会永远持续下去。

2个选项:

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

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

  • 指示求解器在求解过程中首先为 F 赋值

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

引入输出语句时MiniZinc找不到解决方案 的相关文章

随机推荐

  • jasonp跨域请求“将json包装成回调方法”

    我添加了 回调 使用匿名函数获取请求中的 url 我必须在服务器端代码中添加什么才能使其跨域工作 这里使用getJSON是否正确 这是没有 JSONP 的播放器的示例http www freeenergymedia com shared P
  • 将变量从 Scala 中的存在类型 TypeCast 转换为运行时类型

    这个线程 https stackoverflow com questions 29380839 trait runtime type of type parameter through typetag when used with exis
  • 不在网络抓取中迭代列表

    通过链接 我尝试创建两个列表 一个用于国家 地区 另一个用于货币 但是 我陷入了困境 它只给了我第一个国家 地区名称 但没有迭代到所有国家 地区的列表 任何有关如何解决此问题的帮助将不胜感激 提前致谢 这是我的尝试 from bs4 imp
  • ORDER BY 重新加载,cassandra

    我想对给定的列族进行排序 为此我尝试使用选项 CLUSTERING ORDER BY 创建一个表 我总是遇到以下错误 1 变体 A 导致错误请求 缺少列 userid 的 CLUSTERING ORDER陈述 CREATE TABLE te
  • 使用Service、TimerTask和BroadcastReceiver来检查各种更新

    我正在尝试创建一个简单的程序来执行以下操作 由我的活动 UpdateServiceActivity 启动的服务 NewsService 检查新闻 如果发现新闻 NewsService 则会向接收者 NewsReceiver 发送广播 接收到
  • Android 10秒后隐藏布局?

    我在单击按钮时显示了一个布局 我想在 10 秒后隐藏该布局 protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState mVolHa
  • 在 Visual Studio 2008 中调试 Web 服务时如何避免超时错误

    我正在使用控制台应用程序调用 Web 服务方法 并使用 vs2008 中的调试器单步调试代码 有时我需要停下来思考一些事情 比较一下价值观 不是说几个小时 只是几分钟 此时web服务超时了 如何避免这种情况 让web服务根本不超时 谢谢 好
  • 如何排除和过滤pandas中的几列?

    我知道我们可以使用 pandas dataframe 过滤器仅选择几列 但是我们也可以仅排除某些列吗 这是 MWE import numpy as np import pandas as pd df pd DataFrame id 1 2
  • 如何在 MKMapView 上绘制当前位置到所需位置之间的路线?

    我想显示我当前位置和所需位置之间的路线 我能够做到这一点 但是当源点和目的地点到目前为止时 它不会显示路线并给出内存警告 您能建议任何示例代码或任何方法来做到这一点吗 以下代码用于绘制当前位置到所需位置之间的路径 void viewDidL
  • jqGrid dataUrl下拉列表不刷新

    我是 Web 开发新手 正在开发我的第一个 ASP NET MVC 3 应用程序 我正在使用 jqGrid 并注意到刷新页面不会刷新下拉列表中的值 直到我在另一个选项卡中打开同一页面 然后刷新第一个选项卡将获取更改的值 我有一个控制器操作
  • For-each 与迭代器。哪个将是更好的选择

    考虑以下场景 List
  • 将新记录添加到私人 Outlook 通讯组列表

    我需要从文件或数据库中读取包含姓名和电子邮件的记录 并将它们添加到现有的 Oulook 通讯组列表 来自私人联系人 而不是来自 GAL 我刚刚看到使用 LINQ to DASL 从 OL 读取邮件和约会的示例 但我不知道如何列出 dist
  • Bootstrap 表,空单元格中的破折号/连字符

    我正在使用Wenzhixin的bootstrap table模块 http bootstrap table wenzhixin net cn http bootstrap table wenzhixin net cn 当我使用 JSON 加
  • 在express.js中设置cookie出现j:前缀

    我正在尝试使用 res cookie 设置 cookie 如下所示 res cookie userId req user id set cookie here console log req user id returned correct
  • 将哈希锚定到页面底部

    转到页面 底部 的通用 HTML 锚标记是什么 我知道标签 会自动将用户带到页面顶部 但我不太确定页面底部 没有一个 不过 你可以用类似的东西来模拟它 a a 然后链接到 bottom 你可能会发现这个帖子 https stackoverf
  • 如何将 int 转换为一系列字符

    我正在尝试将 8 位微控制器 PIC 上的 C 整数分解为其 ASCII 等效字符 例如 将 982 转换为 9 8 2 到目前为止我想出的一切似乎都相当暴力 这是我现在基本上正在做的主要想法 if 10 lt n n lt 100 iso
  • Celery (Django) 速率限制

    我正在使用 Celery 来处理多个数据挖掘任务 其中一项任务连接到远程服务 该服务最多允许 10 个同时连接per user 或者换句话说 它CAN全球连接数超过 10 个 但CANNOT每个单独作业超过 10 个连接 I THINK 令
  • 权限被拒绝使用 Excel 12.0 库和 VB6 打开 Excel 文件

    我以前曾在 VB6 应用程序中多次使用 Excel 但从未遇到过如此奇怪的问题 试图完成一些非常简单的事情 我正在尝试打开 Excel xls 或 xlsx 文件并读取值 正如您可能看到的那样 当我尝试打开该文件时 收到错误 70 权限被拒
  • 将 CSV 文件内容与 filecmp 进行比较并忽略元数据

    import filecmp comparison filecmp dircmp dir local dir server comparison report full closure 我想将本地计算机上保存的所有 CSV 文件与服务器上保
  • 引入输出语句时MiniZinc找不到解决方案

    我有一个用 minizinc 编写的简单模型 我使用 gecode 首先将其编译为 flat zinc 来解决它 作为输入 模型采用一些常量 数组和矩阵 二维数组的形式 模型的输出是另一个必须满足一些约束的二维矩阵 目标优化是最小化 目标