From 79c0ee12f63f8b43983ae49829032887e5ba0e3e Mon Sep 17 00:00:00 2001 From: "Bernhard J. Berger" <bernhard.berger@uni-bremen.de> Date: Sun, 14 May 2023 13:17:36 +0200 Subject: [PATCH] Adapting to previous changes in DSL files and added a search path to DSL loading. --- .../de/evoal/approximative/density/ml.dl | 4 +- .../approximative/density/optimisation.dl | 4 +- .../de/evoal/core/ea/optimisation.dl | 60 +++++----- .../evoal/core/ea/utils/LanguageHelperTest.dl | 4 +- .../core/ea/utils/regressions/generator.dl | 6 +- .../de.evoal.core.main/scripts/run-search.sh | 1 - .../core/api/board/CoreBlackboardEntries.java | 44 +++---- .../main/language/SearchPathConfigurator.java | 29 +++++ .../producer/OptimisationModuleLoader.java | 5 + .../resources/de/evoal/core/constraint.dl | 4 +- .../src/main/resources/de/evoal/core/math.dl | 7 +- .../resources/de/evoal/core/optimisation.dl | 2 +- .../de/evoal/core/api/utils/definitions.dl | 4 +- .../main/cdi/GeneratorModuleProducer.java | 7 +- .../src/main/java/module-info.java | 1 + .../resources/de/evoal/generator/generator.dl | 18 +-- .../cdi/MachineLearningModuleProducer.java | 5 + .../src/main/java/module-info.java | 1 + .../src/main/java/module-info.java | 4 + .../resources/de/evoal/surrogate/simple/ml.dl | 8 +- .../resources/de/evoal/surrogate/svr/ml.dl | 42 ++++--- src/examples/generator/ackley.generator | 50 ++++---- src/examples/search/search.ol | 112 +++++++++--------- src/examples/surrogate/training.mll | 46 +++---- 24 files changed, 262 insertions(+), 206 deletions(-) create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/language/SearchPathConfigurator.java diff --git a/src/core/de.evoal.approximative.density/src/main/resources/de/evoal/approximative/density/ml.dl b/src/core/de.evoal.approximative.density/src/main/resources/de/evoal/approximative/density/ml.dl index af2115ce..16dc7673 100644 --- a/src/core/de.evoal.approximative.density/src/main/resources/de/evoal/approximative/density/ml.dl +++ b/src/core/de.evoal.approximative.density/src/main/resources/de/evoal/approximative/density/ml.dl @@ -4,12 +4,12 @@ module de.evoal.approximative.density.ml { * * @param bandwith Width for density calculation. */ - def void 'kernel-density-estimation'(float bandwidth); + def void 'kernel-density-estimation'(real bandwidth); /** * Measures density information using a gaussian kernel. * * @param bandwith Width for density calculation. */ - def void 'gaussian-density-estimation'(float bandwidth); + def void 'gaussian-density-estimation'(real bandwidth); } \ No newline at end of file diff --git a/src/core/de.evoal.approximative.density/src/main/resources/de/evoal/approximative/density/optimisation.dl b/src/core/de.evoal.approximative.density/src/main/resources/de/evoal/approximative/density/optimisation.dl index c94acc29..63af1771 100644 --- a/src/core/de.evoal.approximative.density/src/main/resources/de/evoal/approximative/density/optimisation.dl +++ b/src/core/de.evoal.approximative.density/src/main/resources/de/evoal/approximative/density/optimisation.dl @@ -13,12 +13,12 @@ module de.evoal.approximative.density.optimisation { /** * Exponent for the formula. */ - exponent : float; + exponent : real; /** * Exponent for the formula. */ - 'root-exponent' : float; + 'root-exponent' : real; } type 'kernel-density' extends density {} diff --git a/src/core/de.evoal.core.ea/src/main/resources/de/evoal/core/ea/optimisation.dl b/src/core/de.evoal.core.ea/src/main/resources/de/evoal/core/ea/optimisation.dl index e1c3ee5e..9a78c386 100644 --- a/src/core/de.evoal.core.ea/src/main/resources/de/evoal/core/ea/optimisation.dl +++ b/src/core/de.evoal.core.ea/src/main/resources/de/evoal/core/ea/optimisation.dl @@ -48,7 +48,7 @@ module de.evoal.core.ea.optimisation { } type 'standard-deviation' extends 'constraint-calculation' { - factor : float; + factor : real; } abstract type 'constraint-handling' {} @@ -62,7 +62,7 @@ module de.evoal.core.ea.optimisation { type 'repair-with-random' extends 'repair-strategy' {} type 'malus-for-fitness' extends 'constraint-handling' { - smoothing : float; + smoothing : real; } type selectors { @@ -77,12 +77,12 @@ module de.evoal.core.ea.optimisation { } type 'elite-selector' extends selector { - 'size-factor' : float; + 'size-factor' : real; 'non-elite-selector' : instance selector; } type 'boltzmann-selector' extends selector { - beta : float; + beta : real; } type 'exponential-rank-selector' extends selector { @@ -102,7 +102,7 @@ module de.evoal.core.ea.optimisation { } type 'tournament-selector' extends selector { - 'size-factor' : float; + 'size-factor' : real; } type 'truncation-selector' extends selector { @@ -117,86 +117,86 @@ module de.evoal.core.ea.optimisation { abstract type crossover {} type 'mean-alterer' extends crossover { - probability : float; + probability : real; } type 'correlation-mean-alterer' extends crossover { - probability : float; + probability : real; } type 'partial-matched-alterer' extends crossover { - probability : float; + probability : real; } type 'correlation-partial-matched-alterer' extends crossover { - probability : float; + probability : real; } type 'line-crossover' extends crossover { - probability : float; - position : float; + probability : real; + position : real; } type 'correlation-line-crossover' extends crossover { - probability : float; - position : float; + probability : real; + position : real; } type 'multi-point-crossover' extends crossover { - probability : float; + probability : real; count : int; } type 'correlation-multi-point-crossover' extends crossover { - probability : float; + probability : real; count : int; } type 'single-point-crossover' extends crossover { - probability : float; + probability : real; } type 'correlation-single-point-crossover' extends crossover { - probability : float; + probability : real; } type 'uniform-crossover' extends crossover { - 'crossover-probability' : float; - 'swap-probability' : float; + 'crossover-probability' : real; + 'swap-probability' : real; } type 'correlation-uniform-crossover' extends crossover { - 'crossover-probability' : float; - 'swap-probability' : float; + 'crossover-probability' : real; + 'swap-probability' : real; } abstract type mutator { } type 'gaussian-mutator' extends mutator { - probability : float; + probability : real; } type 'correlation-gaussian-mutator' extends mutator { - probability : float; - threshold : float; + probability : real; + threshold : real; } type 'swap-mutator' extends mutator { - probability : float; + probability : real; } type 'correlation-swap-mutator' extends mutator { - probability : float; - threshold : float; + probability : real; + threshold : real; } type 'bit-flip-mutator' extends mutator { - probability : float; + probability : real; } type 'correlation-bit-flip-mutator' extends mutator { - probability : float; - threshold : float; + probability : real; + threshold : real; } } \ No newline at end of file diff --git a/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.dl b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.dl index bde38ea5..0df35f3f 100644 --- a/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.dl +++ b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.dl @@ -3,10 +3,10 @@ type 'parent' { } type A { - 'float-field' : float; + 'float-field' : real; 'string-field' : string; 'integer-field' : int; 'boolean-field' : boolean; - 'array-1D-float' : array float; + 'array-1D-float' : array real; 'array-2D-int' : array array int; } \ No newline at end of file diff --git a/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/generator.dl b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/generator.dl index 84b046e8..f5d46e99 100644 --- a/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/generator.dl +++ b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/generator.dl @@ -7,7 +7,7 @@ type 'shekel' { /** * The recommended value for the vector a is (1/m)*{1,2,2,4,4,6,3,7,5,5}. */ - 'a' : array float; + 'a' : array real; /** * The recommended value for the constant c is { @@ -16,10 +16,10 @@ type 'shekel' { * {4.0, 1.0, 8.0, 6.0, 3.0, 2.0, 5.0, 8.0, 6.0, 7.0}, * {4.0, 1.0, 8.0, 6.0, 7.0, 9.0, 3.0, 1.0, 2.0, 3.6}}. */ - 'c' : array array float; + 'c' : array array real; /** * The recommended value for the constant m is 10. */ - 'm' : float; + 'm' : real; } diff --git a/src/core/de.evoal.core.main/scripts/run-search.sh b/src/core/de.evoal.core.main/scripts/run-search.sh index 4cc594fa..62e72327 100755 --- a/src/core/de.evoal.core.main/scripts/run-search.sh +++ b/src/core/de.evoal.core.main/scripts/run-search.sh @@ -11,7 +11,6 @@ cd $1 set -x java $CLASSPATH \ - "-Bcore:logging=debug" \ "-Bcore:main=heuristic-search" \ "-Bcore:optimisation-configuration-file=$2" \ "-Bcore:evaluation-output-folder=$3" 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 index 379ec68d..4c5ddefb 100644 --- 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 @@ -10,37 +10,32 @@ import javax.inject.Named; 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. + * Number of evaluation runs. */ - public static final String CONSTRAINT_FOLDER = "core:constraint-folder"; + @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"; /** - * Parameter to specify for logging leven. + * The actual output folder for the evaluation. */ - @Commandline(main = "", name = "core:logging", doc = "Logging level to use (ERROR,WARN,INFO,DEBUG)") - public static final String LOGGING_LEVEL = "core:logging"; + @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"; /** - * Number of evaluation runs. + * The evaluation run number. */ - @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"; + public static final String EVALUATION_RUN = "core:evaluation-run"; /** - * The evaluation run number. + * Parameter to specify for logging leven. */ - public static final String EVALUATION_RUN = "core:evaluation-run"; + @Commandline(main = "", name = "core:logging", doc = "Logging level to use (ERROR,WARN,INFO,DEBUG)") + public static final String LOGGING_LEVEL = "core:logging"; /** - * The actual output folder for the evaluation. + * Name of the main to run. */ - @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"; + public static final String MAIN = "core:main"; /** * The heuristic configuration. @@ -53,14 +48,19 @@ public class CoreBlackboardEntries implements BlackboardEntries { @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"; + + @Commandline(main="", name="core:search-path", doc="Additional search path entries for DSL lookup.") + public static final String SEARCH_PATH = "core:search-path"; /** * 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"; + + + /** + * The target properties to search for. + */ + public static final String TARGET_PROPERTIES = "core:target-properties"; } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/language/SearchPathConfigurator.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/language/SearchPathConfigurator.java new file mode 100644 index 00000000..08552403 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/language/SearchPathConfigurator.java @@ -0,0 +1,29 @@ +package de.evoal.core.main.language; + +import de.evoal.core.api.board.Blackboard; +import de.evoal.core.api.board.BlackboardEntry; +import de.evoal.core.api.board.CoreBlackboardEntries; +import de.evoal.languages.model.utils.scoping.ClasspathGlobalScopeProvider; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.event.Observes; +import javax.inject.Inject; +import java.io.File; +import java.util.Arrays; + +@ApplicationScoped +public class SearchPathConfigurator { + @Inject + private Blackboard board; + + public void configure(final @Observes BlackboardEntry entry) { + if (!entry.isSame(CoreBlackboardEntries.SEARCH_PATH)) { + return; + } + + final String searchPath = board.get(CoreBlackboardEntries.SEARCH_PATH); + final String [] searchPathEntries = searchPath.split(File.pathSeparator); + + ClasspathGlobalScopeProvider.SEARCH_PATH.addAll(Arrays.asList(searchPathEntries)); + } +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModuleLoader.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModuleLoader.java index ffed3f67..f1a49579 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModuleLoader.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModuleLoader.java @@ -17,6 +17,7 @@ import de.evoal.languages.model.dl.impl.DlPackageImpl; import de.evoal.languages.model.ol.OptimisationModule; import de.evoal.languages.model.ol.dsl.OptimisationLanguageStandaloneSetup; import de.evoal.languages.model.ol.impl.OLPackageImpl; +import de.evoal.languages.model.utils.scoping.ClasspathGlobalScopeProvider; import lombok.extern.slf4j.Slf4j; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; @@ -51,6 +52,10 @@ public class OptimisationModuleLoader { throw new IllegalArgumentException("Unable to read optimisation configuration file: " + configurationFileName); } + final File folder = configurationFile.getAbsoluteFile().getParentFile(); + ClasspathGlobalScopeProvider.SEARCH_PATH.add(folder.toString()); + log.info("Adding {} to search path.", folder); + initializeEMF(); final Injector ealInjector = new OptimisationLanguageStandaloneSetup().createInjectorAndDoEMFRegistration(); diff --git a/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/constraint.dl b/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/constraint.dl index 9afa3987..2048ea0d 100644 --- a/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/constraint.dl +++ b/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/constraint.dl @@ -7,9 +7,9 @@ module de.evoal.core.constraint { * <li>Reference to the data ...</li> * </ol> */ - def void variance(data reference, float variance); + def void variance(data reference, real variance); - def void connection(data ref1, data ref2, float connection); + def void connection(data ref1, data ref2, real connection); def void constraint(expression exp, string category); } diff --git a/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/math.dl b/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/math.dl index 7b397122..bccb079d 100644 --- a/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/math.dl +++ b/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/math.dl @@ -2,5 +2,10 @@ module de.evoal.core.math { /** * The one and only PI. */ - const float PI := 3.1415926535; + const real PI := 3.1415926535; + + /** + * The one and only PI. + */ + const real 'π' := 3.1415926535; } diff --git a/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/optimisation.dl b/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/optimisation.dl index 17fc972f..f124a67a 100644 --- a/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/optimisation.dl +++ b/src/core/de.evoal.core.main/src/main/resources/de/evoal/core/optimisation.dl @@ -154,7 +154,7 @@ module de.evoal.core.optimisation { /** * Weights for summing the dimensions. */ - weights : array float; + weights : array real; } /** diff --git a/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/definitions.dl b/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/definitions.dl index 0ce286a3..ef6dcbcb 100644 --- a/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/definitions.dl +++ b/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/definitions.dl @@ -4,11 +4,11 @@ module de.evoal.core.api.utils.definitions { } type A { - 'float-field' : float; + 'float-field' : real; 'string-field' : string; 'integer-field' : int; 'boolean-field' : boolean; - 'array-1D-float' : array float; + 'array-1D-float' : array real; 'array-2D-int' : array array int; } } \ No newline at end of file diff --git a/src/core/de.evoal.generator.main/src/main/java/de/evoal/generator/main/cdi/GeneratorModuleProducer.java b/src/core/de.evoal.generator.main/src/main/java/de/evoal/generator/main/cdi/GeneratorModuleProducer.java index a9a41af0..8b882f99 100644 --- a/src/core/de.evoal.generator.main/src/main/java/de/evoal/generator/main/cdi/GeneratorModuleProducer.java +++ b/src/core/de.evoal.generator.main/src/main/java/de/evoal/generator/main/cdi/GeneratorModuleProducer.java @@ -15,6 +15,7 @@ import de.evoal.languages.model.base.impl.BasePackageImpl; import de.evoal.languages.model.generator.dsl.GeneratorDSLStandaloneSetup; import de.evoal.languages.model.generator.GeneratorModule; import de.evoal.languages.model.generator.impl.GeneratorPackageImpl; +import de.evoal.languages.model.utils.scoping.ClasspathGlobalScopeProvider; import lombok.extern.slf4j.Slf4j; import javax.enterprise.context.ApplicationScoped; @@ -31,7 +32,7 @@ import org.eclipse.xtext.resource.XtextResourceSet; @ApplicationScoped @Slf4j -public class GeneratroeModuleProducer { +public class GeneratorModuleProducer { public void loadModel(final @Observes BlackboardEntry value, final Blackboard board) { if(!value.isSame(GeneratorBlackboardEntries.GENERATOR_CONFIGURATION_FILE)) { return; @@ -55,6 +56,10 @@ public class GeneratroeModuleProducer { throw new IllegalArgumentException("Please specify a readable genrator file."); } + final File folder = file.getAbsoluteFile().getParentFile(); + ClasspathGlobalScopeProvider.SEARCH_PATH.add(folder.toString()); + log.info("Adding {} to search path.", folder); + final GeneratorModule configuration = read(file).get(); board.bind(GeneratorBlackboardEntries.GENERATOR_CONFIGURATION, configuration); } diff --git a/src/core/de.evoal.generator.main/src/main/java/module-info.java b/src/core/de.evoal.generator.main/src/main/java/module-info.java index 832107c3..155f81fe 100644 --- a/src/core/de.evoal.generator.main/src/main/java/module-info.java +++ b/src/core/de.evoal.generator.main/src/main/java/module-info.java @@ -26,6 +26,7 @@ module de.evoal.generator.main { requires de.evoal.core.main; requires commons.math3; requires com.google.guice; + requires de.evoal.languages.model.utils; opens de.evoal.generator; diff --git a/src/core/de.evoal.generator.main/src/main/resources/de/evoal/generator/generator.dl b/src/core/de.evoal.generator.main/src/main/resources/de/evoal/generator/generator.dl index 62d31442..19768659 100644 --- a/src/core/de.evoal.generator.main/src/main/resources/de/evoal/generator/generator.dl +++ b/src/core/de.evoal.generator.main/src/main/resources/de/evoal/generator/generator.dl @@ -112,17 +112,17 @@ module de.evoal.generator.generator { /** * The constant a is set to 20 in the original Ackley function. */ - 'a' : float := 20.0; + 'a' : real := 20.0; /** * The constant b is set to 0.2 in the original Ackley function. */ - b : float := 0.2; + b : real := 0.2; /** * The constant c is set to 2π in the original Ackley function. */ - 'c' : float := 2 * PI; + 'c' : real := 2 * PI; } /** @@ -191,7 +191,7 @@ module de.evoal.generator.generator { /** * Constant a, which is typically 10. */ - 'a' : float := 10.0; + 'a' : real := 10.0; } /** @@ -213,15 +213,15 @@ module de.evoal.generator.generator { /** * The constant values to append. */ - constants : array float; + constants : array real; } type distribution {} type 'multivariate-normal-distribution' extends distribution { - means : array float; - covariance : array array float; + means : array real; + covariance : array array real; } /** @@ -244,12 +244,12 @@ module de.evoal.generator.generator { /** * The distribution's expected value. */ - 'μ' : float; + 'μ' : real; /** * The distribution's standard deviation. */ - 'σ' : float; + 'σ' : real; } diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MachineLearningModuleProducer.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MachineLearningModuleProducer.java index 1dc67e95..8f7489bc 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MachineLearningModuleProducer.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MachineLearningModuleProducer.java @@ -10,6 +10,7 @@ import de.evoal.languages.model.dl.dsl.DefinitionLanguageStandaloneSetup; import de.evoal.languages.model.mll.dsl.MachineLearningLanguageStandaloneSetup; import de.evoal.languages.model.mll.MachineLearningModule; import de.evoal.languages.model.mll.impl.MllPackageImpl; +import de.evoal.languages.model.utils.scoping.ClasspathGlobalScopeProvider; import de.evoal.surrogate.api.SurrogateBlackboardEntries; import lombok.extern.slf4j.Slf4j; import org.eclipse.emf.common.util.URI; @@ -75,6 +76,10 @@ public class MachineLearningModuleProducer { private Optional<MachineLearningModule> read(final File modelFile) { log.info("Reading model file {}.", modelFile); + final File folder = modelFile.getAbsoluteFile().getParentFile(); + ClasspathGlobalScopeProvider.SEARCH_PATH.add(folder.toString()); + log.info("Adding {} to search path.", folder); + final Injector injector = new MachineLearningLanguageStandaloneSetup().createInjectorAndDoEMFRegistration(); new DataDescriptionLanguageStandaloneSetup().createInjectorAndDoEMFRegistration(); new DefinitionLanguageStandaloneSetup().createInjectorAndDoEMFRegistration(); 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 6b25b824..f1a1b1b0 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 @@ -29,6 +29,7 @@ module de.evoal.surrogate.api { requires de.evoal.languages.model.instance; requires de.evoal.core.ea; requires com.google.guice; + requires de.evoal.languages.model.utils; exports de.evoal.surrogate.api; exports de.evoal.surrogate.api.function; diff --git a/src/core/de.evoal.surrogate.simple/src/main/java/module-info.java b/src/core/de.evoal.surrogate.simple/src/main/java/module-info.java index f0b82609..a0d7f423 100644 --- a/src/core/de.evoal.surrogate.simple/src/main/java/module-info.java +++ b/src/core/de.evoal.surrogate.simple/src/main/java/module-info.java @@ -7,4 +7,8 @@ module de.evoal.surrogate.simple { requires de.evoal.core.main; requires de.evoal.surrogate.api; requires jakarta.inject.api; + + exports de.evoal.surrogate.simple.identity to weld.core.impl; + exports de.evoal.surrogate.simple.linear to weld.core.impl; + exports de.evoal.surrogate.simple.quadratic to weld.core.impl; } diff --git a/src/core/de.evoal.surrogate.simple/src/main/resources/de/evoal/surrogate/simple/ml.dl b/src/core/de.evoal.surrogate.simple/src/main/resources/de/evoal/surrogate/simple/ml.dl index 08d465ab..c4feef79 100644 --- a/src/core/de.evoal.surrogate.simple/src/main/resources/de/evoal/surrogate/simple/ml.dl +++ b/src/core/de.evoal.surrogate.simple/src/main/resources/de/evoal/surrogate/simple/ml.dl @@ -12,12 +12,12 @@ module de.evoal.surrogate.simple.ml { } type 'linear-regression' extends surrogate { - intercept : float; - slope : float; + intercept : real; + slope : real; } type 'simple-quadratic-regression' extends surrogate { - intercept : float; - slope : float; + intercept : real; + slope : real; } } \ No newline at end of file diff --git a/src/core/de.evoal.surrogate.svr/src/main/resources/de/evoal/surrogate/svr/ml.dl b/src/core/de.evoal.surrogate.svr/src/main/resources/de/evoal/surrogate/svr/ml.dl index 02497d1b..6810d782 100644 --- a/src/core/de.evoal.surrogate.svr/src/main/resources/de/evoal/surrogate/svr/ml.dl +++ b/src/core/de.evoal.surrogate.svr/src/main/resources/de/evoal/surrogate/svr/ml.dl @@ -1,52 +1,50 @@ import "definitions" from de.evoal.surrogate.ml; module de.evoal.surrogate.svr.ml { - abstract type 'svr-surrogate' extends surrogate {} - abstract type 'epsilon-svr' extends surrogate { - /** - * Some totally <b>accurate</b> description of a very soft margin. - */ - 'soft-margin' : float; - tolerance : float; - 'ε' : float; + /** + * Some totally <b>accurate</b> description of a very soft margin. + */ + 'soft-margin' : real; + tolerance : real; + 'ε' : real; } type 'gaussian-svr' extends 'epsilon-svr' { - 'σ' : float; + 'σ' : real; } type 'hellinger-svr' extends 'epsilon-svr' { - 'σ' : float; + 'σ' : real; } type 'hyperbolic-tangent-svr' extends 'epsilon-svr' { - 'σ' : float; - scale : float; - offset : float; + 'σ' : real; + scale : real; + offset : real; } type 'laplacian-svr' extends 'epsilon-svr' { - 'σ' : float; + 'σ' : real; } type 'linear-svr' extends 'epsilon-svr' { - 'σ' : float; + 'σ' : real; } type 'pearson-svr' extends 'epsilon-svr' { - 'σ' : float; - 'ω' : float; + 'σ' : real; + 'ω' : real; } type 'polynomial-svr' extends 'epsilon-svr' { - 'σ' : float; - 'degree' : int; - 'scale' : float; - 'offset' : float; + 'σ' : real; + 'degree' : int; + 'scale' : real; + 'offset' : real; } type 'thin-plate-spline-svr' extends 'epsilon-svr' { - 'σ' : float; + 'σ' : real; } } \ No newline at end of file diff --git a/src/examples/generator/ackley.generator b/src/examples/generator/ackley.generator index 78ed183b..e0d4b05a 100644 --- a/src/examples/generator/ackley.generator +++ b/src/examples/generator/ackley.generator @@ -3,29 +3,31 @@ import "definitions" from de.evoal.generator.generator; import "data" from ackley; -/** - * Introduce a simple pipeline that generates some test data using - * the ackley function. - */ -pipeline 'main-pipeline' [ +module ackley { /** - * First, we generate some normally distributed data. + * Introduce a simple pipeline that generates some test data using + * the ackley function. */ - step { - component 'normal-distribution' { - 'μ' := 0.0; - 'σ' := 5.12; - } - - writes [data 'x:0']; - } - step { - component 'ackley' { - } - - reads [data 'x:0']; - writes [data 'y:0']; - } -] - -write "ackley.json" with 1000 samples from executing [ pipeline 'main-pipeline']; \ No newline at end of file + pipeline 'main-pipeline' [ + /** + * First, we generate some normally distributed data. + */ + step { + component 'normal-distribution' { + 'μ' := 0.0; + 'σ' := 5.12; + } + + writes [data 'x:0']; + } + step { + component 'ackley' { + } + + reads [data 'x:0']; + writes [data 'y:0']; + } + ] + + write "ackley.json" with 1000 samples from executing [ pipeline 'main-pipeline']; +} \ No newline at end of file diff --git a/src/examples/search/search.ol b/src/examples/search/search.ol index 84e39045..bfc245af 100644 --- a/src/examples/search/search.ol +++ b/src/examples/search/search.ol @@ -8,62 +8,62 @@ import "definitions" from de.evoal.core.ea.optimisation; import "data" from search; -specify problem 'example-search' { - description := "Simple search"; - 'search-space' := [data 'x:0']; - 'optimisation-space' := [data 'y:0']; - 'maximise' := true; - 'optimisation-function' := 'benchmark-function' { - 'benchmark' := ackley {}; - }; -} +module search { + specify problem 'example-search' { + description := "Simple search"; + 'search-space' := [data 'x:0']; + 'optimisation-space' := [data 'y:0']; + 'maximise' := true; + 'optimisation-function' := 'benchmark-function' { + 'benchmark' := ackley {}; + }; + } + + + configure 'evolutionary-algorithm' for 'example-search' { + 'number-of-generations' := 100; + 'size-of-population' := 50; + 'maximum-age' := 100; + 'initialisation' := 'random-population' {}; + + 'comparator' := 'numeric-comparator' {}; -configure 'evolutionary-algorithm' for 'example-search' { - 'number-of-generations' := 100; - 'size-of-population' := 50; - 'maximum-age' := 100; - - 'initialisation' := 'random-population' {}; + genotype := [ + 'bit-chromosome' { + scale := 12; + genes:= [ + gene {content:= data 'x:0';} + ]; + } + ]; - 'comparator' := 'numeric-comparator' {}; - - genotype := [ - 'bit-chromosome' { - scale := 12; - genes:= [ - gene {content:= data 'x:0';} - ]; - } - ]; - - handlers := []; - - selectors := selectors { - offspring := 'roulette-wheel-selector' {}; - survivor := 'elite-selector' { - 'size-factor' := 0.3; - 'non-elite-selector' := 'tournament-selector' { - 'size-factor' := 0.1; - }; - }; - }; - - alterers := alterers { - crossover := [ - 'single-point-crossover' { - probability := 0.5; - - } - ]; - mutator := [ - 'bit-flip-mutator' { - probability := 0.5; - } - ]; - }; - - 'optimisation-function' := 'problem-function' {}; - - -} + handlers := []; + + selectors := selectors { + offspring := 'roulette-wheel-selector' {}; + survivor := 'elite-selector' { + 'size-factor' := 0.3; + 'non-elite-selector' := 'tournament-selector' { + 'size-factor' := 0.1; + }; + }; + }; + + alterers := alterers { + crossover := [ + 'single-point-crossover' { + probability := 0.5; + + } + ]; + mutator := [ + 'bit-flip-mutator' { + probability := 0.5; + } + ]; + }; + + 'optimisation-function' := 'problem-function' {}; + } +} \ No newline at end of file diff --git a/src/examples/surrogate/training.mll b/src/examples/surrogate/training.mll index c7947c02..a78c8be7 100644 --- a/src/examples/surrogate/training.mll +++ b/src/examples/surrogate/training.mll @@ -3,25 +3,27 @@ import "definitions" from de.evoal.surrogate.svr.ml; import "data" from surrogate; -prediction svr - maps 'x:0' - to 'y:0' - using - layer transfer - with function 'gaussian-svr' - mapping 'x:0' - to 'y:0' - with parameters - 'ε' := 1.4; - 'σ' := 3.0; - 'soft-margin' := 0.15; - tolerance := 0.1; - -for _counter in [1 to 10] loop - predict svr from "data.json" - and measure - 'cross-validation'(10); - 'R²'(); - end - and store to "svr_${_counter}.pson" -end +module training { + prediction svr + maps 'x:0' + to 'y:0' + using + layer transfer + with function 'gaussian-svr' + mapping 'x:0' + to 'y:0' + with parameters + 'ε' := 1.4; + 'σ' := 3.0; + 'soft-margin' := 0.15; + tolerance := 0.1; + + for _counter in [1 to 10] loop + predict svr from "data.json" + and measure + 'cross-validation'(10); + 'R²'(); + end + and store to "svr_${_counter}.pson" + end +} \ No newline at end of file -- GitLab