/* Copyright 2009-2016 David Hadka
*
* This file is part of the MOEA Framework.
*
* The MOEA Framework 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.
*
* The MOEA Framework 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 the MOEA Framework. If not, see <http://www.gnu.org/licenses/>.
*/
package org.moeaframework.problem;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.moeaframework.core.NondominatedPopulation;
import org.moeaframework.core.PopulationIO;
import org.moeaframework.core.Problem;
import org.moeaframework.core.spi.ProblemProvider;
import org.moeaframework.problem.CEC2009.CF1;
import org.moeaframework.problem.CEC2009.CF10;
import org.moeaframework.problem.CEC2009.CF2;
import org.moeaframework.problem.CEC2009.CF3;
import org.moeaframework.problem.CEC2009.CF4;
import org.moeaframework.problem.CEC2009.CF5;
import org.moeaframework.problem.CEC2009.CF6;
import org.moeaframework.problem.CEC2009.CF7;
import org.moeaframework.problem.CEC2009.CF8;
import org.moeaframework.problem.CEC2009.CF9;
import org.moeaframework.problem.CEC2009.UF1;
import org.moeaframework.problem.CEC2009.UF10;
import org.moeaframework.problem.CEC2009.UF11;
import org.moeaframework.problem.CEC2009.UF12;
import org.moeaframework.problem.CEC2009.UF13;
import org.moeaframework.problem.CEC2009.UF2;
import org.moeaframework.problem.CEC2009.UF3;
import org.moeaframework.problem.CEC2009.UF4;
import org.moeaframework.problem.CEC2009.UF5;
import org.moeaframework.problem.CEC2009.UF6;
import org.moeaframework.problem.CEC2009.UF7;
import org.moeaframework.problem.CEC2009.UF8;
import org.moeaframework.problem.CEC2009.UF9;
import org.moeaframework.problem.DTLZ.DTLZ1;
import org.moeaframework.problem.DTLZ.DTLZ2;
import org.moeaframework.problem.DTLZ.DTLZ3;
import org.moeaframework.problem.DTLZ.DTLZ4;
import org.moeaframework.problem.DTLZ.DTLZ7;
import org.moeaframework.problem.LZ.LZ1;
import org.moeaframework.problem.LZ.LZ2;
import org.moeaframework.problem.LZ.LZ3;
import org.moeaframework.problem.LZ.LZ4;
import org.moeaframework.problem.LZ.LZ5;
import org.moeaframework.problem.LZ.LZ6;
import org.moeaframework.problem.LZ.LZ7;
import org.moeaframework.problem.LZ.LZ8;
import org.moeaframework.problem.LZ.LZ9;
import org.moeaframework.problem.WFG.WFG1;
import org.moeaframework.problem.WFG.WFG2;
import org.moeaframework.problem.WFG.WFG3;
import org.moeaframework.problem.WFG.WFG4;
import org.moeaframework.problem.WFG.WFG5;
import org.moeaframework.problem.WFG.WFG6;
import org.moeaframework.problem.WFG.WFG7;
import org.moeaframework.problem.WFG.WFG8;
import org.moeaframework.problem.WFG.WFG9;
import org.moeaframework.problem.ZDT.ZDT1;
import org.moeaframework.problem.ZDT.ZDT2;
import org.moeaframework.problem.ZDT.ZDT3;
import org.moeaframework.problem.ZDT.ZDT4;
import org.moeaframework.problem.ZDT.ZDT5;
import org.moeaframework.problem.ZDT.ZDT6;
import org.moeaframework.problem.misc.Belegundu;
import org.moeaframework.problem.misc.Binh;
import org.moeaframework.problem.misc.Binh2;
import org.moeaframework.problem.misc.Binh3;
import org.moeaframework.problem.misc.Binh4;
import org.moeaframework.problem.misc.Fonseca;
import org.moeaframework.problem.misc.Fonseca2;
import org.moeaframework.problem.misc.Jimenez;
import org.moeaframework.problem.misc.Kita;
import org.moeaframework.problem.misc.Kursawe;
import org.moeaframework.problem.misc.Laumanns;
import org.moeaframework.problem.misc.Lis;
import org.moeaframework.problem.misc.Murata;
import org.moeaframework.problem.misc.OKA1;
import org.moeaframework.problem.misc.OKA2;
import org.moeaframework.problem.misc.Obayashi;
import org.moeaframework.problem.misc.Osyczka;
import org.moeaframework.problem.misc.Osyczka2;
import org.moeaframework.problem.misc.Poloni;
import org.moeaframework.problem.misc.Quagliarella;
import org.moeaframework.problem.misc.Rendon;
import org.moeaframework.problem.misc.Rendon2;
import org.moeaframework.problem.misc.Schaffer;
import org.moeaframework.problem.misc.Schaffer2;
import org.moeaframework.problem.misc.Srinivas;
import org.moeaframework.problem.misc.Tamaki;
import org.moeaframework.problem.misc.Tanaka;
import org.moeaframework.problem.misc.Viennet;
import org.moeaframework.problem.misc.Viennet2;
import org.moeaframework.problem.misc.Viennet3;
import org.moeaframework.problem.misc.Viennet4;
import org.moeaframework.util.io.CommentedLineReader;
/**
* Provides a standard set of test problems. The table below details the
* problems made available by this {@link ProblemProvider}. Problems are
* identified by a name, which is used as an argument to
* {@link #getProblem(String)}. Names with {@code %D} indicate that the number
* of objectives must be specified as an integer. For instance, {@code DTLZ2_2}
* creates an instance of DTLZ2 with 2 objectives.
* <p>
* <table width="100%" border="1" cellpadding="3" cellspacing="0">
* <tr class="TableHeadingColor">
* <th width="10%" align="left">Class</th>
* <th width="10%" align="left">Name</th>
* <th width="10%" align="left">Type</th>
* <th width="70%" align="left">Characteristics</th>
* </tr>
* <tr>
* <td>{@link CF1}</td>
* <td>{@code CF1}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF2}</td>
* <td>{@code CF2}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF3}</td>
* <td>{@code CF3}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF4}</td>
* <td>{@code CF4}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF5}</td>
* <td>{@code CF5}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF6}</td>
* <td>{@code CF6}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF7}</td>
* <td>{@code CF7}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF8}</td>
* <td>{@code CF8}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF9}</td>
* <td>{@code CF9}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link CF10}</td>
* <td>{@code CF10}</td>
* <td>Real</td>
* <td>Constrained</td>
* </tr>
* <tr>
* <td>{@link DTLZ1}</td>
* <td>{@code DTLZ1_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link DTLZ2}</td>
* <td>{@code DTLZ2_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link DTLZ3}</td>
* <td>{@code DTLZ3_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link DTLZ4}</td>
* <td>{@code DTLZ4_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link DTLZ7}</td>
* <td>{@code DTLZ7_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link LZ1}</td>
* <td>{@code LZ1}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link LZ2}</td>
* <td>{@code LZ2}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link LZ3}</td>
* <td>{@code LZ3}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link LZ4}</td>
* <td>{@code LZ4}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link LZ5}</td>
* <td>{@code LZ5}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link LZ6}</td>
* <td>{@code LZ6}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link LZ7}</td>
* <td>{@code LZ7}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link LZ8}</td>
* <td>{@code LZ8}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link LZ9}</td>
* <td>{@code LZ9}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF1}</td>
* <td>{@code UF1}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF2}</td>
* <td>{@code UF2}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF3}</td>
* <td>{@code UF3}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF4}</td>
* <td>{@code UF4}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF5}</td>
* <td>{@code UF5}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF6}</td>
* <td>{@code UF6}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF7}</td>
* <td>{@code UF7}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF8}</td>
* <td>{@code UF8}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF9}</td>
* <td>{@code UF9}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF10}</td>
* <td>{@code UF10}</td>
* <td>Real</td>
* <td>Complicated Pareto set</td>
* </tr>
* <tr>
* <td>{@link UF11}</td>
* <td>{@code UF11}</td>
* <td>Real</td>
* <td>Rotated instance of {@code DTLZ2_5}</td>
* </tr>
* <tr>
* <td>{@link UF12}</td>
* <td>{@code UF12}</td>
* <td>Real</td>
* <td>Rotated instance of {@code DTLZ3_5}</td>
* </tr>
* <tr>
* <td>{@link UF13}</td>
* <td>{@code UF13}</td>
* <td>Real</td>
* <td>Instance of {@code WFG_5}</td>
* </tr>
* <tr>
* <td>{@link WFG1}</td>
* <td>{@code WFG1_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link WFG2}</td>
* <td>{@code WFG2_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link WFG3}</td>
* <td>{@code WFG3_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link WFG4}</td>
* <td>{@code WFG4_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link WFG5}</td>
* <td>{@code WFG5_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link WFG6}</td>
* <td>{@code WFG6_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link WFG7}</td>
* <td>{@code WFG7_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link WFG8}</td>
* <td>{@code WFG8_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link WFG9}</td>
* <td>{@code WFG9_%D}</td>
* <td>Real</td>
* <td>Scalable to any number of objectives</td>
* </tr>
* <tr>
* <td>{@link ZDT1}</td>
* <td>{@code ZDT1}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link ZDT2}</td>
* <td>{@code ZDT2}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link ZDT3}</td>
* <td>{@code ZDT3}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link ZDT4}</td>
* <td>{@code ZDT4}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link ZDT5}</td>
* <td>{@code ZDT5}</td>
* <td>Binary</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link ZDT6}</td>
* <td>{@code ZDT6}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Belegundu}</td>
* <td>{@code Belegundu}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Binh}</td>
* <td>{@code Binh}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Binh2}</td>
* <td>{@code Binh2}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Binh3}</td>
* <td>{@code Binh3}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Binh4}</td>
* <td>{@code Binh4}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Fonseca}</td>
* <td>{@code Fonseca}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Fonseca2}</td>
* <td>{@code Fonseca2}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Jimenez}</td>
* <td>{@code Jimenez}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Kita}</td>
* <td>{@code Kita}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Kursawe}</td>
* <td>{@code Kursawe}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Laumanns}</td>
* <td>{@code Laumanns}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Lis}</td>
* <td>{@code Lis}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Murata}</td>
* <td>{@code Murata}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Obayashi}</td>
* <td>{@code Obayashi}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link OKA1}</td>
* <td>{@code OKA1}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link OKA2}</td>
* <td>{@code OKA2}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Osyczka}</td>
* <td>{@code Osyczka}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Osyczka2}</td>
* <td>{@code Osyczka2}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Poloni}</td>
* <td>{@code Poloni}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Quagliarella}</td>
* <td>{@code Quagliarella}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Rendon}</td>
* <td>{@code Rendon}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Rendon2}</td>
* <td>{@code Rendon2}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Schaffer}</td>
* <td>{@code Schaffer}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Schaffer2}</td>
* <td>{@code Schaffer2}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Srinivas}</td>
* <td>{@code Srinivas}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Tamaki}</td>
* <td>{@code Tamaki}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Tanaka}</td>
* <td>{@code Tanaka}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Viennet}</td>
* <td>{@code Viennet}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Viennet2}</td>
* <td>{@code Viennet2}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Viennet3}</td>
* <td>{@code Viennet3}</td>
* <td>Real</td>
* <td></td>
* </tr>
* <tr>
* <td>{@link Viennet4}</td>
* <td>{@code Viennet4}</td>
* <td>Real</td>
* <td></td>
* </tr>
* </table>
*/
public class StandardProblems extends ProblemProvider {
/**
* Constructs a problem provider for the standard set of test problems.
*/
public StandardProblems() {
super();
}
@Override
public Problem getProblem(String name) {
name = name.toUpperCase();
try {
if (name.startsWith("DTLZ1")) {
return new DTLZ1(Integer.parseInt(name.substring(6)));
} else if (name.startsWith("DTLZ2")) {
return new DTLZ2(Integer.parseInt(name.substring(6)));
} else if (name.startsWith("DTLZ3")) {
return new DTLZ3(Integer.parseInt(name.substring(6)));
} else if (name.startsWith("DTLZ4")) {
return new DTLZ4(Integer.parseInt(name.substring(6)));
} else if (name.startsWith("DTLZ7")) {
return new DTLZ7(Integer.parseInt(name.substring(6)));
} else if (name.startsWith("WFG1")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG1(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.startsWith("WFG2")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG2(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.startsWith("WFG3")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG3(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.startsWith("WFG4")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG4(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.startsWith("WFG5")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG5(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.startsWith("WFG6")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG6(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.startsWith("WFG7")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG7(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.startsWith("WFG8")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG8(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.startsWith("WFG9")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
return new WFG9(numberOfObjectives - 1, 10, numberOfObjectives);
} else if (name.equals("ZDT1")) {
return new ZDT1();
} else if (name.equals("ZDT2")) {
return new ZDT2();
} else if (name.equals("ZDT3")) {
return new ZDT3();
} else if (name.equals("ZDT4")) {
return new ZDT4();
} else if (name.equals("ZDT5")) {
return new ZDT5();
} else if (name.equals("ZDT6")) {
return new ZDT6();
} else if (name.equals("UF1")) {
return new UF1();
} else if (name.equals("UF2")) {
return new UF2();
} else if (name.equals("UF3")) {
return new UF3();
} else if (name.equals("UF4")) {
return new UF4();
} else if (name.equals("UF5")) {
return new UF5();
} else if (name.equals("UF6")) {
return new UF6();
} else if (name.equals("UF7")) {
return new UF7();
} else if (name.equals("UF8")) {
return new UF8();
} else if (name.equals("UF9")) {
return new UF9();
} else if (name.equals("UF10")) {
return new UF10();
} else if (name.equals("UF11")) {
return new UF11();
} else if (name.equals("UF12")) {
return new UF12();
} else if (name.equals("UF13")) {
return new UF13();
} else if (name.equals("CF1")) {
return new CF1();
} else if (name.equals("CF2")) {
return new CF2();
} else if (name.equals("CF3")) {
return new CF3();
} else if (name.equals("CF4")) {
return new CF4();
} else if (name.equals("CF5")) {
return new CF5();
} else if (name.equals("CF6")) {
return new CF6();
} else if (name.equals("CF7")) {
return new CF7();
} else if (name.equals("CF8")) {
return new CF8();
} else if (name.equals("CF9")) {
return new CF9();
} else if (name.equals("CF10")) {
return new CF10();
} else if (name.equals("LZ1")) {
return new LZ1();
} else if (name.equals("LZ2")) {
return new LZ2();
} else if (name.equals("LZ3")) {
return new LZ3();
} else if (name.equals("LZ4")) {
return new LZ4();
} else if (name.equals("LZ5")) {
return new LZ5();
} else if (name.equals("LZ6")) {
return new LZ6();
} else if (name.equals("LZ7")) {
return new LZ7();
} else if (name.equals("LZ8")) {
return new LZ8();
} else if (name.equals("LZ9")) {
return new LZ9();
} else if (name.equalsIgnoreCase("Belegundu")) {
return new Belegundu();
} else if (name.equalsIgnoreCase("Binh")) {
return new Binh();
} else if (name.equalsIgnoreCase("Binh2")) {
return new Binh2();
} else if (name.equalsIgnoreCase("Binh3")) {
return new Binh3();
} else if (name.equalsIgnoreCase("Binh4")) {
return new Binh4();
} else if (name.equalsIgnoreCase("Fonseca")) {
return new Fonseca();
} else if (name.equalsIgnoreCase("Fonseca2")) {
return new Fonseca2();
} else if (name.equalsIgnoreCase("Jimenez")) {
return new Jimenez();
} else if (name.equalsIgnoreCase("Kita")) {
return new Kita();
} else if (name.equalsIgnoreCase("Kursawe")) {
return new Kursawe();
} else if (name.equalsIgnoreCase("Laumanns")) {
return new Laumanns();
} else if (name.equalsIgnoreCase("Lis")) {
return new Lis();
} else if (name.equalsIgnoreCase("Murata")) {
return new Murata();
} else if (name.equalsIgnoreCase("Obayashi")) {
return new Obayashi();
} else if (name.equalsIgnoreCase("OKA1")) {
return new OKA1();
} else if (name.equalsIgnoreCase("OKA2")) {
return new OKA2();
} else if (name.equalsIgnoreCase("Osyczka")) {
return new Osyczka();
} else if (name.equalsIgnoreCase("Osyczka2")) {
return new Osyczka2();
} else if (name.equalsIgnoreCase("Poloni")) {
return new Poloni();
} else if (name.equalsIgnoreCase("Quagliarella")) {
return new Quagliarella();
} else if (name.equalsIgnoreCase("Rendon")) {
return new Rendon();
} else if (name.equalsIgnoreCase("Rendon2")) {
return new Rendon2();
} else if (name.equalsIgnoreCase("Schaffer")) {
return new Schaffer();
} else if (name.equalsIgnoreCase("Schaffer2")) {
return new Schaffer2();
} else if (name.equalsIgnoreCase("Srinivas")) {
return new Srinivas();
} else if (name.equalsIgnoreCase("Tamaki")) {
return new Tamaki();
} else if (name.equalsIgnoreCase("Tanaka")) {
return new Tanaka();
} else if (name.equalsIgnoreCase("Viennet")) {
return new Viennet();
} else if (name.equalsIgnoreCase("Viennet2")) {
return new Viennet2();
} else if (name.equalsIgnoreCase("Viennet3")) {
return new Viennet3();
} else if (name.equalsIgnoreCase("Viennet4")) {
return new Viennet4();
} else {
return null;
}
} catch (NumberFormatException e) {
return null;
}
}
@Override
public NondominatedPopulation getReferenceSet(String name) {
String filename = null;
name = name.toUpperCase();
try {
if (name.startsWith("DTLZ1")) {
int numberOfObjectives = Integer.parseInt(name.substring(6));
filename = "DTLZ1." + numberOfObjectives + "D.pf";
} else if (name.startsWith("DTLZ2")) {
int numberOfObjectives = Integer.parseInt(name.substring(6));
filename = "DTLZ2." + numberOfObjectives + "D.pf";
} else if (name.startsWith("DTLZ3")) {
int numberOfObjectives = Integer.parseInt(name.substring(6));
filename = "DTLZ3." + numberOfObjectives + "D.pf";
} else if (name.startsWith("DTLZ4")) {
int numberOfObjectives = Integer.parseInt(name.substring(6));
filename = "DTLZ4." + numberOfObjectives + "D.pf";
} else if (name.startsWith("DTLZ7")) {
int numberOfObjectives = Integer.parseInt(name.substring(6));
filename = "DTLZ7." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG1")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG1." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG2")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG2." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG3")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG3." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG4")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG4." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG5")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG5." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG6")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG6." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG7")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG7." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG8")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG8." + numberOfObjectives + "D.pf";
} else if (name.startsWith("WFG9")) {
int numberOfObjectives = Integer.parseInt(name.substring(5));
filename = "WFG9." + numberOfObjectives + "D.pf";
} else if (name.equals("ZDT1")) {
filename = "ZDT1.pf";
} else if (name.equals("ZDT2")) {
filename = "ZDT2.pf";
} else if (name.equals("ZDT3")) {
filename = "ZDT3.pf";
} else if (name.equals("ZDT4")) {
filename = "ZDT4.pf";
} else if (name.equals("ZDT5")) {
filename = "ZDT5.pf";
} else if (name.equals("ZDT6")) {
filename = "ZDT6.pf";
} else if (name.equals("UF1")) {
filename = "UF1.dat";
} else if (name.equals("UF2")) {
filename = "UF2.dat";
} else if (name.equals("UF3")) {
filename = "UF3.dat";
} else if (name.equals("UF4")) {
filename = "UF4.dat";
} else if (name.equals("UF5")) {
filename = "UF5.dat";
} else if (name.equals("UF6")) {
filename = "UF6.dat";
} else if (name.equals("UF7")) {
filename = "UF7.dat";
} else if (name.equals("UF8")) {
filename = "UF8.dat";
} else if (name.equals("UF9")) {
filename = "UF9.dat";
} else if (name.equals("UF10")) {
filename = "UF10.dat";
} else if (name.equals("UF11")) {
filename = "R2_DTLZ2_M5.dat";
} else if (name.equals("UF12")) {
filename = "R3_DTLZ3_M5.dat";
} else if (name.equals("UF13")) {
filename = "WFG1_M5.dat";
} else if (name.equals("CF1")) {
filename = "CF1.dat";
} else if (name.equals("CF2")) {
filename = "CF2.dat";
} else if (name.equals("CF3")) {
filename = "CF3.dat";
} else if (name.equals("CF4")) {
filename = "CF4.dat";
} else if (name.equals("CF5")) {
filename = "CF5.dat";
} else if (name.equals("CF6")) {
filename = "CF6.dat";
} else if (name.equals("CF7")) {
filename = "CF7.dat";
} else if (name.equals("CF8")) {
filename = "CF8.dat";
} else if (name.equals("CF9")) {
filename = "CF9.dat";
} else if (name.equals("CF10")) {
filename = "CF10.dat";
} else if (name.equals("LZ1")) {
filename = "LZ09_F1.pf";
} else if (name.equals("LZ2")) {
filename = "LZ09_F2.pf";
} else if (name.equals("LZ3")) {
filename = "LZ09_F3.pf";
} else if (name.equals("LZ4")) {
filename = "LZ09_F4.pf";
} else if (name.equals("LZ5")) {
filename = "LZ09_F5.pf";
} else if (name.equals("LZ6")) {
filename = "LZ09_F6.pf";
} else if (name.equals("LZ7")) {
filename = "LZ09_F7.pf";
} else if (name.equals("LZ8")) {
filename = "LZ09_F8.pf";
} else if (name.equals("LZ9")) {
filename = "LZ09_F9.pf";
} else if (name.equalsIgnoreCase("Belegundu")) {
filename = "Belegundu.pf";
} else if (name.equalsIgnoreCase("Binh")) {
filename = "Binh.pf";
} else if (name.equalsIgnoreCase("Binh2")) {
filename = "Binh2.pf";
} else if (name.equalsIgnoreCase("Binh3")) {
filename = "Binh3.pf";
} else if (name.equalsIgnoreCase("Binh4")) {
filename = "Binh4.pf";
} else if (name.equalsIgnoreCase("Fonseca")) {
filename = "Fonseca.pf";
} else if (name.equalsIgnoreCase("Fonseca2")) {
filename = "Fonseca2.pf";
} else if (name.equalsIgnoreCase("Jimenez")) {
filename = "Jimenez.pf";
} else if (name.equalsIgnoreCase("Kita")) {
filename = "Kita.pf";
} else if (name.equalsIgnoreCase("Kursawe")) {
filename = "Kursawe.pf";
} else if (name.equalsIgnoreCase("Laumanns")) {
filename = "Laumanns.pf";
} else if (name.equalsIgnoreCase("Lis")) {
filename = "Lis.pf";
} else if (name.equalsIgnoreCase("Murata")) {
filename = "Murata.pf";
} else if (name.equalsIgnoreCase("Obayashi")) {
filename = "Obayashi.pf";
} else if (name.equalsIgnoreCase("OKA1")) {
filename = "OKA1.pf";
} else if (name.equalsIgnoreCase("OKA2")) {
filename = "OKA2.pf";
} else if (name.equalsIgnoreCase("Osyczka")) {
filename = "Osyczka.pf";
} else if (name.equalsIgnoreCase("Osyczka2")) {
filename = "Osyczka2.pf";
} else if (name.equalsIgnoreCase("Poloni")) {
filename = "Poloni.pf";
} else if (name.equalsIgnoreCase("Quagliarella")) {
filename = "Quagliarella.pf";
} else if (name.equalsIgnoreCase("Rendon")) {
filename = "Rendon.pf";
} else if (name.equalsIgnoreCase("Rendon2")) {
filename = "Rendon2.pf";
} else if (name.equalsIgnoreCase("Schaffer")) {
filename = "Schaffer.pf";
} else if (name.equalsIgnoreCase("Schaffer2")) {
filename = "Schaffer2.pf";
} else if (name.equalsIgnoreCase("Srinivas")) {
filename = "Srinivas.pf";
} else if (name.equalsIgnoreCase("Tamaki")) {
filename = "Tamaki.pf";
} else if (name.equalsIgnoreCase("Tanaka")) {
filename = "Tanaka.pf";
} else if (name.equalsIgnoreCase("Viennet")) {
filename = "Viennet.pf";
} else if (name.equalsIgnoreCase("Viennet2")) {
filename = "Viennet2.pf";
} else if (name.equalsIgnoreCase("Viennet3")) {
filename = "Viennet3.pf";
} else if (name.equalsIgnoreCase("Viennet4")) {
filename = "Viennet4.pf";
} else {
return null;
}
return loadReferenceSet("pf/" + filename);
} catch (NumberFormatException e) {
return null;
} catch (IOException e) {
return null;
}
}
private NondominatedPopulation loadReferenceSet(String resource)
throws IOException {
File file = new File(resource);
if (file.exists()) {
return new NondominatedPopulation(PopulationIO.readObjectives(
file));
} else {
InputStream input = getClass().getResourceAsStream("/" + resource);
if (input == null) {
throw new FileNotFoundException(resource);
} else {
try {
return new NondominatedPopulation(
PopulationIO.readObjectives(new CommentedLineReader(
new InputStreamReader(input))));
} finally {
input.close();
}
}
}
}
}