modeling - 用于LP/MILP建模的最佳建模语言? (不是求解器)

标签 modeling mixed-integer-programming

我拥有Gurobi许可证,并且使用了良好的MILP/LP建模语言,应该是

  • 免费/开源
  • 直观,即看起来像的东西(取自MiniZinc)

    var int:x;
    约束x> = 0.5;
    解决最小化x;
  • 快速:建立模型并将其发送到Gurobi的时间应与最佳模型(AMPL GAMS等)的顺序相似。
  • 灵活/强大(能够处理3D +数组,轻松激活/停用约束,为求解器提供初始解决方案等)

  • 当然,如果我错了,请纠正我,AMPL GAMS在1)失败,Python和R在2)(也许在3)失败?)。

    GLPK,Minizinc,ZIMPL等如何?他们满足1)和2),但是3)和4)呢?在这方面,它们是否与AMPL一样好?如果不是,是否存在满足1-4的建模语言?

    最佳答案

    我已经将AMPL与Gurobi一起用于中型MIP(〜100k-1m变量?)和MiniZinc(主要与Gecode结合使用)来解决较小的组合问题。我已经看到了一些用R和Python完成的Gurobi工作,但是我自己还没有那样使用它。

    我不太熟悉其他选项。我的理解是GAMS与AMPL非常相似,我不得不说的关于AMPL的很多内容对于GAMS也可能是有效的,但是我不能保证。

    Of course, and correct me if I'm wrong, AMPL GAMS fail at 1),



    是的,一般。有一个异常(exception)可能对您的特定要求没有帮助,但对其他人可能有用:您可以通过使用NEOS web service来免费使用AMPL,Gurobi和许多其他优化产品。这仅限于academic non-commercial purposes,您必须授予NEOS某些与发送它们有关的问题的权限;在使用前,请务必阅读这些服务条款。它还需要等待可用的服务器,因此,如果优先考虑提高速度,那么这可能不是您的解决方案。

    Python and R fail at 2) (and perhaps at 3)?).



    以我的有限经验,是(2)。 AMPL,GAMS和MiniZinc专为定义优化问题而设计,因此毫不奇怪的是,它们的语法比Python和R等语言对用户更友好。

    不利的一面是,除了定义这些语言的优化问题外,您还想做其他事情,Python/R/etc。为此可能会更好。

    关于速度:对于我通常处理的问题,AMPL可能需要花费几秒钟来构建和解决MIP模型,这需要Gurobi花费几分钟才能解决。显然,这将因硬件和问题的具体情况而有所不同,但总的来说,与解决所讨论的任何解决方案的时间相比,我希望构建时间会短一些。即使有了像Gurobi这样的优秀求解器,大型MIP也很难。我遇到的许多认真的优化程序员都使用Python,因此我认为性能方面足够好。

    但是,这并不意味着语言/平台的选择与速度无关。预解决是AMPL(以及GAMS)的一项不错的功能,它试图在将问题发送到求解器之前减小问题的大小。我的标准问题有很多多余的变量和约束。 AMPL可以识别并消除其中的许多问题,从而将问题大小减小了约80%,并显着缩短了求解器时间(与我关闭presolve的运行(有时出于调试相关原因而运行)相比)。如果您期望大量的冗余,这可能是一个考虑因素。

    flexible/powerful (ability to deal with 3D+ arrays, activate/deactivate constraints easily, provide initial solutions to the solver, etc.)



    MiniZinc最多可以处理6D阵列,这可能取决于您的应用程序,也可能不够。

    在某些领域,它比AMPL更灵活,而在另一些领域则不那么灵活。 AMPL具有许多我认为有用的基于集合的功能(例如,我可以定义一个变量,其索引集类似于“成对的不相同的城市之间相隔不超过500公里”),而MiniZinc则没有此功能。 OTOH,MiniZinc在求解器跳跃方面似乎比AMPL更好,例如如果我编写具有组合约束(例如“alldifferent”)的MZ模型,然后尝试在无法识别此类约束的求解器上运行它,则MZ会将其转换为求解器可以处理的内容。

    除了注释掉它们之外,我没有尝试停用MZ中的约束,所以我在这里无济于事,类似地,它提供了初始解决方案。

    总体而言,MiniZinc是一个不错的选择。相对于AMPL有一些优缺点(“免费”是一大优点!),但它填补了类似的空白。

    关于modeling - 用于LP/MILP建模的最佳建模语言? (不是求解器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686044/

    相关文章:

    uml - 有谁知道好的对象约束语言(OCL)教程吗?

    python - 寻找具有 11,390,625 个变量组合的函数的最小值

    python - 当我运行 GEKKO 优化时,我得到了 'FileNotFoundError'

    MCMCglmm 中的重复测量

    python - 如何在 cplex-python 中设置间隙公差?

    r - 具有五个参数的非线性模型 (w/nls R)

    r - MIP (ompr) 模型在 R 中求解需要花费太多时间

    python - 创建可用值的分布 - Python

    python - 关于整数和二进制设置键的 cvxopt.glpk.ilp 文档