- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
前段时间正在写一篇OR相关的文章发表。在文章中,使用 MiniZinc 展示了针对特定优化问题的 MILP 模型。我以最佳方式解决了 10 个实例中的 10 个实例。
一位顾问审查了它并提到了以下 2 条评论:
我一直在使用 MiniZinc,它对我来说非常有效。我如何展示 MiniZinc 的多功能性?是否有引用书目或证明其合理性的方法?
为什么不建议在摘要中提及它?
什么是使用 MiniZinc 的有效理由?
最佳答案
要证明使用 MiniZinc 的合理性,最重要的是阐明 MiniZinc 的功能。运筹学社区有时非常固定,通常会关注两件事:
但是,MiniZinc 应该被视为该过程中的较早步骤。它允许用户编写问题的高级模型,该模型被编译成求解器可以理解的规范(在 MILP 求解器的情况下,它将是一组线性方程)。因此,在 OR 世界中,它比图书馆更好,比如 JuMP和 PyOpt ,而不是像 Gurobi 或 CPlex 这样的求解器。然而,与这些库不同的是,MiniZinc 语言是在更高层次上编写的,并且打算与求解器技术无关,这意味着,除了 MILP 求解器之外,您还可以尝试 CP、LCG、SMT 和 SAT 求解器。
关于为什么使用 MiniZinc 而不是 JuMP 或 PyOpt 的一个很好的论据是,MiniZinc 通常可以在基于高级模型结构的编码中应用优化。已经发表了多篇关于自动线性化的问题的论文,这些问题在求解器上提供了出色/新颖的性能。论文"Improved Linearization of Constraint Programming Models"甚至表明 MiniZinc 有时可以创建比该领域的专家更高效的线性模型。
最后,应该注意的是,MiniZinc 实际上使用了您的顾问提到的求解器。 Gurobi 和 CPlex(可能)是解决线性化问题的最佳 MiniZinc 求解器。也就是说,如果您正在使用 MiniZinc 的一些其他求解器,那么您可能仍在使用最先进的求解器:Gecode 是目前最快的约束编程求解器之一; Chuffed 在 MiniZinc 挑战中多次击败所有竞争对手,是一种新颖的惰性子句生成求解器;并且有更多的求解器采用不同的求解器技术,可以与顶级的 MiniZinc 一起使用。
所以直截了本地回答问题:
How do you compare MiniZinc with other latest generation MILP solvers like CPLEX or Gurobi in terms of performance?
我们不会将 MiniZinc 与 Gurobi 或 CPlex 进行比较,因为 MiniZinc 不是求解器。然而,MiniZinc 将为新型求解器创建模型,例如 Gurobi 和 CPlex。
Since MiniZinc is not one of the best known MILP solvers, you should avoid mentioning its name in the summary. (For what reason would you not recommend mentioning it in the abstract?)
如果 MiniZinc 对您的应用做出了重大贡献,那么我认为提及它是公平的;但是,最好结合使用的求解器来提及它。如果在您的论文中描述 MiniZinc 的过程或它为您所做的工作,它会有所帮助。
What can be an efficient justification for the use of MiniZinc?
MiniZinc 是一个很好的工具,可以创建人类可读的问题模型,并将其转化为顶级求解器的有效规范。
关于linear-programming - 如何在研究中展示 MiniZinc 的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61481869/
我想在 MiniZinc 中用相同的项目创建两个数组,不一定按相同的顺序。在这里,A0 中的每一项也应该在 A1 : array[1..3] of var int:A0; array[1..3] of
假设我想计算 {1,2,..100} 的 80 个元素子集的数量,使它们的总和为 3690。 我有以下模型: array[1..100] of var 0..1: b; constraint (sum
我看到 MiniZinc Handbook 中的各个地方都使用了 $ (主要在 Reference Manual 部分),但我一直找不到定义。有人可以向我解释一下吗?谢谢。 最佳答案 MiniZinc
在斑马谜题 ( http://rosettacode.org/wiki/Zebra_puzzle#MiniZinc ) 的解决方案中,有一个约束条件,规定其中一只宠物必须是斑马: var 1..5:
在斑马谜题 ( http://rosettacode.org/wiki/Zebra_puzzle#MiniZinc ) 的解决方案中,有一个约束条件,规定其中一只宠物必须是斑马: var 1..5:
我正在尝试解决 MiniZinc 中的一个练习,其中部分排序关系由二维数组给出: enum NODE = { A, B, C, D, E }; int : SOURCE = 1; int : TARG
我正在熟悉 MiniZinc 的基础知识。因此,借助 MiniZinc IDE,我编写了如下代码片段 solve satisfy; string: s1 = "hello"; string: s2 =
锌规范是这样说的: If no output item is present, the implementation should print all the global variables and
MiniZinc 中的 channel 是什么?你能提供一个简单的例子来解释 channel 吗?最后,什么是逆? 最佳答案 两者都用于建立两个数组之间的双向关系。 设 f 是一个数组,index_s
FlatZinc 文档说 只有非标谓词必须在 FlatZinc 模型的顶部声明: Predicates used in the model that are not standard FlatZinc
我有一个二维网格,其中某些单元格值会产生不同的分数,我想通过为单元格分配值来最大化分数。是否可以跟踪求解器在求解过程中尝试的每个网格?下面是模型的一个片段,只是为了演示这个想法。 int: i_cou
picat求解器 (v. 2.6#2) 指出示例模型 knights.mzn包含在 minizinc 存储库中,特此复制粘贴: % RUNS ON mzn20_fd % RUNS ON mzn-fzn
尝试学习 minizinc,但在完成示例之后,我是否可以确认,如果我想获得多个输出,或者有一种更“自然的 minizinc”方式来获得它,我实际上必须编写一些程序语言。 例如,假设我想让所有不同的数字
练习是: n个人想要拍一张合影。每个人都可以给出他或她旁边的偏好想要放置在照片上。要解决的问题是找到满足最大数量的放置位置偏好。 到目前为止我编写的代码: include "globals.mzn";
我正在尝试编写一个带有嵌套循环的输出语句,以及在外部级别的重要输出。如果 Minizinc 有一个顶级 for 命令,我会做类似的事情 for (f in Foo) ( output(["Foo:
我想检查 1 到 5 之间的哪个数字没有出现在数组组中,并将这个(或多个)数字放在另一个数组中。 g=2; set of int: GROUPS = 1..g; groups = [{1, 3}, {
问题 给定一个 MiniZinc 字符串数组: int: numStats; set of int: Stats = 1..numStats; array[Stats] of string: stat
我有一个变量,它应该只在特定条件下有一个值,所以我想它需要是一个可选变量。如果满足该条件,则可选变量应限制为集合的元素。 问题是,MiniZinc 似乎不喜欢可选变量和集合。 如何重写,使 MiniZ
我如何使用嵌套 for 循环(就像下面 java 所做的那样)在 Minizinc 中生成/填充数组? int[][] input1 = {{1,1,1}, {3,3,3}, {5,5,5} }; i
我正在使用 minizinc 和 gecode 以分布式方式解决最小化问题。我有多个分布式服务器,它们使用相同的输入来解决相同的模型,并且我希望所有服务器都能获得相同的解决方案。 问题是模型有多个解决
我是一名优秀的程序员,十分优秀!