Jmetal 4+ 使用指南四使用Jmetal进行试验-NSGAIIStudy(一)

2021-05-10 15:35:24 浏览数 (1)

Experimentation with jMetal

  • 本文以Jmetal官网文档为基础,结合自身理解

链接如下

Jmetal 4 使用指南一

Jmetal 4 使用指南二

Jmetal 4 使用指南三

  • 如果你还不了解NSGA-II可以参考

NSGA-II入门

多目标优化拥挤距离计算

多目标优化按支配关系分层实现

Experimentation Example: NSGAIIStudy

  • jMetal包括jmetal.experiments.Experiment类,旨在帮助进行算法的实验研究。在当前状态下,它可以指示:要运行的元启发法,要解决的问题,要应用的质量指标以及要执行的独立运行的次数。结果,它将生成一个文件夹,其中包含所有获得的近似值集和指标值.
  • 一个包含指标平均值和方差的latex文档
  • 能够生成箱式图的R脚本
  • R脚本生成latex表格,并应用Wilcoxon统计检验结果
  • Friedman test的latex表格
  • 这里我们通过研究NSGA-II中不同交叉概率1.0, 0.9, 0.8, and 0.7.作为一个例子来介绍Jmetal的用法

Defining the experiment 定义实验

  • 首先创建一个子类NSGAIIStudy来继承Experiment这个虚类

1. 实现algorithmSettings方法

  • 在每次独立运行,每种问题和算法时都会自动调用此方法。关键是必须创建具有所需参数化的Settings对象才能执行算法:
  • 第29行new一个HashMap数组,用于传递不同的算法参数,以在第46-47行new不同的NSGAII实例。

2.new一个NSGAIIStudy实例

代码语言:javascript复制
  public static void main(String[] args) throws JMException, IOException {
    NSGAIIStudy exp = new NSGAIIStudy() ; // exp = experiment

3.设置实验名称

  • 这个实验名称会在后续用在生成Latex实验结果中
代码语言:javascript复制
exp.experimentName_  = "NSGAIIStudy" ;

4.设置实验参数

  • 注意Problem个数和算法PF总个数需要对应
  • 并且注意 问题中的目标数量和PF中的目标数量需要相等

5. 设置结果输出地址和PF存储地址

  • 前者用于设定输出的地址,后者用于加载真实前沿
PS:输出结果地址为绝对地址更好!

6. 初始化Settings

7. 设定独立运行次数

8. 初始化实验

9. 设置线程个数

  • 线程个数默认为1,这里可以设为多个 (更多更快呀)
代码语言:javascript复制
    // Run the experiments
    int numberOfThreads ;
    exp.runExperiment(numberOfThreads = 6) ;

10.评价指标和LaTex 表格

代码语言:javascript复制
    exp.generateQualityIndicators() ;
    
    // Generate latex tables (comment this sentence is not desired)
    exp.generateLatexTables() ;

11. 生成箱型图

代码语言:javascript复制
    // Configure the R scripts to be generated
    int rows  ;
    int columns  ;
    String prefix ;
    String [] problems ;

    rows = 2 ;
    columns = 3 ;
    prefix = new String("Problems");
    problems = new String[]{"ZDT1", "ZDT2","ZDT3", "ZDT4", "DTLZ1", "WFG2"} ;

    boolean notch ;
    exp.generateRBoxplotScripts(rows, columns, problems, prefix, notch = true, exp) ;
    exp.generateRWilcoxonScripts(problems, prefix, exp) ;
  • rows,columns分别指示图的行和列数,notch用于指示是否将其画为凹的箱型图。

12. Wilcoxon rank-sum test 和 Friedman test

代码语言:javascript复制
    exp.generateRWilcoxonScripts(problems, prefix, exp) ;

    // Applying Friedman test
    Friedman test = new Friedman(exp);
    test.executeTest("EPSILON");
    test.executeTest("HV");
    test.executeTest("SPREAD");

0 人点赞