From 4321d1faa4a704194782467b4c70a1b89bd64e30 Mon Sep 17 00:00:00 2001 From: "Bernhard J. Berger" <bernhard.berger@uni-bremen.de> Date: Mon, 6 Feb 2023 15:07:47 +0100 Subject: [PATCH] Work with optimisation language model. # 4 --- src/core/de.evoal.core/scripts/run-search.sh | 2 +- .../evoal/core/api/board/BlackboardEntry.java | 20 ++----------------- .../calculation/CalculationFactory.java | 3 +-- .../properties/PropertiesSpecification.java | 9 +++++++++ .../properties/info/PropertiesBoundaries.java | 1 + .../main/ea/codec/DynamicCodecProducer.java | 6 +----- .../constraint/ConstraintProducer.java | 4 +--- .../JeneticsConstraintProducer.java | 3 +-- .../fitness/MalusFunctionProducer.java | 2 +- .../core/main/ea/fitness/FitnessFactory.java | 6 +++--- .../ea/initial/InitialPopulationFactory.java | 6 +++--- .../core/main/ea/initial/RandomProducer.java | 2 +- .../producer/OptimizingFunctionProducer.java | 2 +- .../main/ea/producer/SelectorFactory.java | 9 ++++----- .../producer/BlackboardValueProducer.java | 12 +++++------ .../producer/ConfigurationValueProducer.java | 14 ++++++------- .../producer/OptimisationModelLoader.java | 20 +++++++++---------- .../PropertiesBoundariesProducer.java | 15 ++++++++++++-- .../producer/PropertiesRangesProducer.java | 1 + .../main/producer/SpecificationProducer.java | 5 +---- .../core/main/search/HeuristicSearch.java | 13 +++++------- .../search/HeuristicSearchEvaluation.java | 2 +- .../core/main/search/HeuristicSearchMain.java | 3 +-- .../main/statistics/StatisticsFactory.java | 2 +- .../scripts/debug-search-with-surrogate.sh | 2 +- .../scripts/run-search-with-surrogate.sh | 2 +- .../surrogate/main/cdi/SurrogateProducer.java | 3 +-- .../main/ea/TrainingInitialPopulation.java | 4 +--- .../surrogate/main/ea/TrainingProducer.java | 2 +- .../GenerationStatisticsWriter.java | 2 +- 30 files changed, 82 insertions(+), 95 deletions(-) diff --git a/src/core/de.evoal.core/scripts/run-search.sh b/src/core/de.evoal.core/scripts/run-search.sh index d559d1ac..48fa0a2d 100755 --- a/src/core/de.evoal.core/scripts/run-search.sh +++ b/src/core/de.evoal.core/scripts/run-search.sh @@ -19,5 +19,5 @@ java -Dorg.jboss.logging.provider=slf4j\ --add-exports io.jenetics.base/io.jenetics.internal.util=de.evoal.core \ -m de.evoal.core/de.evoal.core.main.Evoal \ "-Bcore:main=heuristic-search" \ - "-Bcore:ea-configuration-file=$2" \ + "-Bcore:optimisation-configuration-file=$2" \ "-Bcore:evaluation-output-folder=$3" diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/board/BlackboardEntry.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/board/BlackboardEntry.java index 6d515fe7..9d6acdf1 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/board/BlackboardEntry.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/board/BlackboardEntry.java @@ -27,37 +27,21 @@ public final class BlackboardEntry { */ public static final String EVALUATION_OUTPUT_FOLDER = "core:evaluation-output-folder"; - /** - * Configuration file containing the configuration fot the standard fitness function. - */ -// public static final String FITNESS_STANDARD_FUNCTION_FILE = "FITNESS_STANDARD_FUNCTION_FILE"; - /** * The heuristic configuration. */ - public static final String EA_CONFIGURATION = "core:ea-configuration"; + public static final String OPTIMISATION_CONFIGURATION = "core:optimisation-configuration"; /** * The file containing the ea configuration. */ - public static final String EA_CONFIGURATION_FILE = "core:ea-configuration-file"; - - /** - * File containing the machine learning file. - */ -// public static final String MACHINE_LEARNING_FILE = "MACHINE_LEARNING_FILE"; + public static final String OPTIMISATION_CONFIGURATION_FILE = "core:optimisation-configuration-file"; /** * Name of the main to run. */ public static final String MAIN = "core:main"; - - /** - * Targets. - */ -// public static final String TARGET_POINTS = "TARGET_POINTS"; - /** * File containing targets for evaluation. */ diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java index 6a864175..8a469f16 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java @@ -8,7 +8,6 @@ import javax.enterprise.context.ApplicationScoped; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Instance; -import de.evoal.languages.model.instance.LiteralValue; import org.apache.deltaspike.core.api.provider.BeanProvider; import javax.inject.Inject; @@ -20,7 +19,7 @@ public class CalculationFactory { private final Map<String, Instance> calculationConfigurationByCategory = new HashMap<>(); @Inject - public CalculationFactory(final @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations) { + public CalculationFactory(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations) { handlerConfigurations.getValues() .stream() .map(Instance.class::cast) diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java index 27ab8b94..55e5ffd6 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java @@ -49,6 +49,15 @@ public class PropertiesSpecification { return this; } + public Builder add(final Collection<PropertySpecification> data) { + data.stream() + .filter(s -> !properties.contains(s)) + .peek(properties::add) + .forEach(orderedProperties::add); + + return this; + } + public PropertiesSpecification build() { return new PropertiesSpecification(orderedProperties); } diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/info/PropertiesBoundaries.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/info/PropertiesBoundaries.java index 7a91ca58..a8626935 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/info/PropertiesBoundaries.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/info/PropertiesBoundaries.java @@ -15,6 +15,7 @@ public class PropertiesBoundaries { private Map<PropertySpecification, Boundaries> boundariesMap = new HashMap<>(); + public boolean contains(final PropertySpecification specification) { return boundariesMap.containsKey(specification); } public Boundaries get(final PropertySpecification specification) { return boundariesMap.get(specification); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java index 5f4b8ba2..a6722b7d 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java @@ -4,13 +4,9 @@ import de.evoal.core.api.board.BlackboardEntry; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.languages.model.instance.Array; -import de.evoal.languages.model.instance.Attribute; -import de.evoal.languages.model.instance.DataReference; -import de.evoal.languages.model.instance.Instance; import lombok.extern.slf4j.Slf4j; import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.context.Dependent; import javax.enterprise.inject.Produces; import javax.inject.Named; @@ -18,7 +14,7 @@ import javax.inject.Named; @Slf4j public class DynamicCodecProducer { @Produces @ApplicationScoped - public DynamicCodec create(@ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.genotype") Array config, final @Named("genotype-specification") PropertiesSpecification specification) { + public DynamicCodec create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array config, final @Named("genotype-specification") PropertiesSpecification specification) { log.info("Creating encoding for EA problem."); return DynamicCodec.from(config, specification); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java index 768940a2..d6b6faf8 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java @@ -4,7 +4,6 @@ import de.evoal.core.api.board.BlackboardEntry; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.ea.constraints.model.Constraint; import de.evoal.core.api.ea.constraints.model.Constraints; -import de.evoal.core.api.ea.codec.CustomCodec; import de.evoal.core.api.ea.constraints.model.DataConstraints; import de.evoal.core.api.properties.PropertiesSpecification; import javax.enterprise.context.ApplicationScoped; @@ -12,7 +11,6 @@ import javax.enterprise.inject.Produces; import javax.inject.Named; import de.evoal.core.main.ea.constraints.el.ElHelper; -import de.evoal.core.main.ea.fitness.JeneticsFitnessFunction; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.FunctionName; import de.evoal.languages.model.el.Call; @@ -36,7 +34,7 @@ public class ConstraintProducer { @ApplicationScoped public Constraints create(final DataConstraints constraints, @Named("genotype-specification") final PropertiesSpecification genoSpec, - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.fitness") final Instance fitnessConfig) { + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") final Instance fitnessConfig) { this.genoSpec = genoSpec; this.fitnessSpec = toInnerSpecification(fitnessConfig); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java index cacd3c56..372d920f 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java @@ -14,7 +14,6 @@ import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.core.main.ea.constraints.constraint.utils.ConfigurationUtils; import de.evoal.languages.model.instance.*; -import org.apache.deltaspike.core.api.provider.BeanProvider; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; @@ -28,7 +27,7 @@ import java.util.stream.Collectors; public class JeneticsConstraintProducer { @Produces public List<io.jenetics.engine.Constraint> create( - final @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations, + final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations, final @Named("optimization-function-output") PropertiesSpecification optimizationSpec, final @Named("optimization-function") FitnessFunction function, final CustomCodec codec, diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java index 4dd2015f..9a35f093 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java @@ -28,7 +28,7 @@ import java.util.stream.Collectors; public class MalusFunctionProducer { @ApplicationScoped @Produces public MalusForFitnessStrategy create( - final @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.handlers") Array handlers, + final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlers, final @Named("optimization-function-input") PropertiesSpecification source, final @Named("optimization-function-output") PropertiesSpecification target, final @Named("output-dependencies") PropertiesDependencies dependencies, diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java index 39712d10..aff9fa01 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java @@ -27,12 +27,12 @@ public class FitnessFactory { * Creates a fitness function based on the heuristic configuration.<br/> * Blackboard slots used: * <ul> - * <li>{@link BlackboardEntry#EA_CONFIGURATION}.</li> + * <li>{@link BlackboardEntry#OPTIMISATION_CONFIGURATION}.</li> * </ul> */ @Produces @Dependent - public JeneticsFitnessFunction create(final @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfig, - final @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.comparator") Instance comparatorConfig) { + public JeneticsFitnessFunction create(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfig, + final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.comparator") Instance comparatorConfig) { final String fitnessName = fitnessConfig.getName().getName(); final String comparatorName = comparatorConfig.getName().getName(); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java index 2f69f838..c2301d5f 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java @@ -5,7 +5,7 @@ import de.evoal.core.api.cdi.BeanFactory; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.ea.initial.InitialPopulation; import de.evoal.languages.model.instance.Instance; -import javax.enterprise.context.ApplicationScoped; + import javax.enterprise.context.Dependent; import javax.enterprise.inject.Produces; import javax.inject.Inject; @@ -15,7 +15,7 @@ import javax.inject.Named; public class InitialPopulationFactory { @Inject - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.initialization") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") private Instance initialization; /** @@ -23,7 +23,7 @@ public class InitialPopulationFactory { * * Blackboard slots used: * <ul> - * <li>{@link BlackboardEntry#EA_CONFIGURATION}.</li> + * <li>{@link BlackboardEntry#OPTIMISATION_CONFIGURATION}.</li> * </ul> */ @Produces @Dependent @Named("initial") diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java index 113efb49..9999352b 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java @@ -20,7 +20,7 @@ public class RandomProducer { @Produces @Dependent @Named("random") - public InitialPopulation create(@ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.initialization") Instance initialization) { + public InitialPopulation create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) { final InitialPopulation population = new RandomInitialPopulation(); BeanFactory.injectFields(population); population.init(initialization); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java index b64d7573..2828b828 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java @@ -27,7 +27,7 @@ public class OptimizingFunctionProducer { @Produces @ApplicationScoped @Named("optimization-function-configuration") - public Instance find(final @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfiguration) { + public Instance find(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfiguration) { return findInner(fitnessConfiguration); } diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java index fe923efe..552e7694 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java @@ -5,7 +5,6 @@ import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.languages.model.instance.Instance; import io.jenetics.*; -import io.jenetics.util.Seq; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; @@ -17,15 +16,15 @@ public class SelectorFactory { @Produces @Named("survivor") public Selector createSurvivorSelector( - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.selectors.survivor.name") final String name, - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.selectors.survivor") Instance config) { + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor.name") final String name, + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor") Instance config) { return create(name, config); } @Produces @Named("offspring") public Selector createOffspringSelector( - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.selectors.offspring.name") final String name, - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.selectors.offspring") Instance config) { + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring.name") final String name, + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring") Instance config) { return create(name, config); } diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java index 31426938..9537e98a 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java @@ -15,7 +15,7 @@ import java.util.Map; @ApplicationScoped public class BlackboardValueProducer { @Produces - @BlackboardValue(BlackboardEntry.EA_CONFIGURATION) + @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION) public Integer injectIntegerValue(final InjectionPoint ip, final Blackboard board) { final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class); final Object result = board.get(value.value()); @@ -30,7 +30,7 @@ public class BlackboardValueProducer { } @Produces - @BlackboardValue(BlackboardEntry.EA_CONFIGURATION) + @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION) public String injectStringValue(final InjectionPoint ip, final Blackboard board) { final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class); final Object result = board.get(value.value()); @@ -39,7 +39,7 @@ public class BlackboardValueProducer { } @Produces - @BlackboardValue(BlackboardEntry.EA_CONFIGURATION) + @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION) public File injectFileValue(final InjectionPoint ip, final Blackboard board) { final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class); final Object result = board.get(value.value()); @@ -47,7 +47,7 @@ public class BlackboardValueProducer { } @Produces - @BlackboardValue(BlackboardEntry.EA_CONFIGURATION) + @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION) public Map<String, Object> injectMapValue(final InjectionPoint ip, final Blackboard board) { final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class); @@ -55,7 +55,7 @@ public class BlackboardValueProducer { } @Produces - @BlackboardValue(BlackboardEntry.EA_CONFIGURATION) + @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION) public PropertiesSpecification injectPropertiesSpecification(final InjectionPoint ip, final Blackboard board) { final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class); @@ -63,7 +63,7 @@ public class BlackboardValueProducer { } @Produces - @BlackboardValue(BlackboardEntry.EA_CONFIGURATION) + @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION) public Properties injectProperties(final InjectionPoint ip, final Blackboard board) { final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java index 6898925d..a3a90dba 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java @@ -19,7 +19,7 @@ import javax.enterprise.inject.spi.InjectionPoint; @Slf4j public class ConfigurationValueProducer { @Produces - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "") public Integer injectIntegerValue(final InjectionPoint ip, final Blackboard board) { final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class); @@ -27,7 +27,7 @@ public class ConfigurationValueProducer { } @Produces - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "") public Double injectDoubleValue(final InjectionPoint ip, final Blackboard board) { final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class); @@ -35,7 +35,7 @@ public class ConfigurationValueProducer { } @Produces - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "") public String injectStringValue(final InjectionPoint ip, final Blackboard board) { final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class); @@ -43,7 +43,7 @@ public class ConfigurationValueProducer { } @Produces - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "") public final Array injectArrayValue(final InjectionPoint ip, final Blackboard board) { final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class); @@ -51,7 +51,7 @@ public class ConfigurationValueProducer { } @Produces - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "") public final Instance injectInstanceValue(final InjectionPoint ip, final Blackboard board) { final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class); @@ -59,7 +59,7 @@ public class ConfigurationValueProducer { } @Produces - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "") public Boolean injectBooleanValue(final InjectionPoint ip, final Blackboard board) { final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class); @@ -67,7 +67,7 @@ public class ConfigurationValueProducer { } @Produces - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "") public double [] injectDoubleArrayValue(final InjectionPoint ip, final Blackboard board) { final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java index bc57b1b6..cf761267 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java @@ -25,23 +25,23 @@ import java.io.File; @ApplicationScoped @Slf4j -public class EvolutionaryAlgorithmModelLoader { +public class OptimisationModelLoader { @Inject private Blackboard board; private OptimisationModel model; public void load(final @Observes BlackboardEntry entry) { - if(!entry.isSame(BlackboardEntry.EA_CONFIGURATION_FILE)) { + if(!entry.isSame(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE)) { return; } - final String configurationFileName = board.get(BlackboardEntry.EA_CONFIGURATION_FILE); - log.info("Loading evolutionary algorithm configuration from {}.", configurationFileName); + final String configurationFileName = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE); + log.info("Loading optimisation configuration from {}.", configurationFileName); final File configurationFile = new File(configurationFileName); if(!configurationFile.exists() || ! configurationFile.canRead()) { - log.error("Unable to read evolutionary algorithm configuration file '{}'", configurationFileName); - throw new IllegalArgumentException("Unable to read evolutionary algorithm configuration file: " + configurationFileName); + log.error("Unable to read optimisation configuration file '{}'", configurationFileName); + throw new IllegalArgumentException("Unable to read optimisation configuration file: " + configurationFileName); } initializeEMF(); @@ -55,10 +55,10 @@ public class EvolutionaryAlgorithmModelLoader { resourceSet.addLoadOption(XtextResource.OPTION_ENCODING, "UTF-8"); try { - log.info("Continue by loading the EAL file."); + log.info("Continue by loading the OL file."); final URI modelURI = URI.createFileURI(configurationFile.getAbsolutePath()); - log.info("Loading ea model from URI {}.", modelURI); + log.info("Loading ol model from URI {}.", modelURI); final Resource resource = resourceSet.getResource(modelURI, true); resource.load(resourceSet.getLoadOptions()); @@ -81,9 +81,9 @@ public class EvolutionaryAlgorithmModelLoader { } model = (OptimisationModel) resource.getContents().get(0); - board.bind(BlackboardEntry.EA_CONFIGURATION, model); + board.bind(BlackboardEntry.OPTIMISATION_CONFIGURATION, model); } catch (final Exception e) { - log.error("Unable to evolutionary algorithm configuration file '{}'.", configurationFile, e); + log.error("Unable to load optimisation configuration file '{}'.", configurationFile, e); } } diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/PropertiesBoundariesProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/PropertiesBoundariesProducer.java index e59ee187..10bb824a 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/PropertiesBoundariesProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/PropertiesBoundariesProducer.java @@ -1,6 +1,7 @@ package de.evoal.core.main.producer; import de.evoal.core.api.ea.constraints.model.DataConstraints; +import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.info.PropertiesBoundaries; import de.evoal.core.api.properties.info.PropertiesRanges; @@ -15,7 +16,17 @@ import java.util.Collection; @ApplicationScoped public class PropertiesBoundariesProducer { @Produces @ApplicationScoped - public PropertiesBoundaries create(final DataConstraints constraints) { - return BoundaryIdentifier.run(constraints); + public PropertiesBoundaries create(final DataConstraints constraints, final @Named("genotype-specification") PropertiesSpecification genotypeSpecification) { + final PropertiesBoundaries boundaries = BoundaryIdentifier.run(constraints); + + genotypeSpecification + .getProperties() + .stream() + .filter(s -> !boundaries.contains(s)) + .forEach(s -> { + boundaries.add(s, new PropertiesBoundaries.Boundaries(-Double.MAX_VALUE/2, Double.MAX_VALUE/2)); + }); + + return boundaries; } } diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/PropertiesRangesProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/PropertiesRangesProducer.java index 47b2b3a0..08163572 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/PropertiesRangesProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/PropertiesRangesProducer.java @@ -1,5 +1,6 @@ package de.evoal.core.main.producer; +import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.info.PropertiesBoundaries; import de.evoal.core.api.properties.info.PropertiesRanges; diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java index 4f906835..b21bea72 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java @@ -8,23 +8,20 @@ import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Attribute; import de.evoal.languages.model.instance.DataReference; import de.evoal.languages.model.instance.Instance; -import org.apache.commons.math3.util.Pair; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; import javax.enterprise.inject.Produces; -import javax.inject.Inject; import javax.inject.Named; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; @ApplicationScoped public class SpecificationProducer { @Produces @Dependent @Named("genotype-description") - public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.genotype") Array genotype) { + public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array genotype) { final List<DataDescription> descriptors = genotype.getValues() .stream() .map(Instance.class::cast) diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearch.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearch.java index e1a610f4..42a66da6 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearch.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearch.java @@ -12,14 +12,12 @@ 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.utils.LanguageHelper; -import de.evoal.core.api.ea.codec.CustomCodec; import de.evoal.core.api.ea.fitness.comparator.FitnessValue; import de.evoal.core.api.statistics.StatisticsWriter; import de.evoal.core.main.ea.alterer.AltererFactory; import de.evoal.core.main.ea.codec.DynamicCodec; import de.evoal.core.main.ea.fitness.JeneticsFitnessFunction; -import de.evoal.core.main.ea.initial.InitialPopulationFactory; import de.evoal.core.main.jenetics.ConstraintList; import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Attribute; @@ -29,7 +27,6 @@ import de.evoal.languages.model.ol.OptimisationModel; import io.jenetics.*; import io.jenetics.engine.*; import io.jenetics.stat.MinMax; -import io.jenetics.util.Factory; import lombok.extern.slf4j.Slf4j; import javax.enterprise.context.Dependent; @@ -59,19 +56,19 @@ public class HeuristicSearch { private String run; @Inject - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.number_of_generations") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.number_of_generations") private int numberOfGenerations; @Inject - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.size_of_population") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.size_of_population") private int sizeOfPopulation; @Inject - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.maximize") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.maximize") private Boolean maximize; @Inject - @ConfigurationValue(entry = BlackboardEntry.EA_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<>(); @@ -137,7 +134,7 @@ public class HeuristicSearch { } private void setup() { - final OptimisationModel configuration = board.get(BlackboardEntry.EA_CONFIGURATION); + final OptimisationModel configuration = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION); final de.evoal.languages.model.instance.Instance alterers = LanguageHelper.lookup(configuration.getInstance(), "algorithm.alterers"); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java index 1aa0b95a..42a8fe16 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java @@ -33,7 +33,7 @@ public class HeuristicSearchEvaluation implements MainClass { private WriterContext context; @Inject - @BlackboardValue(BlackboardEntry.EA_CONFIGURATION_FILE) + @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE) private String heuristicFile; @Inject diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java index cdedd099..d75eae95 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java @@ -10,7 +10,6 @@ import javax.enterprise.context.ApplicationScoped; import de.evoal.core.api.statistics.ColumnType; import de.evoal.core.api.statistics.WriterContext; import org.apache.commons.math3.util.Pair; -import org.apache.deltaspike.core.api.provider.BeanProvider; import javax.inject.Inject; import javax.inject.Named; @@ -29,7 +28,7 @@ public class HeuristicSearchMain implements MainClass { @Override public void run() { final String outputFolder = board.get(BlackboardEntry.EVALUATION_OUTPUT_FOLDER); - final String heuristicFileName = board.get(BlackboardEntry.EA_CONFIGURATION_FILE); + final String heuristicFileName = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE); final File outputBaseDir = HeuristicSearchUtils.calculateOutputBaseDir(new File(outputFolder), new File(heuristicFileName)); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java index 98d228a6..7403629f 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java @@ -21,7 +21,7 @@ public class StatisticsFactory { @Produces @Dependent @Named("statistics") - public StatisticsWriter create(final @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "statistics") Instance instance) { + public StatisticsWriter create(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "statistics") Instance instance) { Requirements.requireSize(instance.getAttributes(), 1); final Array array = (Array)instance.getAttributes().get(0).getValue(); diff --git a/src/core/de.evoal.surrogate.api/scripts/debug-search-with-surrogate.sh b/src/core/de.evoal.surrogate.api/scripts/debug-search-with-surrogate.sh index 1abaa842..bb3088ef 100755 --- a/src/core/de.evoal.surrogate.api/scripts/debug-search-with-surrogate.sh +++ b/src/core/de.evoal.surrogate.api/scripts/debug-search-with-surrogate.sh @@ -20,7 +20,7 @@ java -Dorg.jboss.logging.provider=slf4j\ --add-exports io.jenetics.base/io.jenetics.internal.util=de.evoal.core \ -m de.evoal.core/de.evoal.core.main.Evoal \ -Bcore:main=heuristic-search \ - "-Bcore:ea-configuration-file=$2" \ + "-Bcore:optimisation-configuration-file=$2" \ "-Bsurrogate:configuration-file=$3" \ "-Bsurrogate:pre-trained=$4" \ "-Bsurrogate:training-data=$5"\ diff --git a/src/core/de.evoal.surrogate.api/scripts/run-search-with-surrogate.sh b/src/core/de.evoal.surrogate.api/scripts/run-search-with-surrogate.sh index c1f7e30b..91204ba0 100755 --- a/src/core/de.evoal.surrogate.api/scripts/run-search-with-surrogate.sh +++ b/src/core/de.evoal.surrogate.api/scripts/run-search-with-surrogate.sh @@ -19,7 +19,7 @@ java -Dorg.jboss.logging.provider=slf4j\ --add-exports io.jenetics.base/io.jenetics.internal.util=de.evoal.core \ -m de.evoal.core/de.evoal.core.main.Evoal \ -Bcore:main=heuristic-search \ - "-Bcore:ea-configuration-file=$2" \ + "-Bcore:optimisation-configuration-file=$2" \ "-Bsurrogate:configuration-file=$3" \ "-Bsurrogate:pre-trained=$4" \ "-Bsurrogate:training-data=$5"\ diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/SurrogateProducer.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/SurrogateProducer.java index 581850aa..dacc2251 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/SurrogateProducer.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/SurrogateProducer.java @@ -30,7 +30,6 @@ import javax.inject.Named; import java.io.File; import java.util.HashMap; import java.util.Map; -import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; @@ -57,7 +56,7 @@ public class SurrogateProducer { this.configuration = loader.apply(file); final EObject mlConfiguration = board.get(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION); - final EObject eaConfiguration = board.get(BlackboardEntry.EA_CONFIGURATION); + final EObject eaConfiguration = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION); final Map<String, PropertySpecification> specifications = new HashMap<>(); addDataFrom(specifications, mlConfiguration); diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingInitialPopulation.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingInitialPopulation.java index 019504e4..5096455a 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingInitialPopulation.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingInitialPopulation.java @@ -11,7 +11,6 @@ import de.evoal.core.api.properties.stream.FileBasedPropertiesStreamSupplier; import de.evoal.core.api.properties.stream.PropertiesStreamSupplier; import de.evoal.languages.model.instance.Instance; import de.evoal.surrogate.api.SurrogateBlackboardEntry; -import de.evoal.surrogate.api.training.TrainingDataManager; import io.jenetics.Gene; import io.jenetics.Genotype; import io.jenetics.engine.Engine; @@ -23,14 +22,13 @@ import lombok.extern.slf4j.Slf4j; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Named; -import javax.inject.Provider; import java.io.File; @Slf4j public class TrainingInitialPopulation<G extends Gene<?, G>, C extends Comparable<C>> implements InitialPopulation<G, C> { @Inject - @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.size_of_population") + @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.size_of_population") private int sizeOfPopulation; @Inject diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingProducer.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingProducer.java index 9bdd7789..95d8103b 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingProducer.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingProducer.java @@ -21,7 +21,7 @@ public class TrainingProducer { @Produces @Dependent @Named("training") - public InitialPopulation create(@ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.initialization") Instance initialization) { + public InitialPopulation create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) { final TrainingInitialPopulation population = new TrainingInitialPopulation(); BeanFactory.injectFields(population); population.init(); diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/correlated/GenerationStatisticsWriter.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/correlated/GenerationStatisticsWriter.java index 986cc531..e3a13aea 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/correlated/GenerationStatisticsWriter.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/correlated/GenerationStatisticsWriter.java @@ -60,7 +60,7 @@ public class GenerationStatisticsWriter implements StatisticsWriter { @Inject private Provider<Function<Properties, Properties>> fitnessFactory; - @Inject @ConfigurationValue(entry = BlackboardEntry.EA_CONFIGURATION, access = "algorithm.fitness") + @Inject @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") private Instance config; @Inject -- GitLab