// NSGAIIStudy.java
//
// Authors:
// Antonio J. Nebro <antonio@lcc.uma.es>
// Juan J. Durillo <durillo@lcc.uma.es>
//
// Copyright (c) 2011 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 an example of experiment using NSGA-II as base algorithm.
* The experiment consisting in studying the effect of the crossover probability
* in NSGA-II.
*/
public class NSGAIIStudy extends Experiment {
/**
* Configures the algorithms in each independent run
* @param problemName The problem to solve
* @param problemIndex
* @param algorithm Array containing the algorithms to run
* @throws ClassNotFoundException
*/
public synchronized 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
parameters[0].put("crossoverProbability_", 1.0);
parameters[1].put("crossoverProbability_", 0.9);
parameters[2].put("crossoverProbability_", 0.8);
parameters[3].put("crossoverProbability_", 0.7);
if ((!paretoFrontFile_[problemIndex].equals("")) ||
(paretoFrontFile_[problemIndex] == null)) {
for (int i = 0; i < numberOfAlgorithms; i++)
parameters[i].put("paretoFrontFile_", paretoFrontFile_[problemIndex]);
} // if
for (int i = 0; i < numberOfAlgorithms; i++)
algorithm[i] = new NSGAII_Settings(problemName).configure(parameters[i]);
} catch (IllegalArgumentException ex) {
Logger.getLogger(NSGAIIStudy.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(NSGAIIStudy.class.getName()).log(Level.SEVERE, null, ex);
} catch (JMException ex) {
Logger.getLogger(NSGAIIStudy.class.getName()).log(Level.SEVERE, null, ex);
}
} // algorithmSettings
public static void main(String[] args) throws JMException, IOException {
NSGAIIStudy exp = new NSGAIIStudy() ; // exp = experiment
exp.experimentName_ = "NSGAIIStudy" ;
exp.algorithmNameList_ = new String[] {
"NSGAIIa", "NSGAIIb", "NSGAIIc", "NSGAIId"} ;
exp.problemList_ = new String[] {
"ZDT1", "ZDT2", "ZDT3", "ZDT4", "DTLZ1", "WFG2"} ;
exp.paretoFrontFile_ = new String[] {
"ZDT1.pf", "ZDT2.pf", "ZDT3.pf","ZDT4.pf", "DTLZ1.2D.pf", "WFG2.2D.pf"} ;
exp.indicatorList_ = new String[] {"HV", "SPREAD", "IGD", "EPSILON"} ;
int numberOfAlgorithms = exp.algorithmNameList_.length ;
exp.experimentBaseDirectory_ = "/Users/antelverde/Softw/pruebas/jmetal/" +
exp.experimentName_;
exp.paretoFrontDirectory_ = "/Users/antelverde/Softw/pruebas/data/paretoFronts";
exp.algorithmSettings_ = new Settings[numberOfAlgorithms] ;
exp.independentRuns_ = 30 ;
exp.initExperiment();
// Run the experiments
int numberOfThreads ;
exp.runExperiment(numberOfThreads = 6) ;
exp.generateQualityIndicators() ;
// Generate latex tables (comment this sentence is not desired)
exp.generateLatexTables() ;
// 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) ;
// Applying Friedman test
Friedman test = new Friedman(exp);
test.executeTest("EPSILON");
test.executeTest("HV");
test.executeTest("SPREAD");
} // main
} // NSGAIIStudy