// CEC2013PlanBStudy.java // // Authors: // Antonio J. Nebro <antonio@lcc.uma.es> // Juan J. Durillo <durillo@lcc.uma.es> // // Copyright (c) 2013 Antonio J. Nebro, Juan J. Durillo // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. package jmetal.experiments.studies; import jmetal.core.Algorithm; import jmetal.experiments.Experiment; import jmetal.experiments.Settings; import jmetal.experiments.settings.NSGAII_Settings; import jmetal.experiments.util.Friedman; import jmetal.util.JMException; import java.io.IOException; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; /** * Class implementing a typical experimental study. Five algorithms are * compared when solving the ZDT, DTLZ, and WFG benchmarks, and the hypervolume, * spread and additive epsilon indicators are used for performance assessment. */ public class jMetalExperiment extends Experiment { /** * Configures the algorithms in each independent run * @param problemName The problem to solve * @param problemIndex * @throws ClassNotFoundException */ public void algorithmSettings(String problemName, int problemIndex, Algorithm[] algorithm) throws ClassNotFoundException { try { int numberOfAlgorithms = algorithmNameList_.length; HashMap[] parameters = new HashMap[numberOfAlgorithms]; for (int i = 0; i < numberOfAlgorithms; i++) { parameters[i] = new HashMap(); } // for if (!paretoFrontFile_[problemIndex].equals("")) { for (int i = 0; i < numberOfAlgorithms; i++) parameters[i].put("paretoFrontFile_", paretoFrontFile_[problemIndex]); } // if //algorithm[0] = new SMSEMOA_Settings(problemName).configure(parameters[0]); //algorithm[0] = new SMPSOCell2_Settings(problemName).configure(parameters[0]); //algorithm[1] = new SMPSO_Settings(problemName).configure(parameters[1]); //algorithm[2] = new SMPSOhv_Settings(problemName).configure(parameters[2]); //algorithm[2] = new SMPSOhv_Settings(problemName).configure(parameters[2]); //algorithm[3] = new SMSEMOA_Settings(problemName).configure(parameters[3]); //algorithm[0] = new SMPSORandomArchive_Settings(problemName).configure(parameters[0]); //algorithm[1] = new SMPSORandomSwarm_Settings(problemName).configure(parameters[1]); //algorithm[2] = new SMPSOhvRandomArchive_Settings(problemName).configure(parameters[2]); algorithm[0] = new NSGAII_Settings(problemName).configure(parameters[0]); //algorithm[0] = new PAES_Settings(problemName).configure(parameters[0]); //algorithm[1] = new PAEShv_Settings(problemName).configure(parameters[1]); } catch (IllegalArgumentException ex) { Logger.getLogger(jMetalExperiment.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(jMetalExperiment.class.getName()).log(Level.SEVERE, null, ex); } catch (JMException ex) { Logger.getLogger(jMetalExperiment.class.getName()).log(Level.SEVERE, null, ex); } } // algorithmSettings /** * Main method * @param args * @throws JMException * @throws IOException */ public static void main(String[] args) throws JMException, IOException { jMetalExperiment exp = new jMetalExperiment(); exp.experimentName_ = "leaders_experiments"; //exp.algorithmNameList_ = new String[]{"SMPSOhv3","SMPSOhvRandomArchive"}; //exp.algorithmNameList_ = new String[]{"SMPSO","SMPSOArchiveRandom","SMPSOCell2","SMPSOhv3","SMPSOhvRandomArchive"}; //, "SMSEMOA","NSGA-II"}; exp.algorithmNameList_ = new String[]{"SMPSOhv3","SMSEMOA","NSGA-II"}; //exp.algorithmNameList_ = new String[]{"SMPSOhvRandomArchive"}; // "PAES", "PAEShv"}; //"SMSEMOA", "SMPSO", "SMPSOhv2"}; //"SMPSOCell2"}; exp.problemList_ = new String[]{"ZDT1", "ZDT2","ZDT3", "ZDT4","ZDT6", "DTLZ1","DTLZ2","DTLZ3","DTLZ4","DTLZ5", "DTLZ6","DTLZ7", "WFG1","WFG2","WFG3","WFG4","WFG5","WFG6","WFG7","WFG8","WFG9"}; exp.paretoFrontFile_ = new String[]{"ZDT1.pf", "ZDT2.pf","ZDT3.pf", "ZDT4.pf","ZDT6.pf", "DTLZ1.3D.pf","DTLZ2.3D.pf","DTLZ3.3D.pf", "DTLZ4.3D.pf","DTLZ5.3D.pf","DTLZ6.3D.pf", "DTLZ7.3D.pf", "WFG1.pf","WFG2.pf","WFG3.pf", "WFG4.pf","WFG5.pf","WFG6.pf", "WFG7.pf","WFG8.pf","WFG9.pf"}; exp.indicatorList_ = new String[]{"HV","EPSILON"}; int numberOfAlgorithms = exp.algorithmNameList_.length; exp.experimentBaseDirectory_ = "/home/juan/Dropbox/Juanjo (1)/CEC2013/" + exp.experimentName_; exp.paretoFrontDirectory_ = "/home/juan/Dropbox/fronts"; exp.algorithmSettings_ = new Settings[numberOfAlgorithms]; exp.independentRuns_ = 30; exp.initExperiment(); // Run the experiments int numberOfThreads ; //exp.runExperiment(numberOfThreads = 8) ; //exp.generateQualityIndicators() ; // Friedman Tests Friedman test = new Friedman(exp); test.executeTest("EPSILON"); test.executeTest("HV"); test.executeTest("SPREAD"); test.executeTest("IGD"); // Generate latex tables exp.generateLatexTables() ; // Configure the R scripts to be generated int rows ; int columns ; String prefix ; String [] problems ; boolean notch ; //rows = 3 ; //columns = 2 ; prefix = new String("PSOses"); problems = new String[]{"ZDT1", "ZDT2","ZDT3", "ZDT4","ZDT6","DTLZ1","DTLZ2","DTLZ4","DTLZ5","DTLZ6","DTLZ7","WFG1","WFG2","WFG3","WFG4","WFG5","WFG6","WFG7","WFG8","WFG9"} ; //problems = new String[]{"ZDT1"} ; //exp.generateRBoxplotScripts(rows, columns, problems, prefix, notch = false, exp) ; exp.generateRWilcoxonScripts(problems, prefix, exp) ; // Configuring scripts for ZDT /* rows = 3 ; columns = 2 ; prefix = new String("ZDT"); problems = new String[]{"ZDT1", "ZDT2","ZDT3", "ZDT4","ZDT6"} ; exp.generateRBoxplotScripts(rows, columns, problems, prefix, notch = false, exp) ; exp.generateRWilcoxonScripts(problems, prefix, exp) ; // Configure scripts for DTLZ rows = 3 ; columns = 3 ; prefix = new String("DTLZ"); problems = new String[]{"DTLZ1","DTLZ2","DTLZ3","DTLZ4","DTLZ5", "DTLZ6","DTLZ7"} ; exp.generateRBoxplotScripts(rows, columns, problems, prefix, notch=false, exp) ; exp.generateRWilcoxonScripts(problems, prefix, exp) ; // Configure scripts for WFG rows = 3 ; columns = 3 ; prefix = new String("WFG"); problems = new String[]{"WFG1","WFG2","WFG3","WFG4","WFG5","WFG6", "WFG7","WFG8","WFG9"} ; exp.generateRBoxplotScripts(rows, columns, problems, prefix, notch=false, exp) ; exp.generateRWilcoxonScripts(problems, prefix, exp) ; */ } // main } // CEC2013PlanBStudy