解决多目标优化:CPLEX还是Matlab?

时间:2011-12-19 00:56:25

标签: matlab mathematical-optimization cplex

我必须解决多目标问题,但我不知道是否应该使用CPLEX或Matlab。你能解释一下这两种工具的优缺点吗? 非常感谢你!

4 个答案:

答案 0 :(得分:4)

这确实是一个关于在存在多个目标时选择最合适的建模方法的问题,而不是在CPLEX或MATLAB之间进行决策。

多标准决策制定本身就是一个完整的子领域。请看一下:http://en.wikipedia.org/wiki/Multi-objective_optimization

一旦你决定了这个方法并制定了你的问题(通过将多个目标折叠成一个加权的目标,或者作为一系列线性程序),任何一个工具都可以为你完成工作。

由于您熟悉MATLAB,因此可以先使用它来解决一系列线性程序(目标编程方法)。 Mathworks的这个页面有一些示例,其中包含逐步详细信息:http://www.mathworks.com/discovery/multiobjective-optimization.html以帮助您入门。

答案 1 :(得分:1)

这个问题可能与您当前所关心的问题无关。但是我的回答相当普遍,所以让我在这里发布。

如果解决多目标问题意味着需要导出特定的Pareto最优解,那么您需要解决通过标定(汇总)目标而获得的单目标问题。标量的类型及其参数的值(如果有)取决于决策者的偏好,例如当他们彼此冲突时,他/她/您希望如何优先考虑不同的目标。加权总和,成就标​​量化(又称加权Chebyshev)和词典优化是最普遍的类型。它们有不同的优缺点,因此这里没有通用的建议。

在以下情况下首选CPLEX:(A)您的标量问题属于CPLEX解决的类(显然),例如它是一个[混合整数]线性/二次问题,并且(B)这个问题足够复杂,以至于计算时间至关重要。 CPLEX专门研究狭窄的问题,在复杂情况下应该比Matlab快得多。

您不必将多目标方法的选择限制为Matlab / CPLEX或其他求解器(通常较窄)提供的方法。您可以很容易地自己提出一个标量问题,然后进行适当的单目标优化(来源:这是我的主要研究领域之一,请参见implementation for the class of knapsack problems)。问题归结为找到合适的单目标求解器。

如果您想获得有关整个帕累托最优集的一些常规信息,我建议从推导最低点和理想目标向量开始。

如果您想派生帕累托最优集的表示,除了提到的基于群体的启发式算法(例如GA)外,还针对特定类型的问题开发了精确的方法。示例:a library implemented in Juliaa recently published method

Miettinen (1999)在综合手册中描述了这里提到的所有概念。

答案 2 :(得分:0)

cplex可以解决一个pareto类型的多目标吗?我所知道的是它可以通过定义词典对象来解决简单的目标编程,或者它使用加权和来逐渐改变权重信息并“枚举”帕累托前沿,这很大程度上取决于权重并且看起来非常主观。

您可以参考here,了解cplex如何解决这个问题,这似乎并不好。

对于包含排名的真正的帕累托方式,我只知道一些GA变体可以像NSGA-II那样。

答案 3 :(得分:0)

一种不同的方法是使用领域特定的建模语言进行数学优化,例如YALMIP(如果您想尝试JUMP.jl,则可以使用Julia)。在那里,您可以使用Matlab编写的优化问题,并提供其他一些IsOpen功能,并使用YALMIP(或任何其他受支持的求解器作为后端),而不必局限于一个求解器。