Skip to content
Snippets Groups Projects
Commit f1fd284f authored by Bernhard Johannes Berger's avatar Bernhard Johannes Berger
Browse files

Changed OL configuration to support different optimisation algortithms in the future.

parent 4321d1fa
No related branches found
No related tags found
No related merge requests found
Pipeline #243865 passed
package de.evoal.core.api.search;
import de.evoal.languages.model.instance.Instance;
/**
* Interface for all optimisation algorithms.
*/
public interface OptimisationAlgorithm {
/**
* Initialises the algorithm based on the given configuration.
*
* @param instance The configuration to use.
*
* @return The algrithm itself.
*/
public OptimisationAlgorithm init(final Instance instance);
/**
* Does the actual optimisation.
*/
public void run();
}
package de.evoal.core.main.search;
package de.evoal.core.main.ea.search;
import java.io.File;
import java.time.Duration;
......@@ -11,6 +11,7 @@ import de.evoal.core.api.board.Blackboard;
import de.evoal.core.api.cdi.BlackboardValue;
import de.evoal.core.api.cdi.ConfigurationValue;
import de.evoal.core.api.ea.initial.InitialPopulation;
import de.evoal.core.api.search.OptimisationAlgorithm;
import de.evoal.core.api.utils.LanguageHelper;
import de.evoal.core.api.ea.fitness.comparator.FitnessValue;
......@@ -37,7 +38,8 @@ import javax.inject.Named;
@Slf4j
@Dependent
public class HeuristicSearch {
@Named("evolutionary-algorithm")
public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm {
@Inject
private Blackboard board;
......@@ -56,11 +58,11 @@ public class HeuristicSearch {
private String run;
@Inject
@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.number_of_generations")
@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.number-of-generations")
private int numberOfGenerations;
@Inject
@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.size_of_population")
@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population")
private int sizeOfPopulation;
@Inject
......@@ -68,7 +70,7 @@ public class HeuristicSearch {
private Boolean maximize;
@Inject
@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.maximum_age")
@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.maximum-age")
private int maximumAge;
private final Map<String, List<Alterer<?, FitnessValue>>> alterers = new HashMap<>();
......@@ -100,6 +102,11 @@ public class HeuristicSearch {
@Inject @Named("initial")
private InitialPopulation initalStream;
@Override
public OptimisationAlgorithm init(de.evoal.languages.model.instance.Instance instance) {
return this;
}
public void run() {
setup();
......
......@@ -12,6 +12,7 @@ import javax.enterprise.context.ApplicationScoped;
import de.evoal.core.api.statistics.Column;
import de.evoal.core.api.statistics.ColumnType;
import de.evoal.core.api.statistics.WriterContext;
import de.evoal.core.main.ea.search.EvolutionaryAlgorithmSearch;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.math3.util.Pair;
......@@ -103,7 +104,7 @@ public class HeuristicSearchEvaluation implements MainClass {
board.bind(BlackboardEntry.EVALUATION_RUN, run);
context.bindColumn(runColumn, i);
BeanFactory.create(HeuristicSearch.class)
BeanFactory.create(EvolutionaryAlgorithmSearch.class)
.run();
}
}
......
......@@ -3,12 +3,15 @@ package de.evoal.core.main.search;
import de.evoal.core.api.board.Blackboard;
import de.evoal.core.api.board.BlackboardEntry;
import de.evoal.core.api.cdi.BeanFactory;
import de.evoal.core.api.cdi.ConfigurationValue;
import de.evoal.core.api.cdi.MainClass;
import de.evoal.core.api.properties.Properties;
import javax.enterprise.context.ApplicationScoped;
import de.evoal.core.api.search.OptimisationAlgorithm;
import de.evoal.core.api.statistics.ColumnType;
import de.evoal.core.api.statistics.WriterContext;
import de.evoal.languages.model.instance.Instance;
import org.apache.commons.math3.util.Pair;
import javax.inject.Inject;
......@@ -25,6 +28,10 @@ public class HeuristicSearchMain implements MainClass {
@Inject
private WriterContext context;
@Inject
@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm")
private Instance algorithmConfiguration;
@Override
public void run() {
final String outputFolder = board.get(BlackboardEntry.EVALUATION_OUTPUT_FOLDER);
......@@ -38,7 +45,8 @@ public class HeuristicSearchMain implements MainClass {
board.bind(BlackboardEntry.EVALUATION_OUTPUT_FOLDER, outputBaseDir);
board.bind(BlackboardEntry.EVALUATION_RUN, "0");
BeanFactory.create(HeuristicSearch.class)
BeanFactory.create(OptimisationAlgorithm.class)
.init(algorithmConfiguration)
.run();
}
......
......@@ -54,6 +54,7 @@ module de.evoal.core {
exports de.evoal.core.api.properties.info;
exports de.evoal.core.api.properties.io;
exports de.evoal.core.api.properties.stream;
exports de.evoal.core.api.search;
exports de.evoal.core.api.statistics;
exports de.evoal.core.api.utils;
......@@ -96,4 +97,6 @@ module de.evoal.core {
opens de.evoal.core.api.properties.info to weld.core.impl;
opens de.evoal.core.api.ea.constraints.strategies to weld.core.impl;
opens de.evoal.core.main.properties to weld.core.impl;
opens de.evoal.core.main.ea.search to weld.core.impl;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment