Matlab optimproblem:可以使用第 3 方 ILP 求解器吗?

Matlab optimproblem: Possible to use 3rd party ILP solver?

我一直在浏览 Matlab 的 [混合] 整数线性程序 ([M]ILP) commands/classes 文档,看看是否有办法定义 "optimization problem" (optimproblem) and call out to an external [M]ILP solver using an API rather than using the native intlinprog. I haven't yet found any indication that this is possible, short of converting the problem to matrix/solver-based format (prob2struct) 并创建我自己的中间 ILP 数据文件。那将超出我愿意做的。

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

如果有办法,有人可以告诉我正确的文档页面吗?

如果实在不行,请大神确认一下好吗?

谢谢。

澄清:问题强调使用optimproblem

我很欣赏迄今为止的回答和评论,但我从他们那里意识到我需要强调问题中的一个关键点。我的目标是利用 optimproblem, which uses Matlab's array syntax to compactly represent a large number of constraints, lengthy inner products for them, and for the objective function. This is the so-called problem-based approach, which is akin in high level to AMPL.

的高级问题规范

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

我希望有一种方法可以使用 optimproblem 并让它使用第 3 方求解器,这样我就不必处理矩阵级别。后者的一个例子是使用 prob2struct to generate arrays to explicitly pass to external solvers via Matlab APIs (if they have them). I want to avoid this because I don't want to keep track of which problem-based variables map to which solver-based variables, especially since the former is often of high dimensionality. Granted, varindex 简化簿记,但不必为这种簿记编写代码是更可取的。

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

根据TMW,答案是"no"目前(2019年5月30日)。

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

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