我必须解决一个多目标问题,但我不知道我应该使用 CPLEX 还是 Matlab。你能解释一下这两种工具的优缺点吗?非常感谢!
4 回答
这实际上是一个关于在存在多个目标的情况下选择最合适的建模方法的问题,而不是在 CPLEX 或 MATLAB 之间做出决定。
多标准决策本身就是一个完整的子领域。看看:http ://en.wikipedia.org/wiki/Multi-objective_optimization 。
一旦您决定了方法并制定了您的问题(通过将您的多个目标分解为一个加权目标,或作为一系列线性程序),任何一个工具都将为您完成工作。
由于您熟悉 MATLAB,因此您可以先使用它来求解一系列线性程序(一种目标编程方法)。Mathworks 的此页面包含一些示例,其中包含分步详细信息:http: //www.mathworks.com/discovery/multiobjective-optimization.html帮助您入门。
可能这个问题不是您当前关心的问题。但是我的答案相当普遍,所以让我在这里发布。
如果解决多目标问题意味着得出特定的帕累托最优解,那么您需要解决通过对目标进行标量化(聚合)而获得的单目标问题。标量化的类型及其参数的值(如果有)取决于决策者的偏好,例如,当不同目标相互冲突时,他/她/您希望如何对它们进行优先级排序。加权求和、成就标量化(又名加权切比雪夫)和词典优化是最普遍的类型。它们各有优缺点,所以这里没有通用的推荐。
在以下情况下首选 CPLEX,其中 (A) 您的标量化问题属于由 CPLEX 解决的类(显然),例如,它是 [混合整数] 线性/二次问题,并且 (B) 问题对于计算时间来说足够复杂是必不可少的。CPLEX 专门研究窄类问题,在复杂情况下应该比 Matlab 快得多。
您不必将多目标方法的选择限制为 Matlab/CPLEX 或其他求解器(通常很窄)提供的方法。自己制定一个标量化问题很容易,然后运行适当的单目标优化(来源:这是我的主要研究领域之一,参见例如背包问题类的实现)。问题归结为找到合适的单目标求解器。
如果您想获得有关整个帕累托最优集的一些一般信息,我建议从推导最低点和理想目标向量开始。
如果您想导出帕累托最优集的表示,除了提到的基于群体的启发式算法(例如 GA)之外,还有针对特定类别的问题开发的精确方法。示例:在 Julia 中实现的库,最近发布的方法。
这里提到的所有概念都在Miettinen (1999)的综合书中进行了描述。
cplex 可以解决帕累托类型的多目标问题吗?我所知道的是,它可以通过定义字典对象来解决简单的目标编程,或者它使用加权和通过敏感信息逐渐改变权重并“枚举”帕累托前沿,这高度依赖于权重并且看起来非常主观。
您可以在这里参考cplex如何解决双目标,这似乎并不好。
对于包含排名的真正帕累托方式,我只知道一些 GA 变体可以像 NSGA-II 那样做。