diff --git a/config.properties b/config.properties
index b5a083b..1506879 100644
--- a/config.properties
+++ b/config.properties
@@ -8,8 +8,8 @@ PROBLEM = DPM
# MODEL_TEMPLATE_FILE = models/FX/fxSmall.pm
# PROPERTIES_FILE = models/FX/fxSmall.pctl
#DPM
- MODEL_TEMPLATE_FILE = models/DPMParam/dpmSmall.pm
- PROPERTIES_FILE = models/DPMParam/dpmSmall.csl
+ MODEL_TEMPLATE_FILE = models/DPM/dpm.pm
+ PROPERTIES_FILE = models/DPM/dpm.csl
#Zeroconf
#MODEL_TEMPLATE_FILE = models/Zeroconf/zeroconf.pm
#PROPERTIES_FILE = models/Zeroconf/zeroconf.pctl
@@ -35,9 +35,9 @@ PROBLEM = DPM
POPULATION_SIZE = 50
-#Step 4: Set the maximum number of evaluations
+#Step 4: Set the maximum number of evaluations and when to save periodically
MAX_EVALUATIONS = 1000
-
+ EVALUATION_INTERVAL=100
#Step 5: Set the number of processors (for parallel execution)
PROCESSORS = 1
@@ -45,13 +45,13 @@ PROBLEM = DPM
#Step 6: Set plotting settings
#Note: requires Python3
- PLOT_PARETO_FRONT = true
+ PLOT_PARETO_FRONT = false
PYTHON3_DIRECTORY = /usr/local/bin/python3
#Step 7: Set additional settings
VERBOSE = false
-
+ RELOAD = true
#Step 8: Run
# Within your main class do:
diff --git a/pom.xml b/pom.xml
index 470e388..ff948a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
org
EvoChecker
jar
- 1.1.0
+ 3
EvoChecker
http://maven.apache.org
diff --git a/src/main/java/evochecker/EvoChecker.java b/src/main/java/evochecker/EvoChecker.java
index 9625c1a..35e01f5 100644
--- a/src/main/java/evochecker/EvoChecker.java
+++ b/src/main/java/evochecker/EvoChecker.java
@@ -88,7 +88,8 @@ public class EvoChecker {
/** Pareto set filename*/
private String paretoSetFile;
-
+ /** Old solutions to load*/
+ private String initialSolutions;
public EvoChecker() {
@@ -122,31 +123,65 @@ public void setConfigurationFile(String configFile) {
public void start() {
long start = System.currentTimeMillis();
+ int max_eval=Integer.parseInt(Utility.getProperty(Constants.MAX_EVALUATIONS_KEYWORD));
+ int interval=Integer.parseInt(Utility.getProperty(Constants.EVALUATION_INTERVAL_KEYWORD));
+
+ if (intervalmax_eval)
+ {
+ Utility.setProperty(Constants.MAX_EVALUATIONS_KEYWORD, Integer.toString(max_eval-i));
+ }
- //1) initialise problem
- initializeProblem();
-
- //2) initialise algorithm
- initialiseAlgorithm();
-
- //3) initialise data structures and variables for saving data
- String outputDir = initialiseOutputData();
+ if (i>0)
+ {
+ try
+ {
+ Utility.setProperty(Constants.RELOAD_KEYWORD, "true");
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
- //4) execute and save results
- SolutionSet solutions = execute();
+ //0) check configuration script
+ ConfigurationChecker.checkConfiguration();
- long end = System.currentTimeMillis();
+ //1) initialise problem
+ initializeProblem();
+
+ //2) initialise algorithm
+ initialiseAlgorithm();
+
+ //3) initialise data structures and variables for saving data
+ String outputDir = initialiseOutputData();
+ //4) execute and save results
+ SolutionSet solutions = execute();
- //5) save solutions
- exportResults(outputDir, solutions);
-
- //6) close down
- closeDown();
-
- System.err.printf("Time:\t%s\n", (end - start)/1000.0);
+
+ //5) save solutions
+ exportResults(outputDir, solutions);
+ long end = System.currentTimeMillis();
+
+ //6) close down
+ closeDown();
+
+ System.err.printf("Time:\t%s\n", (end - start)/1000.0);
+ }
}
catch (Exception e) {
e.printStackTrace();
diff --git a/src/main/java/evochecker/auxiliary/Constants.java b/src/main/java/evochecker/auxiliary/Constants.java
index 1967617..f9691e6 100644
--- a/src/main/java/evochecker/auxiliary/Constants.java
+++ b/src/main/java/evochecker/auxiliary/Constants.java
@@ -19,79 +19,85 @@ private Constants() {
/** Keyword for probabilistic model template*/
- public static final String MODEL_FILE_KEYWORD = "MODEL_TEMPLATE_FILE";
+ public static final String MODEL_FILE_KEYWORD = "MODEL_TEMPLATE_FILE";
/** Keyword for probabilistic properties file*/
- public static final String PROPERTIES_FILE_KEYWORD = "PROPERTIES_FILE";
+ public static final String PROPERTIES_FILE_KEYWORD = "PROPERTIES_FILE";
/** Keyword for properties */
- public static final String OBJECTIVES_KEYWORD = "OBJECTIVES";
+ public static final String OBJECTIVES_KEYWORD = "OBJECTIVES";
/** Keyword for algorithm*/
- public static final String ALGORITHM_KEYWORD = "ALGORITHM";
+ public static final String ALGORITHM_KEYWORD = "ALGORITHM";
/** Keyword for tolerance*/
- public static final String TOLERANCE_KEYWORD = "TOLERANCE";
+ public static final String TOLERANCE_KEYWORD = "TOLERANCE";
/** Keyword for multiple tolerance values*/
- public static final String TOLERANCES_KEYWORD = "TOLERANCES";
+ public static final String TOLERANCES_KEYWORD = "TOLERANCES";
/** Keyword for multiple runs */
- public static final String RUNS_KEYWORD = "RUNS";
+ public static final String RUNS_KEYWORD = "RUNS";
/** Keyword for epsilon*/
- public static final String EPSILON_KEYWORD = "EPSILON";
+ public static final String EPSILON_KEYWORD = "EPSILON";
/** Keyword for multiple epsilon values*/
- public static final String EPSILONS_KEYWORD = "EPSILONS";
+ public static final String EPSILONS_KEYWORD = "EPSILONS";
/** Keyword for problem name*/
- public static final String PROBLEM_KEYWORD = "PROBLEM";
+ public static final String PROBLEM_KEYWORD = "PROBLEM";
/** Keyword for sensitivity*/
- public static final String SENSITIVITY_KEYWORD = "SENSITIVITY";
+ public static final String SENSITIVITY_KEYWORD = "SENSITIVITY";
/** Keyword for maximum evaluations*/
- public static final String MAX_EVALUATIONS_KEYWORD = "MAX_EVALUATIONS";
+ public static final String MAX_EVALUATIONS_KEYWORD = "MAX_EVALUATIONS";
+
+ /** Keyword for evaluation intervals*/
+ public static final String EVALUATION_INTERVAL_KEYWORD = "EVALUATION_INTERVAL";
+
+ /** Keyword for reloading flag*/
+ public static final String RELOAD_KEYWORD = "RELOAD";
/** Keyword for population size*/
- public static final String POPULATION_SIZE_KEYWORD = "POPULATION_SIZE";
+ public static final String POPULATION_SIZE_KEYWORD = "POPULATION_SIZE";
/** Keyword for processors*/
- public static final String PROCESSORS_KEYWORD = "PROCESSORS";
+ public static final String PROCESSORS_KEYWORD = "PROCESSORS";
/** Keyword for initial port number*/
- public static final String INITIAL_PORT_KEYWORD = "INIT_PORT";
+ public static final String INITIAL_PORT_KEYWORD = "INIT_PORT";
/** Keyword for initial JVM*/
- public static final String JAVA_KEYWORD = "JAVA";
+ public static final String JAVA_KEYWORD = "JAVA";
/** Keyword for interval */
- public static final String INTERVAL_KEYWORD = "INTERVAL";
+ public static final String INTERVAL_KEYWORD = "INTERVAL";
/** Keyword for dominance relation */
- public static final String DOMINANCE_KEYWORD = "DOMINANCE";
+ public static final String DOMINANCE_KEYWORD = "DOMINANCE";
/** Keyword for errors */
- public static final String ERRORS_KEYWORD = "ERRORS";
+ public static final String ERRORS_KEYWORD = "ERRORS";
/** Keyword for messages to be shown on the UI */
- public static final String MESSAGE_KEYWORD = "MESSAGE";
+ public static final String MESSAGE_KEYWORD = "MESSAGE";
/** Keyword for finishing execution */
- public static final String DONE_KEYWORD = "DONE";
+ public static final String DONE_KEYWORD = "DONE";
/** Keyword for graph path*/
- public static final String GRAPH_KEYWORD = "GRAPH";
+ public static final String GRAPH_KEYWORD = "GRAPH";
/** Keyword for output directory*/
- public static final String OUTPUT_DIR_KEYWORD = "OUTPUT_DIR";
+ public static final String OUTPUT_DIR_KEYWORD = "OUTPUT_DIR";
/** Keyword for output file suffix*/
- public static final String OUTPUT_FILE_SUFFIX = "OUTPUT_FILE_SUFFIX";
+ public static final String OUTPUT_FILE_SUFFIX = "OUTPUT_FILE_SUFFIX";
/** Keyword for model checking engine*/
- public static final String MODEL_CHECKING_ENGINE = "MODEL_CHECKING_ENGINE";
+ public static final String MODEL_CHECKING_ENGINE = "MODEL_CHECKING_ENGINE";
public static final String MODEL_CHECKING_ENGINE_DEFAULT = "libs/PrismExecutor.jar";
/** Keyword for libraries required for running the model checking engine*/
@@ -121,31 +127,31 @@ private Constants() {
/** Algorithms currently supported by our implementation*/
public static enum ALGORITHM{
- NSGAII,
- SPEA2,
- MOCELL,
- RANDOM
- ;
- }
+ NSGAII,
+ SPEA2,
+ MOCELL,
+ RANDOM
+ ;
+ }
/** Dominance relations currently supported by our implementation*/
public static enum DOMINANCE{
- eDominanceWorstCaseDominance ("evochecker.genetic.jmetal.util.eDominanceWorstCaseDominanceComparator"),
- eDominanceRevisedWorstCaseDominance ("evochecker.genetic.jmetal.util.eDominanceRevisedWorstCaseDominanceComparator")
- ;
-
-
- private String comparatorPath;
-
- DOMINANCE(String path){
-// try {
-// Class clazz = Class.forName(path);
-// comparator = (RegionDominanceComparator)clazz.newInstance();
-// } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
-// e.printStackTrace();
-// }
- this.comparatorPath = path;
-// System.out.println(comparatorPath +"\t"+ path);
- }
+ eDominanceWorstCaseDominance ("evochecker.genetic.jmetal.util.eDominanceWorstCaseDominanceComparator"),
+ eDominanceRevisedWorstCaseDominance ("evochecker.genetic.jmetal.util.eDominanceRevisedWorstCaseDominanceComparator")
+ ;
+
+
+ private String comparatorPath;
+
+ DOMINANCE(String path){
+// try {
+// Class clazz = Class.forName(path);
+// comparator = (RegionDominanceComparator)clazz.newInstance();
+// } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
+// e.printStackTrace();
+// }
+ this.comparatorPath = path;
+// System.out.println(comparatorPath +"\t"+ path);
+ }
}
}
\ No newline at end of file
diff --git a/src/main/java/evochecker/genetic/jmetal/metaheuristics/pNSGAII.java b/src/main/java/evochecker/genetic/jmetal/metaheuristics/pNSGAII.java
index ed7fb46..71858ea 100644
--- a/src/main/java/evochecker/genetic/jmetal/metaheuristics/pNSGAII.java
+++ b/src/main/java/evochecker/genetic/jmetal/metaheuristics/pNSGAII.java
@@ -21,6 +21,10 @@
package evochecker.genetic.jmetal.metaheuristics;
import java.util.List;
+import java.util.ArrayList;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
import evochecker.evaluator.IParallelEvaluator;
import jmetal.core.Algorithm;
@@ -28,11 +32,18 @@
import jmetal.core.Problem;
import jmetal.core.Solution;
import jmetal.core.SolutionSet;
+import jmetal.core.Variable;
import jmetal.qualityIndicator.QualityIndicator;
import jmetal.util.Distance;
import jmetal.util.JMException;
import jmetal.util.Ranking;
import jmetal.util.comparators.CrowdingComparator;
+import evochecker.genetic.jmetal.encoding.ArrayReal;
+import evochecker.genetic.jmetal.encoding.ArrayInt;
+import java.io.File;
+import evochecker.auxiliary.Constants;
+import evochecker.auxiliary.FileUtil;
+import evochecker.auxiliary.Utility;
/**
* Implementation of NSGA-II.
@@ -103,13 +114,107 @@ public SolutionSet execute() throws JMException, ClassNotFoundException {
crossoverOperator = operators_.get("crossover");
selectionOperator = operators_.get("selection");
+ String set="";
+ List lines = new ArrayList();
+ if (Boolean.parseBoolean(Utility.getProperty(Constants.RELOAD_KEYWORD)))
+ {
+ // Find most recent Pareto Set
+ String problem_string=Utility.getProperty(Constants.PROBLEM_KEYWORD).toUpperCase();
+ String path="./data/"+problem_string+"/NSGAII/";
+ File source = new File(path);
+ String[] filelist=source.list();
+
+ long modified=0;
+
+ for(String str: filelist)
+ {
+ if (str.split("_")[4].equals("Set"))
+ {
+ File file= new File(path+str);
+ long time=file.lastModified();
+ if (time>modified)
+ {
+ set=str;
+ modified=time;
+ }
+ }
+ }
+
+ // Print previously found Set to be used
+ if (!(set.equals("")))
+ {
+ System.out.println("Loading previous Pareto Set: "+set);
+ try
+ {
+ BufferedReader set_reader = new BufferedReader(new FileReader(path+set));
+ String line;
+ while((line=set_reader.readLine())!=null)
+ {
+ lines.add(line);
+ // System.out.println(line);
+ }
+ set_reader.close();
+ } catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
// Create the initial solutionSet
Solution newSolution;
for (int i = 0; i < populationSize; i++) {
newSolution = new Solution(problem_);
+
+ // Change initial population to previously found set (if exists)
+ if (!(set.equals("")))
+ {
+ if (i solutionList = parallelEvaluator_.parallelEvaluation() ;
for (Solution solution : solutionList) {
population.add(solution) ;
@@ -120,8 +225,8 @@ public SolutionSet execute() throws JMException, ClassNotFoundException {
// Generations
while (evaluations < maxEvaluations) {
- System.out.println("Evaluations:\t" + evaluations);
-
+ System.out.println("Evaluations:\t" + evaluations);
+
// Create the offSpring solutionSet
offspringPopulation = new SolutionSet(populationSize);
Solution[] parents = new Solution[2];
@@ -135,14 +240,14 @@ public SolutionSet execute() throws JMException, ClassNotFoundException {
mutationOperator.execute(offSpring[1]);
parallelEvaluator_.addSolutionForEvaluation(offSpring[0]) ;
parallelEvaluator_.addSolutionForEvaluation(offSpring[1]) ;
- } // if
- } // for
+ }
+ }
List solutions = parallelEvaluator_.parallelEvaluation() ;
for(Solution solution : solutions) {
offspringPopulation.add(solution);
- evaluations++;
+ evaluations++;
}
// Create the solutionSet union of solutionSet and offSpring
@@ -202,15 +307,15 @@ public SolutionSet execute() throws JMException, ClassNotFoundException {
-// //Save the pareto set every 25% evaluations
-// if (maxEvaluations*times/4 <= evaluations){
-// System.out.println("Saving Pareto set");
-// Ranking rank = new Ranking(population);
-// SolutionSet paretoSet = rank.getSubfront(0);
-// paretoSet.printVariablesToFile("data/VAR_NSGAII"+times);
-// paretoSet.printObjectivesToFile("data/FUN_NSGAII"+times);
-// times ++;
-// }
+// //Save the pareto set every 25% evaluations
+// if (maxEvaluations*times/4 <= evaluations){
+// System.out.println("Saving Pareto set");
+// Ranking rank = new Ranking(population);
+// SolutionSet paretoSet = rank.getSubfront(0);
+// paretoSet.printVariablesToFile("data/VAR_NSGAII"+times);
+// paretoSet.printObjectivesToFile("data/FUN_NSGAII"+times);
+// times ++;
+// }
} // while