From e2b2cf8600e79beb34676a52f4d0ff6d53ba54e7 Mon Sep 17 00:00:00 2001 From: "Bernhard J. Berger" <bernhard.berger@uni-bremen.de> Date: Tue, 7 Feb 2023 19:24:05 +0100 Subject: [PATCH] Added annotations for adding user documentation that is shown if EvoAl is called without any parameters. #10 --- .../scripts/run-print-help.sh | 13 ++ .../core/api/board/BlackboardEntries.java | 7 ++ .../evoal/core/api/board/BlackboardEntry.java | 48 +------- .../core/api/board/CoreBlackboardEntries.java | 60 ++++++++++ .../de/evoal/core/api/cdi/Application.java | 19 +++ .../de/evoal/core/api/cdi/Commandline.java | 29 +++++ .../java/de/evoal/core/api/cdi/MainClass.java | 3 + .../calculation/CalculationFactory.java | 4 +- .../main/java/de/evoal/core/main/Evoal.java | 113 ++++++++++++++---- .../main/ea/codec/DynamicCodecProducer.java | 4 +- .../constraint/ConstraintProducer.java | 4 +- .../JeneticsConstraintProducer.java | 4 +- .../fitness/MalusFunctionProducer.java | 4 +- .../core/main/ea/fitness/DistanceFitness.java | 6 +- .../core/main/ea/fitness/FitnessFactory.java | 8 +- .../ea/initial/InitialPopulationFactory.java | 6 +- .../core/main/ea/initial/RandomProducer.java | 4 +- .../producer/OptimizingFunctionProducer.java | 4 +- .../main/ea/producer/SelectorFactory.java | 10 +- .../search/EvolutionaryAlgorithmSearch.java | 16 +-- .../producer/BlackboardValueProducer.java | 14 +-- .../producer/ConfigurationValueProducer.java | 16 +-- .../producer/OptimisationModelLoader.java | 7 +- .../main/producer/SpecificationProducer.java | 4 +- .../search/HeuristicSearchEvaluation.java | 25 ++-- .../core/main/search/HeuristicSearchMain.java | 19 +-- .../main/statistics/StatisticsFactory.java | 4 +- .../statistics/fitness/FitnessStatistics.java | 6 +- .../statistics/writer/csv/CsvStrategy.java | 4 +- .../api/SurrogateBlackboardEntries.java | 36 ++++++ .../api/SurrogateBlackboardEntry.java | 25 ---- .../evoal/surrogate/main/SurrogateMain.java | 4 +- .../main/cdi/MLLConfigurationProducer.java | 8 +- .../surrogate/main/cdi/SurrogateProducer.java | 11 +- .../surrogate/main/cdi/TargetPointLoader.java | 4 +- .../main/ea/TrainingInitialPopulation.java | 8 +- .../surrogate/main/ea/TrainingProducer.java | 4 +- .../main/ea/TrainingRepairStrategy.java | 6 +- .../GenerationStatisticsWriter.java | 4 +- .../src/main/java/module-info.java | 3 +- .../evoal/surrogate/ws/WebServiceFitness.java | 2 +- 41 files changed, 381 insertions(+), 199 deletions(-) create mode 100755 src/core/de.evoal.core.main/scripts/run-print-help.sh create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntries.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Application.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Commandline.java create mode 100644 src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntries.java delete mode 100644 src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntry.java diff --git a/src/core/de.evoal.core.main/scripts/run-print-help.sh b/src/core/de.evoal.core.main/scripts/run-print-help.sh new file mode 100755 index 00000000..c52ac853 --- /dev/null +++ b/src/core/de.evoal.core.main/scripts/run-print-help.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +source $( cd -- "$(dirname $0)/" >/dev/null 2>&1 ; pwd -P)/paths.env + +if [ "$#" -ne 0 ]; then + echo "Usage: $0" + exit 1 +fi + +cd $1 + +set -x +java $CLASSPATH \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntries.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntries.java new file mode 100644 index 00000000..4476c50d --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntries.java @@ -0,0 +1,7 @@ +package de.evoal.core.api.board; + +/** + * Base interface for classes declaring commandline parameters. + */ +public interface BlackboardEntries { +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntry.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntry.java index 9d6acdf1..abaf5d5d 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntry.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntry.java @@ -1,52 +1,8 @@ package de.evoal.core.api.board; -public final class BlackboardEntry { - - /** - * The target properties to search for. - */ - public static final String TARGET_PROPERTIES = "core:target-properties"; - - /** - * Folder containing the constraint files. - */ - public static final String CONSTRAINT_FOLDER = "core:constraint-folder"; - - /** - * Number of evaluation runs. - */ - public static final String EVALUATION_ITERATIONS = "core:evaluation-iterations"; - - /** - * The evaluation run number. - */ - public static final String EVALUATION_RUN = "core:evaluation-run"; - - /** - * The actual output folder for the evaluation. - */ - public static final String EVALUATION_OUTPUT_FOLDER = "core:evaluation-output-folder"; - - /** - * The heuristic configuration. - */ - public static final String OPTIMISATION_CONFIGURATION = "core:optimisation-configuration"; - - /** - * The file containing the ea configuration. - */ - public static final String OPTIMISATION_CONFIGURATION_FILE = "core:optimisation-configuration-file"; - - /** - * Name of the main to run. - */ - public static final String MAIN = "core:main"; - - /** - * File containing targets for evaluation. - */ - public static final String TARGET_POINTS_FILE = "core:target-points-file"; +import de.evoal.core.api.cdi.Commandline; +public final class BlackboardEntry { private final String label; private BlackboardEntry(final String label) { diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java new file mode 100644 index 00000000..e665ecf7 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java @@ -0,0 +1,60 @@ +package de.evoal.core.api.board; + +import de.evoal.core.api.cdi.Commandline; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Named; + +@ApplicationScoped +@Named("core-entries") +public class CoreBlackboardEntries implements BlackboardEntries { + + /** + * The target properties to search for. + */ + public static final String TARGET_PROPERTIES = "core:target-properties"; + + /** + * Folder containing the constraint files. + */ + public static final String CONSTRAINT_FOLDER = "core:constraint-folder"; + + /** + * Number of evaluation runs. + */ + @Commandline(main = "heuristic-search", name = "core:evaluation-iterations", doc = "Number of iterations to run the search.") + public static final String EVALUATION_ITERATIONS = "core:evaluation-iterations"; + + /** + * The evaluation run number. + */ + public static final String EVALUATION_RUN = "core:evaluation-run"; + + /** + * The actual output folder for the evaluation. + */ + @Commandline(main = "heuristic-search", name = "core:evaluation-output-folder", doc = "Folder to write the results to.") + public static final String EVALUATION_OUTPUT_FOLDER = "core:evaluation-output-folder"; + + /** + * The heuristic configuration. + */ + public static final String OPTIMISATION_CONFIGURATION = "core:optimisation-configuration"; + + /** + * The file containing the ea configuration. + */ + @Commandline(main = "heuristic-search", name = "core:optimisation-configuration", doc = "Optimisation configuration to use.") + public static final String OPTIMISATION_CONFIGURATION_FILE = "core:optimisation-configuration-file"; + + /** + * Name of the main to run. + */ + public static final String MAIN = "core:main"; + + /** + * File containing targets for evaluation. + */ + @Commandline(main="heuristic-search-evaluation", name = "core:target-points-file", doc = "A file containing the targets to use for evaluation.") + public static final String TARGET_POINTS_FILE = "core:target-points-file"; +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Application.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Application.java new file mode 100644 index 00000000..72076d76 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Application.java @@ -0,0 +1,19 @@ +package de.evoal.core.api.cdi; + +import javax.enterprise.util.Nonbinding; +import javax.inject.Qualifier; +import java.lang.annotation.*; + +/** + * Annotation for documenting main classes. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Qualifier +@Target({ElementType.TYPE}) +public @interface Application { + /** + * @return The documentation. + */ + public @Nonbinding String value(); +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Commandline.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Commandline.java new file mode 100644 index 00000000..c4840cd2 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Commandline.java @@ -0,0 +1,29 @@ +package de.evoal.core.api.cdi; + +import javax.enterprise.util.Nonbinding; +import javax.inject.Qualifier; +import java.lang.annotation.*; + +/** + * Annotation for documenting main classes. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Qualifier +@Target({ElementType.FIELD}) +public @interface Commandline { + /** + * @return The application that accept this parameter. + */ + public @Nonbinding String main(); + + /** + * @return Parameter name. + */ + public @Nonbinding String name(); + + /** + * @return The documentation. + */ + public @Nonbinding String doc(); +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/MainClass.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/MainClass.java index 27cbbf65..486826d5 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/MainClass.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/MainClass.java @@ -4,6 +4,9 @@ package de.evoal.core.api.cdi; * Base interface for all main classes. A main class must be annotated using the * {@link javax.inject.Named} annotation, which can be used on the command line * to select the main class to execute. + * + * Additionally, you should add a {@link Application} annotation to your main class + * to allow EvoAl to print some documentation for the user. */ public interface MainClass { /** diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java index 8a469f16..51ec5676 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java @@ -1,7 +1,7 @@ package de.evoal.core.api.ea.constraints.calculation; import de.evoal.core.api.ea.constraints.model.Constraint; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import javax.enterprise.context.ApplicationScoped; @@ -19,7 +19,7 @@ public class CalculationFactory { private final Map<String, Instance> calculationConfigurationByCategory = new HashMap<>(); @Inject - public CalculationFactory(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations) { + public CalculationFactory(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations) { handlerConfigurations.getValues() .stream() .map(Instance.class::cast) diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java index 5d9da60b..3680d20b 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java @@ -1,7 +1,10 @@ package de.evoal.core.main; import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.BlackboardEntries; +import de.evoal.core.api.board.CoreBlackboardEntries; +import de.evoal.core.api.cdi.Application; +import de.evoal.core.api.cdi.Commandline; import de.evoal.core.api.cdi.MainClass; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.spi.Bean; @@ -11,7 +14,8 @@ import org.apache.deltaspike.cdise.api.CdiContainer; import org.apache.deltaspike.cdise.api.CdiContainerLoader; import org.apache.deltaspike.core.api.provider.BeanProvider; -import java.util.Set; +import java.lang.reflect.Field; +import java.util.*; /** * Main class for EvoAl. The concrete runtime behaviour depends on the used blackboard @@ -27,34 +31,103 @@ public final class Evoal { cdiContainer.boot(); cdiContainer.getContextControl().startContext(ApplicationScoped.class); - log.info("Setting up black board"); - final Blackboard board = BeanProvider.getContextualReference(Blackboard.class); - board.readArguments(args); - - log.info("Fetching main class and handing over control"); - try { - final String mainName = board.get(BlackboardEntry.MAIN); - MainClass main = null; + if(args.length == 0) { + printUsage(); + } else { + log.info("Setting up black board"); + final Blackboard board = BeanProvider.getContextualReference(Blackboard.class); + board.readArguments(args); + log.info("Fetching main class and handing over control"); try { - main = BeanProvider.getContextualReference(mainName, false, MainClass.class); - } catch(final Throwable e) { - logMainError(e); - System.exit(1); - } + final String mainName = board.get(CoreBlackboardEntries.MAIN); + MainClass main = null; - main.run(); - } catch (final Throwable e) { - log.error("Main class threw an exception.", e); - } + try { + main = BeanProvider.getContextualReference(mainName, false, MainClass.class); + } catch (final Throwable e) { + logMainError(e); + System.exit(1); + } + main.run(); + } catch (final Throwable e) { + log.error("Main class threw an exception.", e); + } + } + log.info("Shutting down CDI container"); cdiContainer.shutdown(); } + private static void printUsage() { + System.out.println(); + System.out.println(); + System.out.println("EvoAl is a launcher application for different functions."); + System.out.println(" To invoke EvoAl correctly, you first have to specify the function you want to"); + System.out.println(" use and the necessary parameters. All parameters are passed by using the -B "); + System.out.println(" switch, e.g., '-Bcore:main=heuristic-search'. The part after the -B specifies"); + System.out.println(" the parameter name and the corresponding value is given after the equals sign."); + System.out.println(" Your EvoAl installation supports the following functions and parameters:"); + System.out.println(); + + final Set<Bean<BlackboardEntries>> entriesBeans = BeanProvider.getBeanDefinitions(BlackboardEntries.class, true, true); + final Map<String, List<Commandline>> parameters = new HashMap<>(); + + for(final Bean<BlackboardEntries> bean : entriesBeans) { + final Class<?> clazz = bean.getBeanClass(); + for(final Field field : clazz.getDeclaredFields()) { + if(!field.isAnnotationPresent(Commandline.class)) { + continue; + } + + final Commandline annotation = field.getAnnotation(Commandline.class); + + parameters.putIfAbsent(annotation.main(), new LinkedList<>()); + final List<Commandline> annotations = parameters.get(annotation.main()); + annotations.add(annotation); + } + } + + final Set<Bean<MainClass>> beans = BeanProvider.getBeanDefinitions(MainClass.class, true, true); + for(final Bean<MainClass> bean : beans) { + System.out.println(); + System.out.println("--------------------------------------------------------------------------------"); + System.out.println(" -Bcore:main=" + bean.getName()); + if(bean.getBeanClass().isAnnotationPresent(Application.class)) { + printIntended(4, bean.getBeanClass().getAnnotation(Application.class).value()); + } + + final List<Commandline> annotations = parameters.getOrDefault(bean.getName(), new LinkedList<>()); + for(final Commandline annotation : annotations) { + System.out.println(); + System.out.println(" -B" + annotation.name() + "="); + printIntended(6, annotation.doc()); + } + } + + final List<Commandline> annotations = parameters.getOrDefault("", new LinkedList<>()); + if(annotations != null) { + System.out.println(); + System.out.println("--------------------------------------------------------------------------------"); + System.out.println(" General parameters:"); + for(final Commandline annotation : annotations) { + System.out.println(" " + annotation.name() + ":"); + printIntended(6, annotation.doc()); + System.out.println(); + } + } + } + + private static void printIntended(final int nmrWhitespaces, final String text) { + for(final String part : text.split("\\r?\\n")) { + System.out.println(" ".repeat(nmrWhitespaces) + part); + } + } + private static void logMainError(final Throwable e) { log.error("Filed to create main.", e); - log.error("Name of main class was not set correctly. Please specify the main class via command line (-B{}=<name>).", BlackboardEntry.MAIN); + log.error("Name of main class was not set correctly. Please specify the main class via command line (-B{}=<name>).", CoreBlackboardEntries.MAIN); Set<Bean<MainClass>> beans = BeanProvider.getBeanDefinitions(MainClass.class, true, true); log.error(" possible names are:"); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java index a6722b7d..bd7eec67 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java @@ -1,6 +1,6 @@ package de.evoal.core.main.ea.codec; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.languages.model.instance.Array; @@ -14,7 +14,7 @@ import javax.inject.Named; @Slf4j public class DynamicCodecProducer { @Produces @ApplicationScoped - public DynamicCodec create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array config, final @Named("genotype-specification") PropertiesSpecification specification) { + public DynamicCodec create(@ConfigurationValue(entry = CoreBlackboardEntries.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.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java index d6b6faf8..c80303fc 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java @@ -1,6 +1,6 @@ package de.evoal.core.main.ea.constraints.constraint; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; 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; @@ -34,7 +34,7 @@ public class ConstraintProducer { @ApplicationScoped public Constraints create(final DataConstraints constraints, @Named("genotype-specification") final PropertiesSpecification genoSpec, - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") final Instance fitnessConfig) { + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") final Instance fitnessConfig) { this.genoSpec = genoSpec; this.fitnessSpec = toInnerSpecification(fitnessConfig); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java index 372d920f..8f8338dd 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java @@ -5,7 +5,7 @@ import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy; import de.evoal.core.api.ea.constraints.model.Constraint; import de.evoal.core.api.ea.constraints.model.Constraints; import de.evoal.core.api.ea.constraints.calculation.CalculationFactory; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.ea.codec.CustomCodec; import de.evoal.core.api.ea.constraints.strategies.RepairStrategy; @@ -27,7 +27,7 @@ import java.util.stream.Collectors; public class JeneticsConstraintProducer { @Produces public List<io.jenetics.engine.Constraint> create( - final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations, + final @ConfigurationValue(entry = CoreBlackboardEntries.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.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java index 9a35f093..57371661 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java @@ -8,7 +8,7 @@ import de.evoal.core.api.properties.info.PropertiesDependencies; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.core.api.ea.constraints.calculation.CalculationFactory; import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; @@ -28,7 +28,7 @@ import java.util.stream.Collectors; public class MalusFunctionProducer { @ApplicationScoped @Produces public MalusForFitnessStrategy create( - final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlers, + final @ConfigurationValue(entry = CoreBlackboardEntries.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.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java index 550348be..d7cc3feb 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java @@ -1,7 +1,7 @@ package de.evoal.core.main.ea.fitness; import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.ea.fitness.FitnessDecorator; import de.evoal.core.api.ea.fitness.FitnessFunction; import de.evoal.core.api.properties.Properties; @@ -53,11 +53,11 @@ public class DistanceFitness extends FitnessDecorator { final Attribute target = config.findAttribute("target"); if(target == null) { - this.target = board.get(BlackboardEntry.TARGET_PROPERTIES); + this.target = board.get(CoreBlackboardEntries.TARGET_PROPERTIES); } else { this.target = toProperties((Array)target.getValue()); log.info("Binding target properties based on information found in MLL to {}.", this.target); - board.bind(BlackboardEntry.TARGET_PROPERTIES, this.target); + board.bind(CoreBlackboardEntries.TARGET_PROPERTIES, this.target); } return this; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java index aff9fa01..2c71a22f 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java @@ -1,6 +1,6 @@ package de.evoal.core.main.ea.fitness; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import javax.enterprise.context.ApplicationScoped; @@ -27,12 +27,12 @@ public class FitnessFactory { * Creates a fitness function based on the heuristic configuration.<br/> * Blackboard slots used: * <ul> - * <li>{@link BlackboardEntry#OPTIMISATION_CONFIGURATION}.</li> + * <li>{@link CoreBlackboardEntries#OPTIMISATION_CONFIGURATION}.</li> * </ul> */ @Produces @Dependent - 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) { + public JeneticsFitnessFunction create(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfig, + final @ConfigurationValue(entry = CoreBlackboardEntries.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.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java index c2301d5f..1d94bd30 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java @@ -1,6 +1,6 @@ package de.evoal.core.main.ea.initial; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.BeanFactory; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.ea.initial.InitialPopulation; @@ -15,7 +15,7 @@ import javax.inject.Named; public class InitialPopulationFactory { @Inject - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") private Instance initialization; /** @@ -23,7 +23,7 @@ public class InitialPopulationFactory { * * Blackboard slots used: * <ul> - * <li>{@link BlackboardEntry#OPTIMISATION_CONFIGURATION}.</li> + * <li>{@link CoreBlackboardEntries#OPTIMISATION_CONFIGURATION}.</li> * </ul> */ @Produces @Dependent @Named("initial") diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java index 9999352b..16840785 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java @@ -1,6 +1,6 @@ package de.evoal.core.main.ea.initial; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.BeanFactory; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.ea.initial.InitialPopulation; @@ -20,7 +20,7 @@ public class RandomProducer { @Produces @Dependent @Named("random") - public InitialPopulation create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) { + public InitialPopulation create(@ConfigurationValue(entry = CoreBlackboardEntries.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.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java index 2828b828..7c30c047 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java @@ -1,6 +1,6 @@ package de.evoal.core.main.ea.producer; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.ea.fitness.FitnessFunction; import de.evoal.core.api.properties.PropertiesSpecification; @@ -27,7 +27,7 @@ public class OptimizingFunctionProducer { @Produces @ApplicationScoped @Named("optimization-function-configuration") - public Instance find(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfiguration) { + public Instance find(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfiguration) { return findInner(fitnessConfiguration); } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java index 3241b26f..ffbf125b 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java @@ -1,6 +1,6 @@ package de.evoal.core.main.ea.producer; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.languages.model.instance.Instance; @@ -16,15 +16,15 @@ public class SelectorFactory { @Produces @Named("survivor") public Selector createSurvivorSelector( - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor.name") final String name, - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor") Instance config) { + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor.name") final String name, + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor") Instance config) { return create(name, config); } @Produces @Named("offspring") public Selector createOffspringSelector( - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring.name") final String name, - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring") Instance config) { + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring.name") final String name, + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring") Instance config) { return create(name, config); } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java index cae62771..e0030e8d 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java @@ -6,7 +6,7 @@ import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.board.Blackboard; import de.evoal.core.api.cdi.BlackboardValue; import de.evoal.core.api.cdi.ConfigurationValue; @@ -47,30 +47,30 @@ public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm { * Location for storing the output. */ @Inject - @BlackboardValue(BlackboardEntry.EVALUATION_OUTPUT_FOLDER) + @BlackboardValue(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER) private File outputDirectory; /** * The actual run */ @Inject - @BlackboardValue(BlackboardEntry.EVALUATION_RUN) + @BlackboardValue(CoreBlackboardEntries.EVALUATION_RUN) private String run; @Inject - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.number-of-generations") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.number-of-generations") private int numberOfGenerations; @Inject - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population") private int sizeOfPopulation; @Inject - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.maximize") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.maximize") private Boolean maximize; @Inject - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.maximum-age") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.maximum-age") private int maximumAge; private final Map<String, List<Alterer<?, FitnessValue>>> alterers = new HashMap<>(); @@ -141,7 +141,7 @@ public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm { } private void setup() { - final OptimisationModel configuration = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION); + final OptimisationModel configuration = board.get(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION); final de.evoal.languages.model.instance.Instance alterers = LanguageHelper.lookup(configuration.getInstance(), "algorithm.alterers"); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java index 9537e98a..0cd81e99 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java @@ -2,7 +2,7 @@ package de.evoal.core.main.producer; import de.evoal.core.api.cdi.BlackboardValue; import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; import javax.enterprise.context.ApplicationScoped; @@ -15,7 +15,7 @@ import java.util.Map; @ApplicationScoped public class BlackboardValueProducer { @Produces - @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION) + @BlackboardValue(CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION) + @BlackboardValue(CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION) + @BlackboardValue(CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION) + @BlackboardValue(CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION) + @BlackboardValue(CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION) + @BlackboardValue(CoreBlackboardEntries.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.main/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java index a3a90dba..ffe4d141 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java @@ -1,7 +1,7 @@ package de.evoal.core.main.producer; import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.languages.model.ol.OptimisationModel; @@ -19,7 +19,7 @@ import javax.enterprise.inject.spi.InjectionPoint; @Slf4j public class ConfigurationValueProducer { @Produces - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "") + @ConfigurationValue(entry = CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION, access = "") + @ConfigurationValue(entry = CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION, access = "") + @ConfigurationValue(entry = CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION, access = "") + @ConfigurationValue(entry = CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION, access = "") + @ConfigurationValue(entry = CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION, access = "") + @ConfigurationValue(entry = CoreBlackboardEntries.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.OPTIMISATION_CONFIGURATION, access = "") + @ConfigurationValue(entry = CoreBlackboardEntries.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.main/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java index cf761267..091a8a20 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java @@ -3,6 +3,7 @@ package de.evoal.core.main.producer; import com.google.inject.Injector; import de.evoal.core.api.board.Blackboard; import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; import javax.enterprise.event.Observes; @@ -31,11 +32,11 @@ public class OptimisationModelLoader { private OptimisationModel model; public void load(final @Observes BlackboardEntry entry) { - if(!entry.isSame(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE)) { + if(!entry.isSame(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION_FILE)) { return; } - final String configurationFileName = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE); + final String configurationFileName = board.get(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION_FILE); log.info("Loading optimisation configuration from {}.", configurationFileName); final File configurationFile = new File(configurationFileName); @@ -81,7 +82,7 @@ public class OptimisationModelLoader { } model = (OptimisationModel) resource.getContents().get(0); - board.bind(BlackboardEntry.OPTIMISATION_CONFIGURATION, model); + board.bind(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, model); } catch (final Exception e) { log.error("Unable to load optimisation configuration file '{}'.", configurationFile, e); } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java index b21bea72..faf31bd3 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java @@ -1,6 +1,6 @@ package de.evoal.core.main.producer; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.languages.model.ddl.DataDescription; @@ -21,7 +21,7 @@ public class SpecificationProducer { @Produces @Dependent @Named("genotype-description") - public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array genotype) { + public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = CoreBlackboardEntries.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.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java index 189f6d09..e83f4c02 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java @@ -1,6 +1,7 @@ package de.evoal.core.main.search; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; +import de.evoal.core.api.cdi.Application; import de.evoal.core.api.cdi.BeanFactory; import de.evoal.core.api.cdi.BlackboardValue; import de.evoal.core.api.cdi.MainClass; @@ -24,7 +25,13 @@ import java.util.stream.Collectors; import java.util.stream.Stream; @Slf4j -@Named("evaluation") +@Application(""" +Evaluates a heuristic search using multiple targets. + +Each target is searched for 'core:evaluation-iterations' times to allow a +proper empirical evaluation. +""") +@Named("heuristic-search-evaluation") @ApplicationScoped public class HeuristicSearchEvaluation implements MainClass { @Inject @@ -34,11 +41,11 @@ public class HeuristicSearchEvaluation implements MainClass { private WriterContext context; @Inject - @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE) + @BlackboardValue(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION_FILE) private String heuristicFile; @Inject - @BlackboardValue(BlackboardEntry.EVALUATION_ITERATIONS) + @BlackboardValue(CoreBlackboardEntries.EVALUATION_ITERATIONS) private int iterations; private File outputBaseDir; @@ -46,7 +53,7 @@ public class HeuristicSearchEvaluation implements MainClass { private List<Pair<Properties, Properties>> targets; @Inject - @BlackboardValue(BlackboardEntry.TARGET_POINTS_FILE) + @BlackboardValue(CoreBlackboardEntries.TARGET_POINTS_FILE) private String targetFile; @Inject @@ -64,7 +71,7 @@ public class HeuristicSearchEvaluation implements MainClass { log.info(" running {} iterations.", iterations); /* prepare output directory */ - this.outputBaseDir = new File(board.<String>get(BlackboardEntry.EVALUATION_OUTPUT_FOLDER)); + this.outputBaseDir = new File(board.<String>get(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER)); targets = targetStream.collect(Collectors.toList()); @@ -93,15 +100,15 @@ public class HeuristicSearchEvaluation implements MainClass { context.bindColumn(targetColumn, targetIndex); // board.bind(BlackboardEntry.TARGET_PROPERTIES_SOURCE, target.getFirst()); - board.bind(BlackboardEntry.TARGET_PROPERTIES, target.getSecond()); - board.bind(BlackboardEntry.EVALUATION_OUTPUT_FOLDER, outputBaseDir); + board.bind(CoreBlackboardEntries.TARGET_PROPERTIES, target.getSecond()); + board.bind(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER, outputBaseDir); log.info("Evaluating with target {} -> {}.", targetIndex, target); for (int i = 0; i < iterations; ++i) { log.info("Running {}/{}", i, iterations); final String run = convertToString(i, runLength); - board.bind(BlackboardEntry.EVALUATION_RUN, run); + board.bind(CoreBlackboardEntries.EVALUATION_RUN, run); context.bindColumn(runColumn, i); BeanFactory.create(EvolutionaryAlgorithmSearch.class) diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java index d7ab7f4a..ff78cc18 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java @@ -1,7 +1,8 @@ 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.board.CoreBlackboardEntries; +import de.evoal.core.api.cdi.Application; import de.evoal.core.api.cdi.BeanFactory; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.cdi.MainClass; @@ -19,6 +20,10 @@ import javax.inject.Named; import java.io.File; import java.util.stream.Stream; +@Application(""" +This application starts a heuristic search for an optimal solution based on a +problem specification. +""") @Named("heuristic-search") @ApplicationScoped public class HeuristicSearchMain implements MainClass { @@ -29,21 +34,21 @@ public class HeuristicSearchMain implements MainClass { private WriterContext context; @Inject - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm") private Instance algorithmConfiguration; @Override public void run() { - final String outputFolder = board.get(BlackboardEntry.EVALUATION_OUTPUT_FOLDER); - final String heuristicFileName = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE); + final String outputFolder = board.get(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER); + final String heuristicFileName = board.get(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION_FILE); final File outputBaseDir = HeuristicSearchUtils.calculateOutputBaseDir(new File(outputFolder), new File(heuristicFileName)); HeuristicSearchUtils.addColumn(context,"target", ColumnType.Integer, 0); HeuristicSearchUtils.addColumn(context,"run", ColumnType.Integer, 0); - board.bind(BlackboardEntry.EVALUATION_OUTPUT_FOLDER, outputBaseDir); - board.bind(BlackboardEntry.EVALUATION_RUN, "0"); + board.bind(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER, outputBaseDir); + board.bind(CoreBlackboardEntries.EVALUATION_RUN, "0"); BeanFactory.create(OptimisationAlgorithm.class) .init(algorithmConfiguration) @@ -55,6 +60,6 @@ public class HeuristicSearchMain implements MainClass { targets.findFirst() .orElseThrow(() -> {throw new IllegalStateException("No target point found");}); - board.bind(BlackboardEntry.TARGET_PROPERTIES, targetProperties.getSecond()); + board.bind(CoreBlackboardEntries.TARGET_PROPERTIES, targetProperties.getSecond()); } } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java index 7403629f..ac5fe40e 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java @@ -1,6 +1,6 @@ package de.evoal.core.main.statistics; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.statistics.StatisticsWriter; import de.evoal.core.api.utils.Requirements; @@ -21,7 +21,7 @@ public class StatisticsFactory { @Produces @Dependent @Named("statistics") - public StatisticsWriter create(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "statistics") Instance instance) { + public StatisticsWriter create(final @ConfigurationValue(entry = CoreBlackboardEntries.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.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java index c84d9df3..d7a058b1 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java @@ -1,7 +1,6 @@ package de.evoal.core.main.statistics.fitness; -import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.BlackboardValue; import de.evoal.core.api.ea.fitness.comparator.FitnessValue; import de.evoal.core.api.properties.Properties; @@ -10,7 +9,6 @@ import de.evoal.languages.model.instance.Instance; import io.jenetics.Phenotype; import io.jenetics.engine.EvolutionResult; import io.jenetics.util.ISeq; -import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -30,7 +28,7 @@ import java.util.List; public class FitnessStatistics implements StatisticsWriter { @Inject - @BlackboardValue(BlackboardEntry.TARGET_PROPERTIES) + @BlackboardValue(CoreBlackboardEntries.TARGET_PROPERTIES) private Provider<Properties> targetSpecification; @Inject diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java index cc120272..f2bb0506 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java @@ -1,6 +1,6 @@ package de.evoal.core.main.statistics.writer.csv; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.BlackboardValue; import de.evoal.core.api.statistics.Column; import de.evoal.core.api.statistics.Writer; @@ -18,7 +18,7 @@ import java.util.Map; @ApplicationScoped @Named("csv") public class CsvStrategy extends WriterStrategy { - @Inject @BlackboardValue(BlackboardEntry.EVALUATION_OUTPUT_FOLDER) + @Inject @BlackboardValue(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER) private File outputFolder; private final Map<String, CsvWriter> writerMap = new HashMap<>(); diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntries.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntries.java new file mode 100644 index 00000000..d7774951 --- /dev/null +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntries.java @@ -0,0 +1,36 @@ +package de.evoal.surrogate.api; + +import de.evoal.core.api.board.BlackboardEntries; +import de.evoal.core.api.cdi.Commandline; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Named; + +@ApplicationScoped +@Named("surrogate-entries") +public class SurrogateBlackboardEntries implements BlackboardEntries { + /** + * Loaded surrogate configuration. + */ + public static final String SURROGATE_CONFIGURATION = "surrogate:configuration"; + + /** + * Configuration file for the data generator. + */ + @Commandline(main = "", name = "surrogate:configuration-file", doc = "Configuration file for surrogate training, e.g., surrogate.mll.") + public static final String SURROGATE_CONFIGURATION_FILE = "surrogate:configuration-file"; + + /** + * File containing a pre-trained surrogate. + */ + @Commandline(main = "", name = "surrogate:pre-trained", doc = "File containing a pre-trained surrogate function written by \"surrogate-training\".") + public static final String SURROGATE_PRETRAINED_FILE = "surrogate:pre-trained"; + + /** + * File containing the training data. + */ + @Commandline(main = "", name = "surrogate:training-data", doc = "File containing data for the surrogate training.") + public static final String SURROGATE_TRAINING_DATA_FILE = "surrogate:training-data"; + + private SurrogateBlackboardEntries() {} +} diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntry.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntry.java deleted file mode 100644 index 4ca8baa9..00000000 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntry.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.evoal.surrogate.api; - -public final class SurrogateBlackboardEntry { - /** - * Loaded surrogate configuration. - */ - public static final String SURROGATE_CONFIGURATION = "surrogate:configuration"; - - /** - * Configuration file for the data generator. - */ - public static final String SURROGATE_CONFIGURATION_FILE = "surrogate:configuration-file"; - - /** - * File containing a pre-trained surrogate. - */ - public static final String SURROGATE_PRETRAINED_FILE = "surrogate:pre-trained"; - - /** - * File containing the training data. - */ - public static final String SURROGATE_TRAINING_DATA_FILE = "surrogate:training-data"; - - private SurrogateBlackboardEntry() {} -} diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/SurrogateMain.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/SurrogateMain.java index a28b8593..73a53066 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/SurrogateMain.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/SurrogateMain.java @@ -9,7 +9,7 @@ import javax.inject.Inject; import javax.inject.Named; import de.evoal.languages.model.mll.MachineLearningConfiguration; -import de.evoal.surrogate.api.SurrogateBlackboardEntry; +import de.evoal.surrogate.api.SurrogateBlackboardEntries; import de.evoal.surrogate.main.internal.StatementExecutor; import de.evoal.surrogate.main.internal.SymbolTable; import lombok.extern.slf4j.Slf4j; @@ -24,7 +24,7 @@ import lombok.extern.slf4j.Slf4j; public class SurrogateMain implements MainClass { @Inject - @BlackboardValue(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION) + @BlackboardValue(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION) private MachineLearningConfiguration mlConfiguration; @Inject diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MLLConfigurationProducer.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MLLConfigurationProducer.java index 6b03b28a..8203dc93 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MLLConfigurationProducer.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MLLConfigurationProducer.java @@ -13,7 +13,7 @@ import de.evoal.languages.model.el.impl.ELPackageImpl; import de.evoal.languages.model.mll.dsl.MachineLearningLanguageStandaloneSetup; import de.evoal.languages.model.mll.MachineLearningConfiguration; import de.evoal.languages.model.mll.impl.MllPackageImpl; -import de.evoal.surrogate.api.SurrogateBlackboardEntry; +import de.evoal.surrogate.api.SurrogateBlackboardEntries; import lombok.extern.slf4j.Slf4j; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; @@ -32,7 +32,7 @@ import java.util.Optional; @Slf4j public class MLLConfigurationProducer { public void loadModel(final @Observes BlackboardEntry value, final Blackboard board) { - if(!value.isSame(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION_FILE)) { + if(!value.isSame(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION_FILE)) { return; } @@ -55,7 +55,7 @@ public class MLLConfigurationProducer { } final MachineLearningConfiguration configuration = read(file).get(); - board.bind(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION, configuration); + board.bind(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION, configuration); } /** @@ -112,7 +112,7 @@ public class MLLConfigurationProducer { } @Produces @Dependent - @BlackboardValue(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION) + @BlackboardValue(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION) public MachineLearningConfiguration injectMachineLearningConfiguration(final InjectionPoint ip, final Blackboard board) { final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class); final Object result = board.get(value.value()); 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 dacc2251..87ebe674 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 @@ -2,6 +2,7 @@ package de.evoal.surrogate.main.cdi; import de.evoal.core.api.board.Blackboard; import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.properties.info.PropertiesDependencies; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; @@ -9,7 +10,7 @@ import de.evoal.core.api.utils.Requirements; import de.evoal.languages.model.instance.DataReference; import de.evoal.languages.model.mll.PartialSurrogateFunctionDefinition; import de.evoal.languages.model.mll.SurrogateDefinition; -import de.evoal.surrogate.api.SurrogateBlackboardEntry; +import de.evoal.surrogate.api.SurrogateBlackboardEntries; import de.evoal.surrogate.api.configuration.FunctionCombinerConfiguration; import de.evoal.surrogate.api.configuration.PartialFunctionConfiguration; import de.evoal.surrogate.api.configuration.SurrogateConfiguration; @@ -40,11 +41,11 @@ public class SurrogateProducer { private SurrogateConfiguration configuration; public void setPreTrainedSurrogate(final @Observes BlackboardEntry event, final Blackboard board, final Function<@NonNull File, @NonNull SurrogateConfiguration> loader) { - if(!event.isSame(SurrogateBlackboardEntry.SURROGATE_PRETRAINED_FILE)) { + if(!event.isSame(SurrogateBlackboardEntries.SURROGATE_PRETRAINED_FILE)) { return; } - final String filename = board.get(SurrogateBlackboardEntry.SURROGATE_PRETRAINED_FILE); + final String filename = board.get(SurrogateBlackboardEntries.SURROGATE_PRETRAINED_FILE); final File file = new File(filename); log.info("Using pre-trained surrogate model {}.", filename); @@ -55,8 +56,8 @@ public class SurrogateProducer { this.configuration = loader.apply(file); - final EObject mlConfiguration = board.get(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION); - final EObject eaConfiguration = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION); + final EObject mlConfiguration = board.get(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION); + final EObject eaConfiguration = board.get(CoreBlackboardEntries.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/cdi/TargetPointLoader.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/TargetPointLoader.java index 1e7d29d7..5511a8a3 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/TargetPointLoader.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/TargetPointLoader.java @@ -2,6 +2,7 @@ package de.evoal.surrogate.main.cdi; import de.evoal.core.api.board.Blackboard; import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.properties.PropertiesPair; import de.evoal.core.api.properties.PropertiesSpecification; import javax.enterprise.context.ApplicationScoped; @@ -33,12 +34,11 @@ public class TargetPointLoader { */ private PropertiesBasedPropertiesStreamSupplier loadedProperties; - private PropertiesStreamSupplier targetPoints; @SneakyThrows public void load(final @Observes BlackboardEntry entry) { - if (!BlackboardEntry.TARGET_POINTS_FILE.equals(entry)) { + if (!CoreBlackboardEntries.TARGET_POINTS_FILE.equals(entry)) { return; } 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 3c0454d2..2064686e 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 @@ -1,7 +1,7 @@ package de.evoal.surrogate.main.ea; import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.ea.codec.CustomCodec; import de.evoal.core.api.ea.initial.InitialPopulation; @@ -10,7 +10,7 @@ import de.evoal.core.api.properties.PropertiesSpecification; 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.SurrogateBlackboardEntries; import io.jenetics.Gene; import io.jenetics.Genotype; import io.jenetics.engine.Engine; @@ -28,7 +28,7 @@ import java.io.File; public class TrainingInitialPopulation<G extends Gene<?, G>, C extends Comparable<C>> implements InitialPopulation<G, C> { @Inject - @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population") private int sizeOfPopulation; @Inject @@ -60,7 +60,7 @@ public class TrainingInitialPopulation<G extends Gene<?, G>, C extends Comparabl } private ISeq<Genotype<G>> createInitialPopulation() { - final String filename = board.get(SurrogateBlackboardEntry.SURROGATE_TRAINING_DATA_FILE); + final String filename = board.get(SurrogateBlackboardEntries.SURROGATE_TRAINING_DATA_FILE); final File trainingFile = new File(filename); log.info("Using training data from {} for population.", filename); 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 95d8103b..cbbbdef6 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 @@ -1,6 +1,6 @@ package de.evoal.surrogate.main.ea; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.BeanFactory; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.ea.initial.InitialPopulation; @@ -21,7 +21,7 @@ public class TrainingProducer { @Produces @Dependent @Named("training") - public InitialPopulation create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) { + public InitialPopulation create(@ConfigurationValue(entry = CoreBlackboardEntries.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/ea/TrainingRepairStrategy.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingRepairStrategy.java index 254e4c4b..545eab0a 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingRepairStrategy.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingRepairStrategy.java @@ -8,15 +8,13 @@ import de.evoal.core.api.properties.PropertiesSpecification; 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.SurrogateBlackboardEntries; import io.jenetics.Gene; import io.jenetics.Genotype; import io.jenetics.Phenotype; -import io.jenetics.util.ISeq; import io.jenetics.util.RandomRegistry; import lombok.extern.slf4j.Slf4j; -import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.inject.Named; @@ -45,7 +43,7 @@ public class TrainingRepairStrategy<G extends Gene<?, G>, C extends Comparable<? @Override public RepairStrategy init(final Instance configuration) { - final String filename = board.get(SurrogateBlackboardEntry.SURROGATE_TRAINING_DATA_FILE); + final String filename = board.get(SurrogateBlackboardEntries.SURROGATE_TRAINING_DATA_FILE); final File trainingFile = new File(filename); log.info("Using training data from {} for population.", filename); 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 e3a13aea..c141bda6 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 @@ -1,6 +1,6 @@ package de.evoal.surrogate.main.statistics.correlated; -import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.statistics.*; import de.evoal.core.api.utils.LanguageHelper; @@ -60,7 +60,7 @@ public class GenerationStatisticsWriter implements StatisticsWriter { @Inject private Provider<Function<Properties, Properties>> fitnessFactory; - @Inject @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") + @Inject @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") private Instance config; @Inject diff --git a/src/core/de.evoal.surrogate.api/src/main/java/module-info.java b/src/core/de.evoal.surrogate.api/src/main/java/module-info.java index 97e2c58b..2cf1213f 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/module-info.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/module-info.java @@ -33,8 +33,9 @@ module de.evoal.surrogate.api { exports de.evoal.surrogate.api.configuration; // open packages for CDI - opens de.evoal.surrogate.api.training to weld.core.impl; + opens de.evoal.surrogate.api to weld.core.impl; opens de.evoal.surrogate.api.configuration to com.fasterxml.jackson.databind; + opens de.evoal.surrogate.api.training to weld.core.impl; opens de.evoal.surrogate.main to weld.core.impl; opens de.evoal.surrogate.main.cdi to weld.core.impl; diff --git a/src/core/de.evoal.surrogate.ws/src/main/java/de/evoal/surrogate/ws/WebServiceFitness.java b/src/core/de.evoal.surrogate.ws/src/main/java/de/evoal/surrogate/ws/WebServiceFitness.java index 4aabaf11..e2810086 100644 --- a/src/core/de.evoal.surrogate.ws/src/main/java/de/evoal/surrogate/ws/WebServiceFitness.java +++ b/src/core/de.evoal.surrogate.ws/src/main/java/de/evoal/surrogate/ws/WebServiceFitness.java @@ -22,7 +22,7 @@ public class WebServiceFitness implements FitnessFunction { @Override public FitnessFunction init(final Instance config) { - LanguageHelper.lookup() +// LanguageHelper.lookup(); return this; } -- GitLab