【问题标题】:Does Matlab's fminimax apply Pareto optimality?Matlab 的 fminimax 是否应用帕累托最优?
【发布时间】:2014-06-03 01:07:59
【问题描述】:

我正在 Matlab 中进行多目标优化,并在优化工具箱中使用fiminimax。我想知道fminimax 是否应用了帕累托优化,如果没有,为什么?另外,您能否推荐一个在 Matlab 或 Python 中确实使用 Pareto 的多目标优化包?

【问题讨论】:

    标签: python matlab optimization


    【解决方案1】:

    对于 python,DEAP 可能是您正在寻找的那个。广泛的documentation 有很多现实生活中的例子,以及一个非常有用的谷歌论坛。它实现了两种强大的 MO 算法:NSGA-II 和 SPEA-II。

    编辑(按要求)

    我在我的硕士论文中使用 DEAP,所以我会告诉你我们是如何使用帕累托最优的。正如您将在示例中看到的那样,设置 DEAP 非常简单。使用this one 作为起点。这是short version,它使用内置的算法和运算符。阅读两者,然后遵循这些准则。

    由于 OneMax 示例是单目标的,它不使用 MO 算法。但是,它们很容易实现:

    • 更改您的评估函数,使其返回具有所需分数的 n 元组。如果您也想最小化标准差,return sum(individual), numpy.std(individual) 之类的方法会起作用。
    • 另外,修改base.Fitness 对象的weights 参数,使其与返回的n 元组匹配。正浮点数表示最大化,而负数表示最小化。您可以使用任何实数,但为了简单起见,我会坚持使用 1.0-1.0
    • 将您的遗传运算符更改为cxSimulatedBinaryBounded()mutPolynomialBounded()selNSGA2(),分别用于交叉、变异和选择操作。这些是建议的方法,因为它们是由 NSGA-II 作者开发的。
    • 如果您想在 DEAP 中使用其中一种嵌入式即用型算法,请选择 MuPlusLambda()
    • 调用算法时,记得将halloffame参数从HallOfFame()改为ParetoFront()。这将返回所有非支配个体,而不是按字典顺序排序的最佳“所有世代中的最佳个体”。然后,您可以根据需要解决您的 Pareto Front:加权总和、自定义字典排序等。

    我希望这会有所帮助。考虑到还有一个完整的、更高级的 NSGA2 示例here

    【讨论】:

    • 不错。您可能会通过一些链接来为您的答案增添趣味,这些链接专门回答了原始发布者关于使用 Pareto 的问题(那些众所周知的方法当然可以 - NSGA-II 与 Matlab 的gamultiobj 使用的相同)。
    • 我尝试过,但没有足够的业力。多亏了你,我现在得到了几分,所以我会“增加趣味”;)
    【解决方案2】:

    对于fminimaxfgoalattain,它看起来像answer is no。但是,遗传算法求解器gamultiobj 是基于帕累托集的,尽管我不确定它是否是您想要使用的multi-objective optimization functiongamultiobj 实现了NGSA-II 进化算法。还有this package 使用Matlab mex 接口在C 中实现加强帕累托进化算法2 (SPEA-II)。它有点旧,所以您可能需要重新编译它(如果您不是在 Windows 32 位上,则无论如何都需要)。

    【讨论】:

    • 你知道python的包吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2018-12-24
    相关资源
    最近更新 更多