【问题标题】:NSGA-II implementationNSGA-II 实施
【发布时间】:2013-08-24 12:21:18
【问题描述】:

我研究过非支配排序算法(NSGA-II)。
我想使用这种多目标优化算法。
任何人都可以通过在 java 或 matlab 中解决任何免费的 NSGA-II 实现来帮助我。

提前致谢

【问题讨论】:

  • 我也对此感兴趣。我对 jMetal 进行了简短的了解,但与我不久之后遇到的可靠的 Watchmaker 相比,代码的质量似乎有所欠缺(对于 Java 软件工程师)。 Watchmaker 支持通过将组件连接在一起来构建进化算法的非常通用的方法,所以我很想知道 NSGA-II 是否已经实现或可以在其中实现?我想我很快就会发现自己。

标签: evolutionary-algorithm


【解决方案1】:

MOEA Framework 是一个用于多目标优化的免费开源 Java 框架。它拥有所有图书馆中最大的 MOEA 集合,包括 NSGA-I、NSGA-II 和 NSGA-III。

我个人用它来实现和解决我的硕士论文的多目标问题 (MOP),发现它远远优于 PyGMO(python)和jMetal(Java)。

以下代码演示了如何使用 MOEA Framework API 运行 NSGA-II 来解决 ZDT1 多目标问题:

import java.util.List;
import org.moeaframework.Executor;
import org.moeaframework.core.NondominatedPopulation;
import org.moeaframework.core.Solution;

public class NSGAIIExample {

    public static void main(String[] args) {
        // configure and run this experiment
        NondominatedPopulation result = new Executor()
                .withProblem("ZDT1")
                .withAlgorithm("NSGAII")
                .withMaxEvaluations(1000)
                .distributeOnAllCores()
                .run();

        List<NondominatedPopulation> multiRuns = new Executor()
                .withProblem("ZDT1")
                .withAlgorithm("NSGAII")
                .withMaxEvaluations(1000)
                .distributeOnAllCores()
                .runSeeds(3);

        System.out.format("Obj1  Obj2%n");
        for (Solution solution : result) {
            System.out.format("%.5f\t%.5f%n", solution.getObjective(0),
                    solution.getObjective(1));
        }
    }
}

【讨论】:

  • Austin 您是否介意扩展一下 MOEA 如何优于 jMetal?我即将开始在一个项目中使用这两者中的一个,并且对使用 MOEA 有点犹豫,因为它似乎不再被积极维护,而 jMetal 是。
  • @qwertz MOEA 框架实际上将 jMetal 实现用于他们的许多算法。因此,jMetal 实际上是 MOEA 框架的一个子组件。
【解决方案2】:

jMetal是MOEA的Java框架,包含NSGA-II,网址为here

【讨论】:

  • “jMetal is the MOEA的Java框架[…]”听起来像是某种官方的参考实现,有点误导。
【解决方案3】:
【解决方案4】:

由于目前还没有提及:Jenetics

Jenetics 是一个高级遗传算法、进化算法和遗传编程库,分别用现代 Java 编写。

从 4.1.0 版开始,jenetics.ext 模块为多目标问题提供了类。它还提供了NSGA2Selector,但是(取自manual v4.3.0,第92 页):

由于 MOO 类是对现有进化引擎的扩展,因此实现并不完全遵循既定算法,如 NSGA2 或 SPEA2。因此,相关论文中描述的结果和性能无法直接比较。

尽管如此,这可能是合理的选择。

【讨论】:

    【解决方案5】:

    快速阅读此主题,我还没有看到提到 platEMO。这是我最近使用很多的基于matlab的优化平台。文档和安装信息可以在以下位置找到:

    https://github.com/BIMK/PlatEMO

    它有大量的问题和算法(包括NSGA-II)作为标准。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2021-07-07
    • 1970-01-01
    • 2015-08-14
    • 2019-12-16
    相关资源
    最近更新 更多