package algorithms.geneticAlgorithm.holegGA; import java.awt.Color; import java.util.ArrayList; import algorithms.geneticAlgorithm.holegGA.Components.HolegGeneration; import classes.AbstractCpsObject; import classes.Category; import classes.CpsEdge; import classes.HolonBattery; import classes.HolonObject; import classes.HolonSwitch; import classes.Position; import ui.controller.Control; import ui.model.Model; public class GenAlgoInit { ParameterArray params = new ParameterArray(); Control controller; Model model; GenAlgoWindow window; public GenAlgoInit(Control controller, Model model){ this.controller = controller; this.model = model; } public void start(){ window = new GenAlgoWindow(controller, model); window.frame.setVisible(true); } public void evaluate(){ Thread t = new Thread(){ ArrayList> runHistory = new ArrayList>(); ArrayList avgFitness = new ArrayList(); ArrayList bestFitness = new ArrayList(); ArrayList maxFitness = new ArrayList(); ArrayList maxFound = new ArrayList(); int runs = 30; Double maxValue = 100.0; public void run(){ Evaluator plotAvg = new Evaluator("average from all parameters"); Evaluator plotBest = new Evaluator("best from all parameters"); plotAvg.initPlottedRendering("Average of all parameters"); plotBest.initPlottedRendering("Best of all parameters"); for(int b = 1; b <= 3; b++){ avgFitness = new ArrayList(); bestFitness = new ArrayList(); maxFitness = new ArrayList(); maxFound = new ArrayList(); ParameterArray params = getParameter(b); for(int j = 0; j < 100; j++){ avgFitness.add((double) 0); bestFitness.add(0.0); maxFitness.add(maxValue); maxFound.add(0.0); } Evaluator evalAvg = new Evaluator("average " + b); Evaluator evalBest = new Evaluator("best set " + b); Evaluator evalAvgAvg = new Evaluator("avgavg " + b); Evaluator evalAvgBest = new Evaluator("avgBest " + b); evalAvg.initRendering("Average of each run for set " + b); evalBest.initRendering("Best of each run for set " + b); evalAvgAvg.initRendering("Average of all runs for set " + b); evalAvgBest.initRendering("Best of all runs for set " + b); for(int i = 0; i < runs; i++){ GenAlgoWindow tmp = new GenAlgoWindow(controller,model); ArrayList oneRun = tmp.evaluationRun(params); ArrayList bestOneRun = new ArrayList(); ArrayList averageOneRun = new ArrayList(); ArrayList bestFoundOneRun = new ArrayList(); for(int k = 0; k < oneRun.size(); k++){ avgFitness.set(k, avgFitness.get(k)+oneRun.get(k).getAvgFittness()); bestFitness.set(k, bestFitness.get(k)+oneRun.get(k).getMaxFittness()); averageOneRun.add(oneRun.get(k).getAvgFittness()); bestOneRun.add(oneRun.get(k).getMaxFittness()); if(k != 0){ if(oneRun.get(k).getMaxFittness() > bestFoundOneRun.get(k-1)){ bestFoundOneRun.add(oneRun.get(k).getMaxFittness()); }else{ bestFoundOneRun.add(bestFoundOneRun.get(k-1)); } }else{ bestFoundOneRun.add(oneRun.get(k).getMaxFittness()); } maxFound.set(k, maxFound.get(k)+bestFoundOneRun.get(k)); } evalAvg.addSeries(averageOneRun, null, ""); evalBest.addSeries(bestFoundOneRun, null, ""); System.out.println("At run " + i); } for(int z = 0; z < 100; z++){ avgFitness.set(z, avgFitness.get(z)/runs); bestFitness.set(z, bestFitness.get(z)/runs); maxFound.set(z, maxFound.get(z)/runs); } evalAvgAvg.addSeries(avgFitness, Color.GRAY, ""); evalAvgBest.addSeries(maxFound, Color.BLUE, ""); plotAvg.addSeries(avgFitness, getColor(b), "Parameter Set "+ b); plotBest.addSeries(maxFound, getColor(b), "Parameter Set " + b); evalAvg.addSeries(maxFitness, Color.BLACK, "Maximum Fitness"); evalAvg.drawChart(); evalBest.addSeries(maxFitness, Color.BLACK, "Maximum Fitness"); evalBest.drawChart(); evalAvgAvg.addSeries(maxFitness, Color.BLACK, "Maximum Fitness"); evalAvgAvg.drawChart(); evalAvgBest.addSeries(maxFitness, Color.BLACK, "Maximum Fitness"); evalAvgBest.drawChart(); } plotAvg.addSeries(maxFitness, Color.BLACK, "Maximum Fitness"); plotAvg.drawChart(); plotBest.addSeries(maxFitness, Color.BLACK, "Maximum Fitness"); plotBest.drawChart(); } }; t.start(); } public Color getColor(int i){ if(i == 1){ return Color.BLUE; } if(i == 2){ return Color.GREEN; }else{ return Color.RED; } } public ParameterArray getParameter(int i){ if(i == 1){ return getParameter1(); } if(i == 2){ return getParameter2(); }else{ return getParameter3(); } } public ParameterArray getParameter1(){ ParameterArray params = new ParameterArray(); params = getSameParameters(); params.set(params.MAX_EDGES, 39); params.set(params.POPULATION_SIZE, 100); params.set(params.TOURNAMENT_SIZE, 50); params.set(params.TOURNAMENT_PROB, 0.15); params.set(params.EDGE_MUTATION_PROB, 0.01); params.set(params.WILDCARD_MUTATION_PROB, 0.01); return params; } public ParameterArray getParameter2(){ ParameterArray params = new ParameterArray(); params = getSameParameters(); params.set(params.MAX_EDGES, 39); params.set(params.POPULATION_SIZE, 100); params.set(params.TOURNAMENT_SIZE, 50); params.set(params.TOURNAMENT_PROB, 0.01); params.set(params.EDGE_MUTATION_PROB, 0.01); params.set(params.WILDCARD_MUTATION_PROB, 0.01); return params; } public ParameterArray getParameter3(){ ParameterArray params = new ParameterArray(); params = getSameParameters(); params.set(params.MAX_EDGES, 39); params.set(params.POPULATION_SIZE, 100); params.set(params.TOURNAMENT_SIZE, 1); params.set(params.TOURNAMENT_PROB, 1.0); params.set(params.EDGE_MUTATION_PROB, 0.01); params.set(params.WILDCARD_MUTATION_PROB, 0.01); return params; } public ParameterArray getSameParameters(){ ParameterArray params = new ParameterArray(); params.set(params.MAX_EDGES, 50); params.set(params.EDIT_EDGES, true); params.set(params.POPULATION_SIZE, 100); params.set(params.TOURNAMENT_SIZE, 30); params.set(params.EDGE_BREAK_AMOUNT, 4); params.set(params.SIM_ITERATIONS, 1); params.set(params.EDGE_MUTATION_PROB, 0.0); params.set(params.SUPPLIED_POINTS, 10.0); params.set(params.OVERSUPPLIED_POINTS, 10.0); params.set(params.UNDERSUPPLIED_POINTS, -10.0); params.set(params.LENGTH_POINTS, -0.5); params.set(params.WILDCARD_USAGE, -5.0); params.set(params.WILDCARD_MUTATION_PROB, 0.0); params.set(params.PARTIALSUPPLIED_POINTS, 3.0); params.set(params.OVERPRODUCTION, -10.0); params.set(params.NODES_IN_WILDCARDS, true); return params; } }