Skip to content
Snippets Groups Projects
Commit 75cd94d9 authored by Lennart Eichhorn's avatar Lennart Eichhorn
Browse files

Changed Config to load directories and a jobname, instead of filenames. Closes #3

parent 391da4fd
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,8 @@ import java.awt.*;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
public class Config {
......@@ -19,7 +21,6 @@ public class Config {
private String encodingVariant;
private int seed;
private int populationSize;
private int totalGenerations;
private InitializationMethods initializationMethod;
......@@ -37,10 +38,12 @@ public class Config {
private double crossoverMinimalChance; // -> 0.01% is not worth mutating for
private double crossoverMultiplier;
private String logfile;
//TODO Create directories if they do not exist
private VisualizerMethods[] visualizers;
private String imageSequencePath;
private String videoPathAndFile;
private String jobName;
private String imageSequenceDirectory;
private String videoDirectory;
private String logfileDirectory;
private int imageFps;
private int imagesToFpsIncrease;
private int imageFpsMax;
......@@ -147,7 +150,15 @@ public class Config {
crossoverMultiplier = Double.parseDouble(this.properties.getProperty("crossoverMultiplier"));
// Output settings
logfile = this.properties.getProperty("logfilePath");
if(properties.containsKey("jobName")){
jobName = this.properties.getProperty("jobName");
}else{
SimpleDateFormat formatter = new SimpleDateFormat("ddMMyyyyHHmmss");
Date date = new Date();
jobName = formatter.format(date);
}
logfileDirectory = this.properties.getProperty("logfileDirectory");
String[] visualizersToUse = this.properties.getProperty("visualizerType").split(",");
visualizers = new VisualizerMethods[visualizersToUse.length];
......@@ -165,8 +176,8 @@ public class Config {
}
}
imageSequencePath = this.properties.getProperty("imageSequencePath");
videoPathAndFile = this.properties.getProperty("videoPathAndFile");
imageSequenceDirectory = this.properties.getProperty("imageSequenceDirectory");
videoDirectory = this.properties.getProperty("videoDirectory");
imageFps = Integer.parseInt(this.properties.getProperty("imgFps"));
imagesToFpsIncrease = Integer.parseInt(this.properties.getProperty("imagesToFpsIncrease"));
imageFpsMax = Integer.parseInt(this.properties.getProperty("imgFpsMax"));
......@@ -245,20 +256,24 @@ public class Config {
return crossoverMultiplier;
}
public String getLogfile() {
return logfile;
public String getJobName() {
return jobName;
}
public String getLogfileDirectory() {
return logfileDirectory;
}
public VisualizerMethods[] getVisualizers() {
return visualizers;
}
public String getImageSequencePath() {
return imageSequencePath;
public String getImageSequenceDirectory() {
return imageSequenceDirectory;
}
public String getVideoPathAndFile() {
return videoPathAndFile;
public String getVideoDirectory() {
return videoDirectory;
}
public int getImageFps() {
......
......@@ -11,15 +11,13 @@ import Mutators.SinglePoint;
import Selectors.FitnessProportional;
import Selectors.OnlyBest;
import Selectors.Tournament;
import Visualization.Visualizers.VisualizerNESWtoConsole;
import Visualization.Visualizers.VisualizerNESWtoFile;
import Visualization.Visualizers.PrintFoldingToConsole;
import Visualization.Visualizers.PrintFoldingToFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class GeneticAlgorithm {
......@@ -42,8 +40,6 @@ public class GeneticAlgorithm {
Evaluator evaluator;
Visualizer[] visualizers;
String jobName;
// Initialize with protein
public GeneticAlgorithm (int[] protein, Config config) {
this.isHydrophobic = protein;
......@@ -57,10 +53,6 @@ public class GeneticAlgorithm {
this.fitness = new double[config.getPopulationSize()];
this.overallBestFitness = 0;
//TODO Maybe specify jobName in config
SimpleDateFormat formatter = new SimpleDateFormat("ddMMyyyyHHmmss");
Date date = new Date();
jobName = formatter.format(date);
}
private void initializeSettings() {
......@@ -83,10 +75,10 @@ public class GeneticAlgorithm {
int j = 0;
for (VisualizerMethods vm : config.getVisualizers()) {
if (vm.equals(VisualizerMethods.Console)) {
this.visualizers[j] = new VisualizerNESWtoConsole(isHydrophobic, config);
this.visualizers[j] = new PrintFoldingToConsole(isHydrophobic, config);
j++;
} else if (vm.equals(VisualizerMethods.Image)) {
this.visualizers[j] = new VisualizerNESWtoFile(isHydrophobic, config);
this.visualizers[j] = new PrintFoldingToFile(isHydrophobic, config);
j++;
}
}
......@@ -129,7 +121,10 @@ public class GeneticAlgorithm {
private void clearLog() {
String content = "Generation\tAverage Fitness\tBest Fitness\tOverall Best Fitness\tBonds\tOverlaps\n";
try {
Files.write(Paths.get(config.getLogfile()), content.getBytes());
//TODO This does not belong here
Files.createDirectories(Paths.get(config.getLogfileDirectory()));
String logfilePath = config.getLogfileDirectory() + "/" + config.getJobName() + ".txt";
Files.write(Paths.get(logfilePath), content.getBytes());
} catch (IOException e) {
e.printStackTrace();
......@@ -168,7 +163,8 @@ public class GeneticAlgorithm {
}
for (Visualizer v : this.visualizers) {
v.setFilename(String.format("%s_gen_%d.png", jobName, gen));
String imagePath = config.getImageSequenceDirectory() + "/" + config.getJobName() + "_" + gen + ".png";
v.setFilename(imagePath);
//TODO Print real bond and overlap amount
v.drawProtein(this.population[bestIndex].getVertices(), bestFitness, -1, -1, gen);
}
......@@ -191,7 +187,8 @@ public class GeneticAlgorithm {
-1);
try {
Files.write(Paths.get(config.getLogfile()), log.getBytes(), StandardOpenOption.APPEND);
String logfilePath = config.getLogfileDirectory() + "/" + config.getJobName() + ".txt";
Files.write(Paths.get(logfilePath), log.getBytes(), StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
......
......@@ -20,7 +20,8 @@ public class Main {
boolean imagesRefreshed = Arrays.asList(config.getVisualizers()).contains(VisualizerMethods.Image);
boolean videoEnabled = Arrays.asList(config.getVisualizers()).contains(VisualizerMethods.Video);
if (imagesRefreshed && videoEnabled){
VideoCreator.createVideo(config.getImageSequencePath(), config.getVideoPathAndFile(),
String videoPath = config.getVideoDirectory() + "/" + config.getJobName() + ".mp4";
VideoCreator.createVideo(config.getImageSequenceDirectory(), videoPath,
config.getImageFps(), config.getImagesToFpsIncrease(), config.getImageFpsMax(),
ga.getMaxH(), ga.getMaxW(), config.isZoom());
}
......
......@@ -13,14 +13,14 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
public class VisualizerNESWtoConsole implements Visualizer {
public class PrintFoldingToConsole implements Visualizer {
int maxHeight;
int maxWidth;
final int[] isHydrophobic;
Config config;
public VisualizerNESWtoConsole(int[] isHydrophobic, Config config) {
public PrintFoldingToConsole(int[] isHydrophobic, Config config) {
this.maxHeight = 0;
this.maxWidth = 0;
this.isHydrophobic = isHydrophobic;
......
......@@ -13,7 +13,7 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
public class VisualizerNESWtoFile implements Visualizer {
public class PrintFoldingToFile implements Visualizer {
String folder;
String filename;
......@@ -28,8 +28,10 @@ public class VisualizerNESWtoFile implements Visualizer {
final int[] isHydrophobic;
Config config;
public VisualizerNESWtoFile(int[] isHydrophobic, Config config) {
this.folder = config.getImageSequencePath();
public PrintFoldingToFile(int[] isHydrophobic, Config config) {
//TODO This is not really needed
//this.folder = config.getImageSequenceDirectory();
this.folder = "";
this.filename = "image.png"; // Default
this.maxHeight = 0;
......@@ -140,7 +142,8 @@ public class VisualizerNESWtoFile implements Visualizer {
if (!new File(folder).exists()) new File(folder).mkdirs();
try {
ImageIO.write(image, "png", new File(folder + File.separator + filename));
//ImageIO.write(image, "png", new File(folder + File.separator + filename));
ImageIO.write(image, "png", new File(filename));
} catch (IOException e) {
e.printStackTrace();
System.exit(0);
......
......@@ -42,14 +42,16 @@
### Output settings
# Path and filename for the log file, always active
logfilePath = log.txt
# Type(s) of visualization to enable, separated with comma [console / image / video]
visualizerType = image,video
# Path for the image sequence
imageSequencePath = ./visualization/series
# Path and filename for the resulting video file
videoPathAndFile = ./visualization/video.mp4
# Name of the job, filenames will be based on this name. If left empty a timestamp is used
jobName = example1
# Directory for the image sequence
imageSequenceDirectory = visualization/series
# Directory for the resulting video file
videoDirectory = visualization
# Directory for the log file, always active
logfileDirectory = log
# Frames per second in the beginning of the video
imgFps = 10
# Number of images until fps increases by one
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment