【发布时间】: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