diff --git a/src/main/java/Enums/VisualizerMethods.java b/src/main/java/Enums/VisualizerMethods.java index 9bb67731d50c36d5fa8b88f9af46f6cebc33b00b..ea0502a72243bc606402d1f968e975eaa114ba81 100644 --- a/src/main/java/Enums/VisualizerMethods.java +++ b/src/main/java/Enums/VisualizerMethods.java @@ -4,5 +4,6 @@ public enum VisualizerMethods { Console, Image, Video, - Log + Log, + Generation } diff --git a/src/main/java/MainClasses/Config.java b/src/main/java/MainClasses/Config.java index adebb9c55d3020977199ece05247c60b1b597c46..40ae168202a1040c2c22d71895ed0199ffb5fc2d 100644 --- a/src/main/java/MainClasses/Config.java +++ b/src/main/java/MainClasses/Config.java @@ -176,6 +176,9 @@ public class Config { case "log": visualizers[i] = VisualizerMethods.Log; break; + case "generation": + visualizers[i] = VisualizerMethods.Generation; + break; } } diff --git a/src/main/java/MainClasses/GeneticAlgorithm.java b/src/main/java/MainClasses/GeneticAlgorithm.java index b483b43a141f25d17dbe1632178c87e08c8e813d..b3441a420663c308c01ea8cddecbe14a6703e2b2 100644 --- a/src/main/java/MainClasses/GeneticAlgorithm.java +++ b/src/main/java/MainClasses/GeneticAlgorithm.java @@ -14,6 +14,7 @@ import Selectors.Tournament; import Visualization.Visualizers.BestFoldingToConsole; import Visualization.Visualizers.BestFoldingToImage; +import Visualization.Visualizers.GenerationOverviewToConsole; import Visualization.Visualizers.GenerationProgressToLog; import java.io.IOException; import java.nio.file.Files; @@ -88,6 +89,9 @@ public class GeneticAlgorithm { }else if (vm.equals(VisualizerMethods.Log)) { this.visualizers[j] = new GenerationProgressToLog(isHydrophobic, config); j++; + }else if (vm.equals(VisualizerMethods.Generation)) { + this.visualizers[j] = new GenerationOverviewToConsole(isHydrophobic, config); + j++; } } @@ -142,42 +146,14 @@ public class GeneticAlgorithm { evaluateGeneration(config.getTotalGenerations()-1); } - private int evaluateGeneration(int gen) { - // Evaluate current generation - System.out.println("Generation " + gen + ":"); - - double bestFitness = 0; - int bestIndex = 0; - this.totalFitness = 0; - for (int i = 0; i < config.getPopulationSize(); i++) { + private void evaluateGeneration(int gen) { + for (int i = 0; i < population.length; i++) { this.population[i] = this.evaluator.evaluateFitness(this.population[i]); - this.fitness[i] = this.population[i].getFitness(); - this.totalFitness += this.fitness[i]; - - if (this.fitness[i] > bestFitness) { - bestFitness = this.fitness[i]; - bestIndex = i; - } } for (Visualizer v : this.visualizers) { - //TODO Print real bond and overlap amount v.drawProtein(this.population, this); } - - //TODO Print real bond and overlap amount - System.out.println("The fitness is: " + bestFitness - + " [hydrophobicBonds = " + -1 + " | overlaps = " + -1 + "]"); - - // Save the overall best - if (bestFitness >= this.overallBestFitness) { - this.overallBestFitness = bestFitness; - this.overallBest = new Candidate(this.population[bestIndex].getFolding()); - } - - double averageFitness = this.totalFitness / config.getPopulationSize(); - - return bestIndex; } public int getMaxH() { diff --git a/src/main/java/Visualization/Visualizers/GenerationOverviewToConsole.java b/src/main/java/Visualization/Visualizers/GenerationOverviewToConsole.java new file mode 100644 index 0000000000000000000000000000000000000000..8e251e88b6f5c0152af9017183f09f99be934285 --- /dev/null +++ b/src/main/java/Visualization/Visualizers/GenerationOverviewToConsole.java @@ -0,0 +1,43 @@ +package Visualization.Visualizers; + +import Evaluators.EvaluatorNESW; +import Interfaces.Visualizer; +import MainClasses.Candidate; +import MainClasses.Config; +import MainClasses.GeneticAlgorithm; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class GenerationOverviewToConsole implements Visualizer { + + final int[] isHydrophobic; + Config config; + + EvaluatorNESW bondsOverlapsEvaluator; + + public GenerationOverviewToConsole(int[] isHydrophobic, Config config) { + this.isHydrophobic = isHydrophobic; + this.config = config; + bondsOverlapsEvaluator = new EvaluatorNESW(1,isHydrophobic); + } + + @Override + public void drawProtein(Candidate[] generation, GeneticAlgorithm geneticAlgorithm) { + //TODO This should be done in the new Generation class + Candidate bestCandidateOfGeneration = generation[0]; + for(Candidate candidate: generation){ + if(candidate.getFitness() > bestCandidateOfGeneration.getFitness()){ + bestCandidateOfGeneration = candidate; + } + } + + int bonds = bondsOverlapsEvaluator.evaluateBonds(bestCandidateOfGeneration); + int overlaps = bondsOverlapsEvaluator.evaluateBonds(bestCandidateOfGeneration); + + System.out.println("Generation " + geneticAlgorithm.generation + ":"); + System.out.println("The fitness is: " + + bestCandidateOfGeneration.getFitness() + + " [hydrophobicBonds = " + bonds + " | overlaps = " + overlaps + "]"); + } +}