123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- 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<ArrayList<HolegGeneration>> runHistory = new ArrayList<ArrayList<HolegGeneration>>();
- ArrayList<Double> avgFitness = new ArrayList<Double>();
- ArrayList<Double> bestFitness = new ArrayList<Double>();
- ArrayList<Double> maxFitness = new ArrayList<Double>();
- ArrayList<Double> maxFound = new ArrayList<Double>();
- 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<Double>();
- bestFitness = new ArrayList<Double>();
- maxFitness = new ArrayList<Double>();
- maxFound = new ArrayList<Double>();
- 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<HolegGeneration> oneRun = tmp.evaluationRun(params);
- ArrayList<Double> bestOneRun = new ArrayList<Double>();
- ArrayList<Double> averageOneRun = new ArrayList<Double>();
- ArrayList<Double> bestFoundOneRun = new ArrayList<Double>();
- 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;
-
- }
-
- }
|