【问题标题】:Matlab optimproblem: Possible to use 3rd party ILP solver?Matlab optimproblem:可以使用第 3 方 ILP 求解器吗?
【发布时间】:2019-05-27 16:29:17
【问题描述】:

我一直在浏览 Matlab 的 [混合] 整数线性程序 ([M]ILP) 命令/类文档,看看是否有办法定义“优化问题” (optimproblem) 并调用使用 API 而不是使用本机 intlinprog 的外部 [M]ILP 求解器。我还没有发现任何迹象表明这是可能的,除了将问题转换为基于矩阵/求解器的格式 (prob2struct) 并创建我自己的中间 ILP 数据文件。那将超出我的意愿。

实际上没有办法直接调用 3rd 方求解器吗?

如果有办法,有人可以指导我到正确的文档页面吗?

如果事实上没有办法,有人可以确认一下吗?

谢谢。

澄清:问题强调使用optimproblem

我很欣赏迄今为止的答案和 cmets,但我从他们那里意识到我需要强调问题中的一个关键点。我的目标是利用optimproblem 的高级问题规范,它使用Matlab 的数组语法来紧凑地表示大量约束、它们的冗长内积以及目标函数。这就是所谓的problem-based方法,在高层上类似于AMPL

相比之下,我最初浏览第 3 方求解器上引用的文档时的印象是,它们的输入处于较低的抽象级别。这就是所谓的solver-based方法,同事也称其为“矩阵级”,原因如下:原型数组x、Aeq、beq、Aineq、bineq等,假设已经组合,并且由分析人员负责跟踪 x 中的哪些元素对应于哪些(更多)现实世界参数,即基于问题的方法中的那些。

我希望有一种方法可以使用 optimproblem 并让它使用第 3 方求解器,这样我就不必处理矩阵级别了。后者的一个示例是使用 prob2struct 生成数组,以通过 Matlab API 显式传递给外部求解器(如果它们有)。我想避免这种情况,因为我不想跟踪哪些基于问题的变量映射到哪些基于求解器的变量,尤其是因为前者通常是高维的。当然,varindex 简化了簿记,但不必为此类簿记编写代码更为可取。

【问题讨论】:

    标签: matlab mathematical-optimization solver integer-programming mixed-integer-programming


    【解决方案1】:

    使用基于问题的方法设置您的问题。使用 prob2struct 并使用外部求解器求解。通过 mapSolution 函数将解决方案转换回来,就像使用基于问题的方法一样。

    https://uk.mathworks.com/help/optim/ug/optim.problemdef.optimizationproblem.mapsolution.html

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 开头的段落似乎总结了这个想法。 mapSolution 函数应该满足原始问题中描述的需求。
    【解决方案2】:

    是的——各种第 3 方优化求解器都有 MATLAB API。例如,CPLEXGurobi 都具有 MATLAB API。但是你通过它们自己的函数调用来调用它们,而不是通过intlinprog

    【讨论】:

    • CPLEX 实际上同时具有类 API 和工具箱函数 API。工具箱函数 API 被设计为尽可能类似于 intlinprog 等 matlab 函数。见ibm.com/support/knowledgecenter/en/SSSA5P_12.6.3/…
    • 谢谢,这是信息。但是,我需要澄清一下,问题是如何让optimproblem 使用第 3 方求解器,而不是使用自己的 API 直接调用第 3 方求解器。后者似乎期望原型参数已经组装,即 x、Aeq、Beq、Aneq、Bneq 等。我在问题中添加了这个详细说明。答案还会是“是”吗?是否有另一种方法可以避免直接处理所述原型变量?
    • 我明白了,我误会了。在这种情况下,像YALMIP 这样的解决方案对您来说是可行的吗?它采用基于问题的方法,为您计算求解器级别的矩阵和向量,并且可以调用多个第三方求解器。
    • 谢谢,拉里。 YALMIP 示例代码看起来更接近矩阵级别而不是问题/AMPL 级别,并且它位于控制理论上下文中,这可能是外部人员的障碍。了解 AMPL API 对我有好处,因为我仍在了解主题领域和工具生态系统。您是否同意我的问题的答案是“不,您不能让 optimproblem 对象调用外部求解器,但在高级别的定义问题和调用外部求解器的替代方法包括 YALMIP 和 AMPL API”?
    • 我对@9​​87654329@ 的了解还不够,所以我不想同意这种说法。
    【解决方案3】:

    根据 TMW,目前(2019 年 5 月 30 日)答案是否定的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      相关资源
      最近更新 更多