我正在 Matlab 中进行多目标优化,并使用优化工具箱中的 fiminimax
。我想知道 fminimax
是否适用帕累托优化,如果不适用,为什么?另外,您能否推荐一个使用 Pareto 的 Matlab 或 Python 多目标优化包?
最佳答案
对于Python,DEAP可能就是您正在寻找的人。广泛documentation有很多现实生活中的例子,还有一个非常有用的 Google 网上论坛。它实现了两种强大的 MO 算法:NSGA-II 和 SPEA-II。
编辑(根据要求)
我在我的硕士论文中使用 DEAP,所以我会让您知道我们如何使用帕累托最优性。正如您将在示例中看到的那样,设置 DEAP 非常简单。使用this one作为起点。这是short version ,它使用内置算法和运算符。阅读这两篇文章,然后遵循这些指南。
由于 OneMax 示例是单目标,因此它不使用 MO 算法。但是,实现它们很容易:
- 更改您的评估函数,使其返回具有所需分数的 n 元组。如果您也想最小化标准偏差,类似
return sum(individual), numpy.std(individual)
的方法也可以。 - 此外,修改
base.Fitness
的weights
参数对象,因此它与返回的 n 元组匹配。正 float 意味着最大化,负 float 意味着最小化。您可以使用任何实数,但为了简单起见,我会坚持使用1.0
和-1.0
。 - 将您的遗传运算符更改为
cxSimulatedBinaryBounded()
,mutPolynomialBounded()
和selNSGA2()
,分别用于交叉、变异和选择操作。这些是建议的方法,由 NSGA-II 作者开发。 - 如果您想使用 DEAP 中的嵌入式现成算法之一,请选择
MuPlusLambda()
. - 调用算法时,请记住将
halloffame
参数从HallOfFame()
更改为至ParetoFront()
。这将返回所有非支配个体,而不是按字典顺序排序的最佳“所有世代中的最佳个体”。然后您可以根据需要解决帕累托前沿:加权和、自定义词典排序等。
我希望这会有所帮助。考虑到还有一个完整的、更高级的 NSGA2 示例可用 here .
关于python - Matlab 的 fminimax 是否适用帕累托最优?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775809/