diff --git a/src/core/de.evoal.approximative.density/pom.xml b/src/core/de.evoal.approximative.density/pom.xml index 6a7f9a02465579a59aa1117a841a6c5cffcc4819..d6d004dfdc8810de5c5942e30262ecfef75191fc 100644 --- a/src/core/de.evoal.approximative.density/pom.xml +++ b/src/core/de.evoal.approximative.density/pom.xml @@ -7,6 +7,7 @@ <groupId>de.evoal</groupId> <artifactId>core.plugin</artifactId> <version>0.9.0-SNAPSHOT</version> + <relativePath>../de.evoal.core.plugin</relativePath> </parent> <artifactId>approximative.density</artifactId> diff --git a/src/core/de.evoal.approximative.density/src/main/java/de/evoal/approximative/density/ea/fitness/DensityBasedFitness.java b/src/core/de.evoal.approximative.density/src/main/java/de/evoal/approximative/density/ea/fitness/DensityBasedFitness.java index abaed5ee3f73c7c306ea0ec9eb098a2a7e5215d0..0d2d84351b10b884eb03754ea5195daf2f0698d9 100644 --- a/src/core/de.evoal.approximative.density/src/main/java/de/evoal/approximative/density/ea/fitness/DensityBasedFitness.java +++ b/src/core/de.evoal.approximative.density/src/main/java/de/evoal/approximative/density/ea/fitness/DensityBasedFitness.java @@ -1,13 +1,13 @@ package de.evoal.approximative.density.ea.fitness; import de.evoal.approximative.density.model.DensityData; -import de.evoal.core.api.ea.fitness.FitnessFunction; +import de.evoal.core.api.optimisation.OptimisationFunction; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.info.PropertiesRanges; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.core.api.utils.Requirements; -import de.evoal.core.api.ea.fitness.FitnessDecorator; +import de.evoal.core.api.optimisation.OptimisationFunctionDecorator; import de.evoal.languages.model.instance.Instance; import de.evoal.surrogate.api.configuration.PartialFunctionConfiguration; import de.evoal.surrogate.api.function.FunctionCombiner; @@ -22,7 +22,7 @@ import java.util.function.BiFunction; @Slf4j @Vetoed -public abstract class DensityBasedFitness extends FitnessDecorator { +public abstract class DensityBasedFitness extends OptimisationFunctionDecorator { private final BiFunction<PartialFunctionConfiguration, String, DensityData> modelCreator; @@ -55,7 +55,7 @@ public abstract class DensityBasedFitness extends FitnessDecorator { } @Override - public FitnessFunction init(final Instance config) { + public OptimisationFunction init(final Instance config) { log.info("Setting up density-based fitness calculation."); super.init(config); diff --git a/src/core/de.evoal.approximative.density/src/main/java/module-info.java b/src/core/de.evoal.approximative.density/src/main/java/module-info.java index ceeee4e243e62d31148c92dccdf11b45fb6d383c..ff9fde44b68bb8ab9118212da16205f15e4c6c3a 100644 --- a/src/core/de.evoal.approximative.density/src/main/java/module-info.java +++ b/src/core/de.evoal.approximative.density/src/main/java/module-info.java @@ -12,6 +12,7 @@ module de.evoal.approximative.density { requires de.evoal.surrogate.api; requires smile.math; + requires de.evoal.core.ea; opens de.evoal.approximative.density.ea.fitness to weld.core.impl; opens de.evoal.approximative.density.ea.surrogate.gof to weld.core.impl; diff --git a/src/core/de.evoal.core.arff/pom.xml b/src/core/de.evoal.core.arff/pom.xml index e54de0a6b515129a5c0d8dbaed480a11b6275a50..b5952996272360c97667b28aa933540e639c6776 100644 --- a/src/core/de.evoal.core.arff/pom.xml +++ b/src/core/de.evoal.core.arff/pom.xml @@ -7,6 +7,7 @@ <groupId>de.evoal</groupId> <artifactId>core.plugin</artifactId> <version>0.9.0-SNAPSHOT</version> + <relativePath>../de.evoal.core.plugin</relativePath> </parent> <artifactId>core.arff</artifactId> diff --git a/src/core/de.evoal.core.ea/pom.xml b/src/core/de.evoal.core.ea/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..168bd7c0906964a4c298cad2f15bd337bd1413ed --- /dev/null +++ b/src/core/de.evoal.core.ea/pom.xml @@ -0,0 +1,78 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>de.evoal</groupId> + <artifactId>core.plugin</artifactId> + <version>0.9.0-SNAPSHOT</version> + <relativePath>../de.evoal.core.plugin</relativePath> + </parent> + + <artifactId>core.ea</artifactId> + <name>EvoAl - Core - Evolutionary Algorithm</name> + + <dependencies> + <dependency> + <groupId>org.decimal4j</groupId> + <artifactId>decimal4j</artifactId> + <version>1.0.3</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>io.jenetics</groupId> + <artifactId>jenetics.ext</artifactId> + <version>${jenetics.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>com.github.haifengl</groupId> + <artifactId>smile-math</artifactId> + <version>${smile.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + </dependency> + + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>core.junit</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.10.1</version> + <configuration> + <annotationProcessorPaths> + <path> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + </path> + </annotationProcessorPaths> + <compilerArgs> + <arg>--add-exports</arg> + <arg>io.jenetics.base/io.jenetics.internal.math=de.evoal.core.ea</arg> + <arg>--add-exports</arg> + <arg>io.jenetics.base/io.jenetics.internal.util=de.evoal.core.ea</arg> + <arg>--add-exports</arg> + <arg>io.jenetics.base/io.jenetics.internal.collection=de.evoal.core.ea</arg> + </compilerArgs> + <forceJavacCompilerUse>true</forceJavacCompilerUse> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/cdi/Fitness.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/cdi/Fitness.java similarity index 91% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/cdi/Fitness.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/cdi/Fitness.java index f56446d97d73fab6676103d6a3015dca00ce0b1f..ef0c5e39b26f4bf8fea9bc015623d59986ff6b4e 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/cdi/Fitness.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/cdi/Fitness.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.cdi; +package de.evoal.core.ea.api.cdi; import javax.enterprise.util.Nonbinding; import javax.inject.Qualifier; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/codec/CustomCodec.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodec.java similarity index 93% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/codec/CustomCodec.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodec.java index 683b2d94a773a641e924b8952739471b6ed17c2d..1e15f7a100d52199bc7eeb2966886493f1be0f2f 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/codec/CustomCodec.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodec.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.codec; +package de.evoal.core.ea.api.codec; import de.evoal.core.api.properties.Properties; import io.jenetics.Gene; 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.ea/src/main/java/de/evoal/core/ea/api/constraints/calculation/CalculationFactory.java similarity index 77% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/calculation/CalculationFactory.java index 51ec56767a84b7ebb8578f06b90e24e708f317b0..abd116b8b93aa37845258bbf84da6e6945d1ba7e 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.ea/src/main/java/de/evoal/core/ea/api/constraints/calculation/CalculationFactory.java @@ -1,6 +1,7 @@ -package de.evoal.core.api.ea.constraints.calculation; +package de.evoal.core.ea.api.constraints.calculation; -import de.evoal.core.api.ea.constraints.model.Constraint; +import de.evoal.core.api.cdi.BeanFactory; +import de.evoal.core.ea.api.constraints.model.Constraint; import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import javax.enterprise.context.ApplicationScoped; @@ -8,9 +9,9 @@ import javax.enterprise.context.ApplicationScoped; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Instance; -import org.apache.deltaspike.core.api.provider.BeanProvider; import javax.inject.Inject; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -19,9 +20,8 @@ public class CalculationFactory { private final Map<String, Instance> calculationConfigurationByCategory = new HashMap<>(); @Inject - public CalculationFactory(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations) { - handlerConfigurations.getValues() - .stream() + public CalculationFactory(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Instance [] handlerConfigurations) { + Arrays.stream(handlerConfigurations) .map(Instance.class::cast) .filter(LanguageHelper.filterInstanceByType("constraint-handler")) .forEach(i -> { @@ -36,7 +36,7 @@ public class CalculationFactory { final Instance config = calculationConfigurationByCategory.get(constraint.getGroup()); final String calculationName = LanguageHelper.lookup(config, "name"); - final CalculationStrategy strategy = BeanProvider.getContextualReference(calculationName, false, CalculationStrategy.class); + final CalculationStrategy strategy = BeanFactory.create(calculationName, CalculationStrategy.class); strategy.init(constraint, config); return strategy; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationStrategy.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/calculation/CalculationStrategy.java similarity index 85% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationStrategy.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/calculation/CalculationStrategy.java index 24a389e4df5ec84f6800aecc0263dfefefc68d19..87e1f1790b29adc7f16d0dcfec23d8dd541037cb 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationStrategy.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/calculation/CalculationStrategy.java @@ -1,7 +1,7 @@ -package de.evoal.core.api.ea.constraints.calculation; +package de.evoal.core.ea.api.constraints.calculation; -import de.evoal.core.api.ea.constraints.strategies.CalculationResult; -import de.evoal.core.api.ea.constraints.model.Constraint; +import de.evoal.core.ea.api.constraints.strategies.CalculationResult; +import de.evoal.core.ea.api.constraints.model.Constraint; import de.evoal.core.api.properties.Properties; import de.evoal.languages.model.instance.Instance; import lombok.NonNull; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/Constraint.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/Constraint.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/Constraint.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/Constraint.java index c55abd06ba5ede6833bcf6623809477ff4c6d37e..d7e6d38c2e7fcacd13e4554d6d442c669ec26ac4 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/Constraint.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/Constraint.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.constraints.model; +package de.evoal.core.ea.api.constraints.model; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertySpecification; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/ConstraintResult.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/ConstraintResult.java similarity index 93% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/ConstraintResult.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/ConstraintResult.java index af43503062aeec3e5fb0249957816daab9dd1477..b5a2cb947166cfc34d6180b7a32511e2c6289c95 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/ConstraintResult.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/ConstraintResult.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.constraints.model; +package de.evoal.core.ea.api.constraints.model; import de.evoal.core.api.properties.PropertySpecification; import lombok.Data; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/ConstraintType.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/ConstraintType.java similarity index 78% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/ConstraintType.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/ConstraintType.java index 3ed3568a2d911de0ddeba80054377d8b4d1f31c8..9f306c3a2ed255245e6d585bc134a79d75a3c7b2 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/ConstraintType.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/ConstraintType.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.constraints.model; +package de.evoal.core.ea.api.constraints.model; /** * Type of the constraint. A constraint can either be an equality constraint diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/Constraints.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/Constraints.java similarity index 94% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/Constraints.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/Constraints.java index b34928c867e0e42f3b26c63de17738d416c3046a..70cb827ddbce81a963b9d71d221aa432478d688a 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/Constraints.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/Constraints.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.constraints.model; +package de.evoal.core.ea.api.constraints.model; import de.evoal.core.api.properties.Properties; import javax.enterprise.inject.Vetoed; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/DataConstraints.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/DataConstraints.java similarity index 97% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/DataConstraints.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/DataConstraints.java index 6a57f4171ef362dcd8a6a9f18682992e991eca3f..69699261c0ed9c585e38bc1c57a5e2cf46485bfe 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/DataConstraints.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/DataConstraints.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.constraints.model; +package de.evoal.core.ea.api.constraints.model; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.DataDescriptionModel; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/package-info.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/package-info.java similarity index 62% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/package-info.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/package-info.java index 31b616e2623cae00c5072441414b7a0b35d99250..e5e3b94fcc7f9f1f0ecc8bb4a13a08efe0ccb10d 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/model/package-info.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/model/package-info.java @@ -1,4 +1,4 @@ /** * The constraint model that can be used by implementing extensions. */ -package de.evoal.core.api.ea.constraints.model; \ No newline at end of file +package de.evoal.core.ea.api.constraints.model; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/package-info.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/package-info.java similarity index 72% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/package-info.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/package-info.java index 77b586b44bffab64e59bd74a25afd22b9bd55dc2..4fe22a2cf6d137a8479df115b2017ccc60efb5e7 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/package-info.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/package-info.java @@ -2,4 +2,4 @@ * This package contains everything that has to do with constraints of * genotypes or individuals. */ -package de.evoal.core.api.ea.constraints; \ No newline at end of file +package de.evoal.core.ea.api.constraints; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/CalculationResult.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/CalculationResult.java similarity index 89% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/CalculationResult.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/CalculationResult.java index 2c72effcd0d5a723b4fbebc0896b1918397559e9..89283d257539bcdd337b0d04036a957a65ae8da1 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/CalculationResult.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/CalculationResult.java @@ -1,6 +1,6 @@ -package de.evoal.core.api.ea.constraints.strategies; +package de.evoal.core.ea.api.constraints.strategies; -import de.evoal.core.api.ea.constraints.model.ConstraintResult; +import de.evoal.core.ea.api.constraints.model.ConstraintResult; import lombok.Data; /** diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/HandlingStrategy.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/HandlingStrategy.java similarity index 76% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/HandlingStrategy.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/HandlingStrategy.java index 3a0687c18a99c947255ec7a360d0fbca6ca18145..44ea5b58cfe3d61b9f2d8c5153b2a8e2b7d6e965 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/HandlingStrategy.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/HandlingStrategy.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.constraints.strategies; +package de.evoal.core.ea.api.constraints.strategies; /** * A constraint handling strategy. The actual implementation decides what to do with diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/RepairStrategy.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/RepairStrategy.java similarity index 88% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/RepairStrategy.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/RepairStrategy.java index f9b5493420738592d63296b6a069709b0ab13e8d..1fe3543c54493fb058f14173f08353ea1fc1752b 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/RepairStrategy.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/RepairStrategy.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.constraints.strategies; +package de.evoal.core.ea.api.constraints.strategies; import de.evoal.languages.model.instance.Instance; import io.jenetics.Gene; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/MalusForFitnessStrategy.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/MalusForFitnessStrategy.java similarity index 85% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/MalusForFitnessStrategy.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/MalusForFitnessStrategy.java index c6d19237bdb0e9b48de7c196e459d4814d5a96de..b74ca6b8a7f381f9689a37029e70245bdf34b0d6 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/MalusForFitnessStrategy.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/MalusForFitnessStrategy.java @@ -1,8 +1,8 @@ -package de.evoal.core.api.ea.constraints.strategies.fitness; +package de.evoal.core.ea.api.constraints.strategies.fitness; -import de.evoal.core.api.ea.constraints.strategies.HandlingStrategy; -import de.evoal.core.api.ea.constraints.strategies.fitness.internal.ChainFunction; -import de.evoal.core.api.ea.constraints.strategies.fitness.internal.IdentityFunction; +import de.evoal.core.ea.api.constraints.strategies.HandlingStrategy; +import de.evoal.core.ea.api.constraints.strategies.fitness.internal.ChainFunction; +import de.evoal.core.ea.api.constraints.strategies.fitness.internal.IdentityFunction; import de.evoal.core.api.properties.Properties; /** diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/MalusFunction.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/MalusFunction.java similarity index 89% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/MalusFunction.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/MalusFunction.java index f05f19b9b929957117a9e4570cb8bd08a4801771..ef7bf0962f285114901fc6ed6114e61f216f6906 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/MalusFunction.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/MalusFunction.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.constraints.strategies.fitness; +package de.evoal.core.ea.api.constraints.strategies.fitness; import de.evoal.core.api.properties.Properties; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/ChainFunction.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/ChainFunction.java similarity index 84% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/ChainFunction.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/ChainFunction.java index 1e78559538c904a0747faf1727a056cd00e10efd..60a503701dbaa32edc9fef30759e0407af319f96 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/ChainFunction.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/ChainFunction.java @@ -1,6 +1,6 @@ -package de.evoal.core.api.ea.constraints.strategies.fitness.internal; +package de.evoal.core.ea.api.constraints.strategies.fitness.internal; -import de.evoal.core.api.ea.constraints.strategies.fitness.MalusFunction; +import de.evoal.core.ea.api.constraints.strategies.fitness.MalusFunction; import de.evoal.core.api.properties.Properties; public class ChainFunction implements MalusFunction { diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/IdentityFunction.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/IdentityFunction.java similarity index 69% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/IdentityFunction.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/IdentityFunction.java index 268b71c7354233a3a684cec01c6aed298dee57bb..5f7d3f7e941ada2e4b91ab3fede2148bbd0cda7d 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/IdentityFunction.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/IdentityFunction.java @@ -1,6 +1,6 @@ -package de.evoal.core.api.ea.constraints.strategies.fitness.internal; +package de.evoal.core.ea.api.constraints.strategies.fitness.internal; -import de.evoal.core.api.ea.constraints.strategies.fitness.MalusFunction; +import de.evoal.core.ea.api.constraints.strategies.fitness.MalusFunction; import de.evoal.core.api.properties.Properties; public class IdentityFunction implements MalusFunction { diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/package-info.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/package-info.java similarity index 54% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/package-info.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/package-info.java index cc59a125f9fee7dc504421da26d3cd79c5246ceb..fc1c069dc9124fef0af3bc5ccc9a92d8c59705a6 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/internal/package-info.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/internal/package-info.java @@ -1,4 +1,4 @@ /** * Internal classes that are not inteded for usage by clients. */ -package de.evoal.core.api.ea.constraints.strategies.fitness.internal; \ No newline at end of file +package de.evoal.core.ea.api.constraints.strategies.fitness.internal; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/package-info.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/package-info.java similarity index 81% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/package-info.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/package-info.java index 9ead63b4869bf58610ae0ebfec29bbef32124180..678118e2be0ea74b85eec1128e1248d2a9c684e7 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/strategies/fitness/package-info.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/constraints/strategies/fitness/package-info.java @@ -4,4 +4,4 @@ * this strategy is to reduce the fitness based on the calculated constraint * difference. */ -package de.evoal.core.api.ea.constraints.strategies.fitness; \ No newline at end of file +package de.evoal.core.ea.api.constraints.strategies.fitness; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Correlation.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Correlation.java similarity index 89% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Correlation.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Correlation.java index ac64ab6d4668dc1ac60d54ea3d9829016b3c88f9..501285b70c6a0a631bcdd40713701dd6f87f24d2 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Correlation.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Correlation.java @@ -1,6 +1,6 @@ -package de.evoal.core.api.ea.correlations; +package de.evoal.core.ea.api.correlations; -import de.evoal.core.api.ea.codec.CustomCodec; +import de.evoal.core.ea.api.codec.CustomCodec; import lombok.Data; /** diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Correlations.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Correlations.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Correlations.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Correlations.java index 182a46aac46c686ac439027a4da69da34e151f90..f57489c259ebbc2bf43e2b9482ce10af1bb8843f 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Correlations.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Correlations.java @@ -1,6 +1,6 @@ -package de.evoal.core.api.ea.correlations; +package de.evoal.core.ea.api.correlations; -import de.evoal.core.api.ea.codec.CustomCodec; +import de.evoal.core.ea.api.codec.CustomCodec; import de.evoal.core.api.properties.Properties; import io.jenetics.Gene; import io.jenetics.Genotype; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Range.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Range.java similarity index 88% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Range.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Range.java index 598e46364c33b1c844bc0121d0c80c32a02b665a..d173fbd205a50aaa3b2c3ef2ab495b6c6cca1a80 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/Range.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/Range.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.correlations; +package de.evoal.core.ea.api.correlations; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/RangedCorrelation.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/RangedCorrelation.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/RangedCorrelation.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/RangedCorrelation.java index 064a7a9436e10c12882c2d7d58e2ab08f016dc6a..62de16112d4bc43667177e699336047ac4f95bba 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/correlations/RangedCorrelation.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/correlations/RangedCorrelation.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.ea.correlations; +package de.evoal.core.ea.api.correlations; import lombok.Data; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/initial/InitialPopulation.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/initial/InitialPopulation.java similarity index 83% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/initial/InitialPopulation.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/initial/InitialPopulation.java index 1d4192704c6a6cf104330aefc639726062c1b14a..aad1378be071788a69d0c0f8ad8af6ec5809117e 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/initial/InitialPopulation.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/initial/InitialPopulation.java @@ -1,12 +1,10 @@ -package de.evoal.core.api.ea.initial; +package de.evoal.core.ea.api.initial; import de.evoal.languages.model.instance.Instance; import io.jenetics.Gene; import io.jenetics.engine.Engine; import io.jenetics.engine.EvolutionStream; -import java.util.function.Function; - public interface InitialPopulation<G extends Gene<?, G>, C extends Comparable<C>> { InitialPopulation init(final Instance initialization); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/package-info.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/package-info.java similarity index 75% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/package-info.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/package-info.java index a3ac75c03170a0588590326a18c540ea6b860a98..436da35f9f979d4213d1d61609bad76877f85f9f 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/package-info.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/package-info.java @@ -1,4 +1,4 @@ /** * Base package for all classes that are related to the evolutionary algorithm. */ -package de.evoal.core.api.ea; \ No newline at end of file +package de.evoal.core.ea.api; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/AltererFactory.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/AltererFactory.java similarity index 61% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/AltererFactory.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/AltererFactory.java index bc094066f3bc5b62824fddf67392392e8eed6712..17886765ae9ce23f4030d2fa786ac66b8a1212b8 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/AltererFactory.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/AltererFactory.java @@ -1,14 +1,14 @@ -package de.evoal.core.main.ea.alterer; +package de.evoal.core.ea.main.alterer; import java.util.function.BiFunction; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; -import de.evoal.core.main.ea.alterer.crossover.*; -import de.evoal.core.main.ea.alterer.internal.MeanCorrelationAlterer; -import de.evoal.core.main.ea.alterer.mutator.SingleBitFlipCorrelationMutator; -import de.evoal.core.main.ea.alterer.mutator.SingleBitFlipMutator; -import de.evoal.core.main.ea.alterer.mutator.SwapCorrelationMutator; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.api.optimisation.OptimisationValue; +import de.evoal.core.ea.main.alterer.internal.MeanCorrelationAlterer; +import de.evoal.core.ea.main.alterer.mutator.SingleBitFlipMutator; +import de.evoal.core.ea.main.alterer.crossover.*; +import de.evoal.core.ea.main.alterer.mutator.SingleBitFlipCorrelationMutator; +import de.evoal.core.ea.main.alterer.mutator.SwapCorrelationMutator; +import de.evoal.core.ea.api.correlations.Correlations; import de.evoal.languages.model.instance.Instance; import de.evoal.core.api.utils.LanguageHelper; import io.jenetics.*; @@ -36,7 +36,7 @@ public class AltererFactory { * <li>None</li> * </ul> */ - public <G extends Gene<?, G>> Alterer<G, FitnessValue> create(final Instance config) { + public <G extends Gene<?, G>> Alterer<G, OptimisationValue> create(final Instance config) { final String name = LanguageHelper.lookup(config, "name"); log.info("Creating alterer with name '{}'.", name); @@ -44,7 +44,7 @@ public class AltererFactory { switch(name) { //case "CompositeAlterer": return createCompositeAlterer(config); case "mean-alterer": return createMeanAlterer(config); - case "correlation-mean-alterer": return (Alterer<G, FitnessValue>) createCorrelationMeanAlterer(config); + case "correlation-mean-alterer": return (Alterer<G, OptimisationValue>) createCorrelationMeanAlterer(config); case "partial-matched-alterer": return createPartiallyMatchedAlterer(config); case "correlation-partial-matched-alterer": return createCorrelationPartiallyMatchedAlterer(config); @@ -68,128 +68,128 @@ public class AltererFactory { throw new IllegalStateException("Selector '" + name + "' is unknown."); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createUniformCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createUniformCrossover(final Instance config) { final Double crossoverProbability = LanguageHelper.lookup(config, "crossover-probability"); final Double swapProbability = LanguageHelper.lookup(config,"swap-probability"); return new UniformCrossover<>(crossoverProbability, swapProbability); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createCorrelationUniformCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationUniformCrossover(final Instance config) { final Double crossoverProbability = LanguageHelper.lookup(config, "crossover-probability"); final Double swapProbability = LanguageHelper.lookup(config,"swap-probability"); return new UniformCorrelationCrossover(crossoverProbability, swapProbability, correlations); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createBitFlipMutator (final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createBitFlipMutator (final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); return new SingleBitFlipMutator(probability); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createCorrelationBitFlipMutator (final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationBitFlipMutator (final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); final Double threshold = LanguageHelper.lookup(config, "threshold"); return new SingleBitFlipCorrelationMutator(probability, threshold, correlations); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createSwapMutator (final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createSwapMutator (final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); return new SwapMutator<>(probability); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createCorrelationSwapMutator (final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationSwapMutator (final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); final Double threshold = LanguageHelper.lookup(config, "threshold"); return new SwapCorrelationMutator<>(probability, threshold, correlations); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createSinglePointCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createSinglePointCrossover(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); return new SinglePointCrossover<>(probability); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createCorrelationSinglePointCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationSinglePointCrossover(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); return new SinglePointCorrelationCrossover(probability, correlations); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createPartiallyMatchedAlterer(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createPartiallyMatchedAlterer(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); - return (Alterer<G, FitnessValue>) new PartiallyMatchedCrossover(probability); + return (Alterer<G, OptimisationValue>) new PartiallyMatchedCrossover(probability); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createCorrelationPartiallyMatchedAlterer(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationPartiallyMatchedAlterer(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); - return (Alterer<G, FitnessValue>) new PartiallyMatchedCorrelationCrossover<G, FitnessValue>(probability, correlations); + return (Alterer<G, OptimisationValue>) new PartiallyMatchedCorrelationCrossover<G, OptimisationValue>(probability, correlations); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createMultiPointCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createMultiPointCrossover(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); final Integer count = LanguageHelper.lookup(config, "count"); return new MultiPointCrossover<>(probability, count); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createCorrelationMultiPointCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationMultiPointCrossover(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); final Integer count = LanguageHelper.lookup(config, "count"); return new MultiPointCorrelationCrossover<>(probability, count, correlations); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createMeanAlterer(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createMeanAlterer(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); - return (Alterer<G, FitnessValue>) new MeanAlterer(probability); + return (Alterer<G, OptimisationValue>) new MeanAlterer(probability); } - private <G extends NumericGene<?, G> & Mean<G>> Alterer<G, FitnessValue> createCorrelationMeanAlterer(final Instance config) { + private <G extends NumericGene<?, G> & Mean<G>> Alterer<G, OptimisationValue> createCorrelationMeanAlterer(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); - return (Alterer<G, FitnessValue>) new MeanCorrelationAlterer<G, FitnessValue>(probability, correlations); + return (Alterer<G, OptimisationValue>) new MeanCorrelationAlterer<G, OptimisationValue>(probability, correlations); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createLineCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createLineCrossover(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); final Double position = LanguageHelper.lookup(config, "position"); return new LineCrossover(probability, position); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createCorrelationLineCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationLineCrossover(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); final Double position = LanguageHelper.lookup(config, "position"); return new LineCorrelationCrossover(probability, position, correlations); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createIntermediateCrossover(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createIntermediateCrossover(final Instance config) { throw new IllegalStateException("Unsupported alterer."); } - private <G extends Gene<?,G>> Alterer<G, FitnessValue> createGaussianMutator(final Instance config) { + private <G extends Gene<?,G>> Alterer<G, OptimisationValue> createGaussianMutator(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); return new GaussianMutator(probability); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createGaussianCorrelationMutator(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createGaussianCorrelationMutator(final Instance config) { final Double probability = LanguageHelper.lookup(config, "probability"); final Double threshold = LanguageHelper.lookup(config, "threshold"); return factory.apply(probability, threshold); } - private <G extends Gene<?, G>> Alterer<G, FitnessValue> createCompositeAlterer(final Instance config) { + private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCompositeAlterer(final Instance config) { throw new IllegalStateException("Unsupported alterer."); } } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/CorrelationCrossover.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/CorrelationCrossover.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/CorrelationCrossover.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/CorrelationCrossover.java index 6c905c34f7451349bb308839f7e4660bf2824f44..8561807797763dd22c66271e90f4ed09ecd84b13 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/CorrelationCrossover.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/CorrelationCrossover.java @@ -1,7 +1,7 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlation; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.*; import io.jenetics.util.MSeq; import io.jenetics.util.RandomRegistry; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/CorrelationCrossoverMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/CorrelationCrossoverMemento.java similarity index 71% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/CorrelationCrossoverMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/CorrelationCrossoverMemento.java index 904ae7192a4ad72a8eaeb850a80ecea18a4780a4..d68d8672bb926d572248d05b54fb147cfd71d033 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/CorrelationCrossoverMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/CorrelationCrossoverMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; public interface CorrelationCrossoverMemento<T extends CorrelationCrossoverMemento<T>> { diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/LineCorrelationCrossover.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/LineCorrelationCrossover.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/LineCorrelationCrossover.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/LineCorrelationCrossover.java index f5b4e587614f4f2a5908a078d939db991d87d0dc..7fdaa2dc36accff2693c32d5b04ac6814956be36 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/LineCorrelationCrossover.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/LineCorrelationCrossover.java @@ -1,7 +1,7 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; import de.evoal.core.api.utils.Requirements; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.NumericGene; import io.jenetics.util.MSeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/LineCorrelationCrossoverMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/LineCorrelationCrossoverMemento.java similarity index 87% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/LineCorrelationCrossoverMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/LineCorrelationCrossoverMemento.java index 53b7466cbfe64fcbb14e2acd5e5f051035d28c01..19761ac27cbf340a58e258bb7ce8c93a9b8c103c 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/LineCorrelationCrossoverMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/LineCorrelationCrossoverMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; import io.jenetics.util.RandomRegistry; import lombok.Data; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/MultiPointCorrelationCrossover.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/MultiPointCorrelationCrossover.java similarity index 97% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/MultiPointCorrelationCrossover.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/MultiPointCorrelationCrossover.java index 6c8228779ee5b8f8d3aa5487afd1799b8a009d4b..2b0e3f0e684b5cb3838061ffb21da44ccf1448ae 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/MultiPointCorrelationCrossover.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/MultiPointCorrelationCrossover.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.Gene; import io.jenetics.util.MSeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/MultiPointCorrelationCrossoverMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/MultiPointCorrelationCrossoverMemento.java similarity index 89% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/MultiPointCorrelationCrossoverMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/MultiPointCorrelationCrossoverMemento.java index f7513b13e73e437b64349c9e3f23a30121fac4c8..d7acdba94660a02b0f67f7ba8dd3f28f9b9c45c5 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/MultiPointCorrelationCrossoverMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/MultiPointCorrelationCrossoverMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; import io.jenetics.internal.math.Subset; import io.jenetics.util.RandomRegistry; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/PartiallyMatchedCorrelationCrossover.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/PartiallyMatchedCorrelationCrossover.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/PartiallyMatchedCorrelationCrossover.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/PartiallyMatchedCorrelationCrossover.java index 6df51c8c7baf1117c6d1497bf84c28a8e33a6c45..a9bafbc4bf1100ed97b9551c995a76c6b47dc3ae 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/PartiallyMatchedCorrelationCrossover.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/PartiallyMatchedCorrelationCrossover.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.EnumGene; import io.jenetics.util.MSeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/PartiallyMatchedCorrelationCrossoverMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/PartiallyMatchedCorrelationCrossoverMemento.java similarity index 87% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/PartiallyMatchedCorrelationCrossoverMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/PartiallyMatchedCorrelationCrossoverMemento.java index 37ebc42c21b2e3f32c3d29919a78ca0097dca48c..8fa3f211abc884c0d8be60a41a31bee6dfafa575 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/PartiallyMatchedCorrelationCrossoverMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/PartiallyMatchedCorrelationCrossoverMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; import io.jenetics.internal.math.Subset; import io.jenetics.util.RandomRegistry; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/SinglePointCorrelationCrossover.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/SinglePointCorrelationCrossover.java similarity index 94% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/SinglePointCorrelationCrossover.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/SinglePointCorrelationCrossover.java index df7d99e346c22e0d425f1aaaa37f5d1fbf2c48bf..785edcbb29ddfa53c1533d0fcce754a664f43cad 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/SinglePointCorrelationCrossover.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/SinglePointCorrelationCrossover.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.Gene; import io.jenetics.util.MSeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/SinglePointCorrelationCrossoverMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/SinglePointCorrelationCrossoverMemento.java similarity index 94% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/SinglePointCorrelationCrossoverMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/SinglePointCorrelationCrossoverMemento.java index d814190a7a46a5c3d09f8dc9bbc2a751120e4c0d..2c7d613d4c089cbe146d1f26b19fd491ce127616 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/SinglePointCorrelationCrossoverMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/SinglePointCorrelationCrossoverMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; import io.jenetics.util.RandomRegistry; import lombok.Getter; import lombok.Setter; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/UniformCorrelationCrossover.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/UniformCorrelationCrossover.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/UniformCorrelationCrossover.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/UniformCorrelationCrossover.java index f9f8bf64592a83afa2690a90b1aa71cfc680c8d5..4a8d095bce7b011544961c94982f1c4f214bb206 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/UniformCorrelationCrossover.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/UniformCorrelationCrossover.java @@ -1,7 +1,7 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; import de.evoal.core.api.utils.Requirements; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.Gene; import io.jenetics.util.MSeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/UniformCorrelationCrossoverMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/UniformCorrelationCrossoverMemento.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/UniformCorrelationCrossoverMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/UniformCorrelationCrossoverMemento.java index c48d34fb500d5b380dea892dd28e81816559e186..4366384e2709b76cbae115560621469b2f6364d7 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/crossover/UniformCorrelationCrossoverMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/crossover/UniformCorrelationCrossoverMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.crossover; +package de.evoal.core.ea.main.alterer.crossover; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; import io.jenetics.util.RandomRegistry; import lombok.Getter; import lombok.Setter; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/AbstractCorrelationAlterer.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/AbstractCorrelationAlterer.java similarity index 92% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/AbstractCorrelationAlterer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/AbstractCorrelationAlterer.java index ec6b6646247e49cf6e1a2c0d348e14ab8d452d48..a7f727eae16609f601673d8f2bbae655342bd423 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/AbstractCorrelationAlterer.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/AbstractCorrelationAlterer.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.alterer.internal; +package de.evoal.core.ea.main.alterer.internal; import io.jenetics.AbstractAlterer; import io.jenetics.Gene; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/CorrelationCombineAlterer.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/CorrelationCombineAlterer.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/CorrelationCombineAlterer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/CorrelationCombineAlterer.java index 04c08da2183233e8e0670de5b80dc9679f4d4f3e..16b129ebf4ae1c39e2c6659e6c38b7f10ff9f349 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/CorrelationCombineAlterer.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/CorrelationCombineAlterer.java @@ -1,7 +1,7 @@ -package de.evoal.core.main.ea.alterer.internal; +package de.evoal.core.ea.main.alterer.internal; -import de.evoal.core.api.ea.correlations.Correlation; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.*; import io.jenetics.util.BaseSeq; import io.jenetics.util.MSeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/CorrelationRecombinator.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/CorrelationRecombinator.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/CorrelationRecombinator.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/CorrelationRecombinator.java index 0b05bb86bd62a4181114209d0f0bb5d6f41f9885..a2b677126101f58b2352d870fc24702ca1cc2ef3 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/CorrelationRecombinator.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/CorrelationRecombinator.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.alterer.internal; +package de.evoal.core.ea.main.alterer.internal; import io.jenetics.AltererResult; import io.jenetics.Gene; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/MeanCorrelationAlterer.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/MeanCorrelationAlterer.java similarity index 89% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/MeanCorrelationAlterer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/MeanCorrelationAlterer.java index 9bf8f08c8bdfabeb9e41bb679645a9807a484891..07be1b6bcab0e040c078513e470f7a3c62689794 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/internal/MeanCorrelationAlterer.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/internal/MeanCorrelationAlterer.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.internal; +package de.evoal.core.ea.main.alterer.internal; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.*; import io.jenetics.util.Mean; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutator.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutator.java similarity index 97% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutator.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutator.java index 9419b4f1436b7811ab63376a1831eb6f089750de..78033e4ee3c09df3289b895650ca550926517339 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutator.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutator.java @@ -1,8 +1,8 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; -import de.evoal.core.main.ea.alterer.internal.AbstractCorrelationAlterer; -import de.evoal.core.api.ea.correlations.Correlation; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.main.alterer.internal.AbstractCorrelationAlterer; +import de.evoal.core.ea.api.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.*; import io.jenetics.internal.math.Probabilities; import io.jenetics.util.ISeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutatorFactory.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorFactory.java similarity index 87% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutatorFactory.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorFactory.java index a7beee876d6ba64d240a5f1204db291355b1e166..84cb1a681b4fa2ea24110ad58beb4fe2e181dcf1 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutatorFactory.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorFactory.java @@ -1,7 +1,7 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.Alterer; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutatorMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorMemento.java similarity index 70% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutatorMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorMemento.java index c16a79c272e9e403da78360e8d20ce5a2c7abf47..b076919dbdc4ce3cc9829bd0bfb3e1639f87abc6 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/CorrelationMutatorMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorMemento.java @@ -1,7 +1,7 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; /** * Memento to preserve the state of correlation-aware mutator. diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/GaussianCorrelationMutator.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/GaussianCorrelationMutator.java similarity index 90% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/GaussianCorrelationMutator.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/GaussianCorrelationMutator.java index 8fc7d7b58586881201c069cbd3a85f09a9fd02d5..c4bf3d67d5aad964cda9c7bc0cec3717f6329860 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/GaussianCorrelationMutator.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/GaussianCorrelationMutator.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.NumericGene; import java.util.random.RandomGenerator; @@ -47,7 +47,7 @@ public class GaussianCorrelationMutator< @Override public String toString() { - return format("%s[p=%f]", getClass().getSimpleName(), _probability); + return String.format("%s[p=%f]", getClass().getSimpleName(), _probability); } @Override diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/GaussianCorrelationMutatorMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/GaussianCorrelationMutatorMemento.java similarity index 91% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/GaussianCorrelationMutatorMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/GaussianCorrelationMutatorMemento.java index d492e41e5ed2758ebe231b8d8d15ea57c3940c8f..826cd7e0704d0b91d7c96df5430a46ad981f8ef9 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/GaussianCorrelationMutatorMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/GaussianCorrelationMutatorMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; import lombok.Data; import java.util.Random; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipCorrelationMutator.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipCorrelationMutator.java similarity index 97% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipCorrelationMutator.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipCorrelationMutator.java index b3ce2a63af51bf707d15be3df599684354b1ba7f..2b71541a7f1091c7c4307f66611da1a9f5747845 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipCorrelationMutator.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipCorrelationMutator.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.*; import io.jenetics.util.MSeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipCorrelationMutatorMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipCorrelationMutatorMemento.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipCorrelationMutatorMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipCorrelationMutatorMemento.java index 28f26afae665ef743f4ed68426b1f76b124add26..ec047b651e14d1c137181062ccc71d345d62a901 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipCorrelationMutatorMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipCorrelationMutatorMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; import lombok.Getter; import lombok.Setter; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipMutator.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipMutator.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipMutator.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipMutator.java index 2aab3ccf4fdac70b79765e3721caa05d66848179..44bfaa470d0b547e9cf521661b4fc94e53af80a6 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SingleBitFlipMutator.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SingleBitFlipMutator.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; import io.jenetics.*; import io.jenetics.util.MSeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SwapCorrelationMutator.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SwapCorrelationMutator.java similarity index 94% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SwapCorrelationMutator.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SwapCorrelationMutator.java index 272ba8e8d961daf6b0f0a0bbc3242aa4d2f3b873..ee4b36848d3b9e21a1a2a0afb61f6e5ee1eea1a9 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SwapCorrelationMutator.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SwapCorrelationMutator.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; -import de.evoal.core.api.ea.correlations.Correlations; +import de.evoal.core.ea.api.correlations.Correlations; import io.jenetics.Chromosome; import io.jenetics.Gene; import io.jenetics.MutatorResult; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SwapCorrelationMutatorMemento.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SwapCorrelationMutatorMemento.java similarity index 87% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SwapCorrelationMutatorMemento.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SwapCorrelationMutatorMemento.java index c38bf41c1568948b17a7c0d03d90abddc6cce750..e0fa7d9642a13b125be1cc389afc399634fc54d3 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/alterer/mutator/SwapCorrelationMutatorMemento.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/SwapCorrelationMutatorMemento.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.alterer.mutator; +package de.evoal.core.ea.main.alterer.mutator; -import de.evoal.core.api.ea.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlation; import java.util.random.RandomGenerator; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodec.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/DynamicCodec.java similarity index 82% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodec.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/DynamicCodec.java index c9e32d1922cc407871fb9046dd051dd55a794e8f..714bce241a21d798db1e6c90fe68e966004260e3 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodec.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/DynamicCodec.java @@ -1,23 +1,20 @@ -package de.evoal.core.main.ea.codec; +package de.evoal.core.ea.main.codec; import de.evoal.core.api.cdi.BeanFactory; -import de.evoal.core.api.ea.codec.CustomCodec; +import de.evoal.core.ea.api.codec.CustomCodec; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; -import de.evoal.core.main.ea.codec.chromosome.DynamicChromosome; -import de.evoal.core.main.ea.codec.chromosome.DynamicChromosomeFactory; -import de.evoal.languages.model.ddl.DataDescription; +import de.evoal.core.ea.main.codec.chromosome.DynamicChromosome; +import de.evoal.core.ea.main.codec.chromosome.DynamicChromosomeFactory; import de.evoal.languages.model.instance.Array; -import de.evoal.languages.model.instance.Attribute; -import de.evoal.languages.model.instance.DataReference; import de.evoal.languages.model.instance.Instance; import io.jenetics.Chromosome; import io.jenetics.Gene; import io.jenetics.Genotype; import io.jenetics.util.Factory; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.math3.util.Pair; +import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; @@ -34,10 +31,9 @@ public class DynamicCodec<G extends Gene<?, G>> implements CustomCodec<G> { this.dynamicTemplates = dynamicTemplates; } - static DynamicCodec from(final Array config, final PropertiesSpecification specification) { + static DynamicCodec from(final Instance [] config, final PropertiesSpecification specification) { final DynamicChromosomeFactory factory = BeanFactory.create(DynamicChromosomeFactory.class); - final List<DynamicChromosome> chromosomes = config.getValues() - .stream() + final List<DynamicChromosome> chromosomes = Arrays.stream(config) .map(Instance.class::cast) .map(factory::create) .collect(Collectors.toList()); 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.ea/src/main/java/de/evoal/core/ea/main/codec/DynamicCodecProducer.java similarity index 78% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/DynamicCodecProducer.java index bd7eec67b605969700a4862a35225f1802d7de7d..e8abb95275970d8401d21970198a37e95be4678f 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.ea/src/main/java/de/evoal/core/ea/main/codec/DynamicCodecProducer.java @@ -1,9 +1,10 @@ -package de.evoal.core.main.ea.codec; +package de.evoal.core.ea.main.codec; 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; +import de.evoal.languages.model.instance.Instance; import lombok.extern.slf4j.Slf4j; import javax.enterprise.context.ApplicationScoped; @@ -14,7 +15,7 @@ import javax.inject.Named; @Slf4j public class DynamicCodecProducer { @Produces @ApplicationScoped - public DynamicCodec create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array config, final @Named("genotype-specification") PropertiesSpecification specification) { + public DynamicCodec create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Instance[] 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/codec/chromosome/DynamicBitChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBitChromosome.java similarity index 75% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicBitChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBitChromosome.java index c050bb51a6b61fa159dd91a822ce9882fcae909b..ef50d766d86ee71969abd8a86c8943c49a86e5a5 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicBitChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBitChromosome.java @@ -1,14 +1,9 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertySpecification; -import de.evoal.core.api.utils.Requirements; -import de.evoal.core.main.jenetics.BitHelper; -import de.evoal.core.main.jenetics.GrayBoundedBitChromosome; -import de.evoal.core.main.jenetics.NaiveBoundedBitChromosome; -import de.evoal.languages.model.el.IntegerLiteral; -import de.evoal.languages.model.instance.Instance; -import de.evoal.languages.model.instance.LiteralValue; +import de.evoal.core.ea.main.jenetics.BitHelper; +import de.evoal.core.ea.main.jenetics.NaiveBoundedBitChromosome; import io.jenetics.Chromosome; import io.jenetics.util.DoubleRange; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicBoundedDoubleChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedDoubleChromosome.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicBoundedDoubleChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedDoubleChromosome.java index 2b85fc688b952118d4a63e333924c2b64b1b6e95..6775e82ca79d990ca62b33ff7744b69670c43dbc 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicBoundedDoubleChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedDoubleChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.info.PropertiesBoundaries; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicBoundedIntegerChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedIntegerChromosome.java similarity index 92% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicBoundedIntegerChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedIntegerChromosome.java index 70d8330cc5a798453e69031e55f6f1e258c1c42d..18a9b49749210fcc9ee2b181c3fc97efb38b6e38 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicBoundedIntegerChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedIntegerChromosome.java @@ -1,10 +1,9 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.info.PropertiesBoundaries; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.instance.Instance; -import io.jenetics.util.DoubleRange; import io.jenetics.util.IntRange; import javax.inject.Inject; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosome.java similarity index 97% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosome.java index 99527980fa8293f59cf1cb0cde05d15982bd7463..aae68706f1c30a374a1c21168b8fac1644505b45 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicChromosomeFactory.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosomeFactory.java similarity index 91% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicChromosomeFactory.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosomeFactory.java index 72004b58ea2878f5d2fa214ed5dbe0cbdfe722d4..8a38301c0130caa5987650e2cd1ad7d0e4909cb5 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicChromosomeFactory.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosomeFactory.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.cdi.BeanFactory; import de.evoal.languages.model.instance.Instance; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicDoubleChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicDoubleChromosome.java similarity index 91% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicDoubleChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicDoubleChromosome.java index 15ebc323fb77189c87da86336ffe4a4d56dc4f91..ccac308e80d43672def7dcc69ce92e8bf2422791 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicDoubleChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicDoubleChromosome.java @@ -1,9 +1,9 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertySpecification; -import de.evoal.core.main.jenetics.BoundedDoubleChromosome; -import de.evoal.core.main.jenetics.BoundedDoubleGene; +import de.evoal.core.ea.main.jenetics.BoundedDoubleChromosome; +import de.evoal.core.ea.main.jenetics.BoundedDoubleGene; import io.jenetics.Chromosome; import io.jenetics.util.DoubleRange; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicGrayChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicGrayChromosome.java similarity index 75% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicGrayChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicGrayChromosome.java index 1c18683bf94e54e5b623e397c761b1c886b530c2..95c0161c638140f440fe2bd7dab353fb240adba6 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicGrayChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicGrayChromosome.java @@ -1,20 +1,14 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertySpecification; -import de.evoal.core.api.utils.Requirements; -import de.evoal.core.main.jenetics.GrayBoundedBitChromosome; -import de.evoal.core.main.jenetics.GrayHelper; -import de.evoal.languages.model.el.IntegerLiteral; -import de.evoal.languages.model.instance.Instance; -import de.evoal.languages.model.instance.LiteralValue; +import de.evoal.core.ea.main.jenetics.GrayBoundedBitChromosome; +import de.evoal.core.ea.main.jenetics.GrayHelper; import io.jenetics.Chromosome; import io.jenetics.util.DoubleRange; import javax.enterprise.context.Dependent; import javax.inject.Named; -import java.util.List; -import java.util.stream.Collectors; @Dependent @Named("gray-chromosome") diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicIntegerChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicIntegerChromosome.java similarity index 82% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicIntegerChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicIntegerChromosome.java index 44481abd0aa38d7577ea04334e4cce4a1e56d071..7b7d2e276dee160ca6d85f468e114aa118d0e73e 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicIntegerChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicIntegerChromosome.java @@ -1,17 +1,13 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertySpecification; -import de.evoal.core.api.properties.info.PropertiesBoundaries; -import de.evoal.core.main.jenetics.BoundedDoubleChromosome; -import de.evoal.core.main.jenetics.BoundedDoubleGene; -import de.evoal.core.main.jenetics.BoundedIntegerChromosome; -import de.evoal.core.main.jenetics.BoundedIntegerGene; +import de.evoal.core.ea.main.jenetics.BoundedIntegerChromosome; +import de.evoal.core.ea.main.jenetics.BoundedIntegerGene; import io.jenetics.Chromosome; import io.jenetics.util.IntRange; import javax.enterprise.context.Dependent; -import javax.inject.Inject; import javax.inject.Named; import java.util.ArrayList; import java.util.List; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicScaledChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicScaledChromosome.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicScaledChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicScaledChromosome.java index 9fd9a45c50d23cd93100539e3f3d32daa7d56953..950267d28da833754dc3d6f90fee3f2161dbb74e 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/chromosome/DynamicScaledChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicScaledChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.codec.chromosome; +package de.evoal.core.ea.main.codec.chromosome; import de.evoal.core.api.utils.Requirements; import de.evoal.languages.model.ddl.DataDescription; diff --git a/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/comparator/ParetoComparator.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/comparator/ParetoComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..5c955ff50f061a30532209ad78ae7f27a1b29289 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/comparator/ParetoComparator.java @@ -0,0 +1,23 @@ +package de.evoal.core.ea.main.comparator; + +import de.evoal.core.api.optimisation.OptimisationValueComparator; +import de.evoal.core.api.optimisation.OptimisationValue; +import de.evoal.languages.model.instance.Instance; + +import javax.enterprise.context.ApplicationScoped; + +import javax.inject.Named; + +@ApplicationScoped +@Named("pareto") +public class ParetoComparator implements OptimisationValueComparator { + @Override + public OptimisationValue toValue(final double[] optimisationValues) { + return ParetoOptimisationValue.of(optimisationValues); + } + + @Override + public ParetoComparator init(Instance config) { + return this; + } +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/ParetoFitnessValue.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/comparator/ParetoOptimisationValue.java similarity index 64% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/ParetoFitnessValue.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/comparator/ParetoOptimisationValue.java index 4a97568219d391d9a517109edd73479d84b8568e..9ca49b3c2e2664d2804f26e945392d2d22d59c3c 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/ParetoFitnessValue.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/comparator/ParetoOptimisationValue.java @@ -1,29 +1,29 @@ -package de.evoal.core.main.ea.comparator; +package de.evoal.core.ea.main.comparator; import java.util.Arrays; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.optimisation.OptimisationValue; import io.jenetics.ext.moea.Vec; import lombok.NonNull; -public class ParetoFitnessValue implements FitnessValue { +public class ParetoOptimisationValue implements OptimisationValue { private final Vec<double []> fitnessValues; - private ParetoFitnessValue(final @NonNull double[] fitnessValues) { + private ParetoOptimisationValue(final @NonNull double[] fitnessValues) { this.fitnessValues = Vec.of(fitnessValues); } - public static FitnessValue of(final double [] fitnessValues) { - return new ParetoFitnessValue(fitnessValues); + public static OptimisationValue of(final double [] fitnessValues) { + return new ParetoOptimisationValue(fitnessValues); } @Override - public int compareTo(final FitnessValue other) { - if(!(other instanceof ParetoFitnessValue)) { + public int compareTo(final OptimisationValue other) { + if(!(other instanceof ParetoOptimisationValue)) { throw new IllegalArgumentException("Only allowed to compare pareto fitness values"); } - return this.makeAbsolute().compareTo(((ParetoFitnessValue)other).makeAbsolute()); + return this.makeAbsolute().compareTo(((ParetoOptimisationValue)other).makeAbsolute()); } private final Vec<double[]> makeAbsolute(){ 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.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ConstraintProducer.java similarity index 87% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ConstraintProducer.java index 2db5c6e812fe58f2436c3e457ccce1974c00e3d4..a681fa71f9721152f85dfcb4fe2e15848a2f606c 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.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ConstraintProducer.java @@ -1,28 +1,26 @@ -package de.evoal.core.main.ea.constraints.constraint; +package de.evoal.core.ea.main.constraints.constraint; 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; -import de.evoal.core.api.ea.constraints.model.DataConstraints; +import de.evoal.core.ea.api.constraints.model.Constraint; +import de.evoal.core.ea.api.constraints.model.Constraints; +import de.evoal.core.ea.api.constraints.model.DataConstraints; import de.evoal.core.api.properties.PropertiesSpecification; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import javax.inject.Named; -import de.evoal.core.main.ea.constraints.el.ElHelper; -import de.evoal.core.main.ea.constraints.el.LogHelper; +import de.evoal.core.ea.main.constraints.constraint.ast.ConditionConverter; +import de.evoal.core.ea.main.constraints.el.ElHelper; +import de.evoal.core.ea.main.constraints.el.LogHelper; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.FunctionName; -import de.evoal.languages.model.ddl.dsl.DataDescriptionLanguageStandaloneSetup; import de.evoal.languages.model.el.Call; -import de.evoal.core.main.ea.constraints.constraint.ast.ConditionConverter; import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Attribute; import de.evoal.languages.model.instance.DataReference; import de.evoal.languages.model.instance.Instance; import lombok.extern.slf4j.Slf4j; -import org.eclipse.xtext.serializer.impl.Serializer; import java.util.Objects; import java.util.Optional; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/BoundaryIdentifier.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/BoundaryIdentifier.java similarity index 91% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/BoundaryIdentifier.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/BoundaryIdentifier.java index d452d228fddb472813dff1078a63032b874120c3..3aa7e14a5f0d8d1c92c428abe84ac4451d5a435e 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/BoundaryIdentifier.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/BoundaryIdentifier.java @@ -1,15 +1,11 @@ -package de.evoal.core.main.ea.constraints.constraint.ast; +package de.evoal.core.ea.main.constraints.constraint.ast; -import de.evoal.core.api.ea.constraints.model.DataConstraints; +import de.evoal.core.ea.api.constraints.model.DataConstraints; import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.info.PropertiesBoundaries; -import de.evoal.core.api.utils.Requirements; import de.evoal.languages.model.ddl.DataDescription; -import de.evoal.languages.model.ddl.DataReference; import de.evoal.languages.model.ddl.RepresentationType; -import de.evoal.languages.model.ddl.SelfReference; import de.evoal.languages.model.el.*; -import de.evoal.languages.model.el.util.ELSwitch; import lombok.extern.slf4j.Slf4j; import java.util.*; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/ConditionConverter.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/ConditionConverter.java similarity index 88% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/ConditionConverter.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/ConditionConverter.java index d424bb6f9598b6ed985faef89efbc20dbb11ef91..9c0a3952860de6c4a8032faaa162917968ef1179 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/ConditionConverter.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/ConditionConverter.java @@ -1,12 +1,12 @@ -package de.evoal.core.main.ea.constraints.constraint.ast; +package de.evoal.core.ea.main.constraints.constraint.ast; import de.evoal.core.api.utils.Requirements; -import de.evoal.core.api.ea.constraints.model.ConstraintType; +import de.evoal.core.ea.api.constraints.model.ConstraintType; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; -import static de.evoal.core.main.ea.constraints.constraint.utils.ArithmeticNumberOperations.*; +import de.evoal.core.ea.main.constraints.constraint.utils.ArithmeticNumberOperations; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.DataReference; import de.evoal.languages.model.ddl.SelfReference; @@ -79,13 +79,13 @@ public class ConditionConverter extends ELSwitch<Object> { case EQUAL: case GREATER_EQUAL: case GREATER_THAN: { - function = (gen, fit) -> minus(leftValue.apply(gen, fit), rightValue.apply(gen, fit)); + function = (gen, fit) -> ArithmeticNumberOperations.minus(leftValue.apply(gen, fit), rightValue.apply(gen, fit)); break; } case LESS_EQUAL: case LESS_THAN: { - function = (gen, fit) -> minus(rightValue.apply(gen, fit), leftValue.apply(gen, fit)); + function = (gen, fit) -> ArithmeticNumberOperations.minus(rightValue.apply(gen, fit), leftValue.apply(gen, fit)); break; } case UNEQUAL: { @@ -125,13 +125,13 @@ public class ConditionConverter extends ELSwitch<Object> { switch (operator) { case ADD: { final BiFunction<Properties, Properties, Object> lOp = value; - value = (gen, fit) -> add(lOp.apply(gen, fit), rOp.apply(gen, fit)); + value = (gen, fit) -> ArithmeticNumberOperations.add(lOp.apply(gen, fit), rOp.apply(gen, fit)); break; } case SUBTRACT: { final BiFunction<Properties, Properties, Object> lOp = value; - value = (gen, fit) -> minus(lOp.apply(gen, fit), rOp.apply(gen, fit)); + value = (gen, fit) -> ArithmeticNumberOperations.minus(lOp.apply(gen, fit), rOp.apply(gen, fit)); break; } } @@ -150,19 +150,19 @@ public class ConditionConverter extends ELSwitch<Object> { switch (operator) { case DIVIDE: { final BiFunction<Properties, Properties, Object> lOp = value; - value = (gen, fit) -> divide(lOp.apply(gen, fit), rOp.apply(gen, fit)); + value = (gen, fit) -> ArithmeticNumberOperations.divide(lOp.apply(gen, fit), rOp.apply(gen, fit)); break; } case MODULO: { final BiFunction<Properties, Properties, Object> lOp = value; - value = (gen, fit) -> modulo(lOp.apply(gen, fit), rOp.apply(gen, fit)); + value = (gen, fit) -> ArithmeticNumberOperations.modulo(lOp.apply(gen, fit), rOp.apply(gen, fit)); break; } case MULTIPLY: { final BiFunction<Properties, Properties, Object> lOp = value; - value = (gen, fit) -> multiply(lOp.apply(gen, fit), rOp.apply(gen, fit)); + value = (gen, fit) -> ArithmeticNumberOperations.multiply(lOp.apply(gen, fit), rOp.apply(gen, fit)); break; } } @@ -178,7 +178,7 @@ public class ConditionConverter extends ELSwitch<Object> { final BiFunction<Properties, Properties, Object> lOp = value; final BiFunction<Properties, Properties, Object> rOp = (BiFunction<Properties, Properties, Object>) doSwitch(object.getRightOperand()); - value = (gen, fit) -> pow(lOp.apply(gen, fit), rOp.apply(gen, fit)); + value = (gen, fit) -> ArithmeticNumberOperations.pow(lOp.apply(gen, fit), rOp.apply(gen, fit)); } return value; } @@ -196,7 +196,7 @@ public class ConditionConverter extends ELSwitch<Object> { case SUBTRACT: { final BiFunction<Properties, Properties, Object> lOp = value; - value = (gen, fit) -> minus(0, lOp.apply(gen, fit)); + value = (gen, fit) -> ArithmeticNumberOperations.minus(0, lOp.apply(gen, fit)); break; } } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/UnaryBoundaryIdentifier.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/UnaryBoundaryIdentifier.java similarity index 93% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/UnaryBoundaryIdentifier.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/UnaryBoundaryIdentifier.java index c73b01ce8b160e21310c34e72471f4dfdc376ca9..f837106ad183216ff800f9697ac787865bb1146b 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ast/UnaryBoundaryIdentifier.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/ast/UnaryBoundaryIdentifier.java @@ -1,21 +1,13 @@ -package de.evoal.core.main.ea.constraints.constraint.ast; +package de.evoal.core.ea.main.constraints.constraint.ast; -import de.evoal.core.api.ea.constraints.model.DataConstraints; -import de.evoal.core.api.properties.PropertySpecification; -import de.evoal.core.api.properties.info.PropertiesBoundaries; import de.evoal.core.api.utils.Requirements; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.DataReference; -import de.evoal.languages.model.ddl.RepresentationType; import de.evoal.languages.model.ddl.SelfReference; import de.evoal.languages.model.el.*; import de.evoal.languages.model.el.util.ELSwitch; import lombok.extern.slf4j.Slf4j; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - @Slf4j public class UnaryBoundaryIdentifier extends ELSwitch<Object> { diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/calculations/NormalCalculation.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/calculations/NormalCalculation.java similarity index 75% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/calculations/NormalCalculation.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/calculations/NormalCalculation.java index a12ba46fce9ba845f9bf37d304859f1a8331afcc..6b1cae346b5787f4102339f3c7d5a95033d27a88 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/calculations/NormalCalculation.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/calculations/NormalCalculation.java @@ -1,8 +1,8 @@ -package de.evoal.core.main.ea.constraints.constraint.strategies.calculations; +package de.evoal.core.ea.main.constraints.constraint.strategies.calculations; -import de.evoal.core.api.ea.constraints.model.Constraint; -import de.evoal.core.api.ea.constraints.strategies.CalculationResult; -import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy; +import de.evoal.core.ea.api.constraints.model.Constraint; +import de.evoal.core.ea.api.constraints.strategies.CalculationResult; +import de.evoal.core.ea.api.constraints.calculation.CalculationStrategy; import de.evoal.core.api.properties.Properties; import javax.enterprise.context.Dependent; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/calculations/StandardDeviationCalculation.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/calculations/StandardDeviationCalculation.java similarity index 90% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/calculations/StandardDeviationCalculation.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/calculations/StandardDeviationCalculation.java index 0c8dd19ca36c87deead86a206bdb8b328ae595c8..94e6414425a4009f41445f728ad2e9efc1d27aaa 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/calculations/StandardDeviationCalculation.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/calculations/StandardDeviationCalculation.java @@ -1,17 +1,17 @@ -package de.evoal.core.main.ea.constraints.constraint.strategies.calculations; +package de.evoal.core.ea.main.constraints.constraint.strategies.calculations; -import de.evoal.core.api.ea.constraints.model.Constraint; -import de.evoal.core.api.ea.constraints.model.ConstraintResult; -import de.evoal.core.api.ea.constraints.strategies.CalculationResult; +import de.evoal.core.ea.api.constraints.model.Constraint; +import de.evoal.core.ea.api.constraints.model.ConstraintResult; +import de.evoal.core.ea.api.constraints.strategies.CalculationResult; import de.evoal.core.api.utils.LanguageHelper; -import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy; +import de.evoal.core.ea.api.constraints.calculation.CalculationStrategy; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; import javax.enterprise.context.Dependent; -import de.evoal.core.main.ea.constraints.constraint.utils.ArithmeticNumberOperations; -import de.evoal.core.main.ea.constraints.deviation.model.Deviations; +import de.evoal.core.ea.main.constraints.constraint.utils.ArithmeticNumberOperations; +import de.evoal.core.ea.main.constraints.deviation.model.Deviations; import de.evoal.languages.model.instance.Instance; import lombok.NonNull; import org.apache.commons.math3.util.Pair; 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.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java similarity index 71% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java index 6c5ce286c25f3a75b40f853188779c2dec87dc91..f247107d9688d86d3faebf80acb349a27b8e9ea8 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.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java @@ -1,18 +1,18 @@ -package de.evoal.core.main.ea.constraints.constraint.strategies.constraint; +package de.evoal.core.ea.main.constraints.constraint.strategies.constraint; import de.evoal.core.api.cdi.BeanFactory; -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.optimisation.OptimisationFunction; +import de.evoal.core.ea.api.constraints.calculation.CalculationStrategy; +import de.evoal.core.ea.api.constraints.model.Constraint; +import de.evoal.core.ea.api.constraints.model.Constraints; +import de.evoal.core.ea.api.constraints.calculation.CalculationFactory; 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; -import de.evoal.core.api.ea.fitness.FitnessFunction; +import de.evoal.core.ea.api.codec.CustomCodec; +import de.evoal.core.ea.api.constraints.strategies.RepairStrategy; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.utils.LanguageHelper; -import de.evoal.core.main.ea.constraints.constraint.utils.ConfigurationUtils; +import de.evoal.core.ea.main.constraints.constraint.utils.ConfigurationUtils; import de.evoal.languages.model.instance.*; import javax.enterprise.context.ApplicationScoped; @@ -27,9 +27,9 @@ import java.util.stream.Collectors; public class JeneticsConstraintProducer { @Produces public List<io.jenetics.engine.Constraint> create( - 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 @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Instance [] handlerConfigurations, + final @Named("optimisation-function-output") PropertiesSpecification optimisationSpec, + final @Named("optimisation-function") OptimisationFunction function, final CustomCodec codec, final Constraints constraints, final CalculationFactory factory) { @@ -51,7 +51,7 @@ public class JeneticsConstraintProducer { final RepairStrategy rStrategy = BeanFactory.create(repairConfiguration.getDefinition().getName(), RepairStrategy.class) .init(repairConfiguration); - return new JeneticsConstraintStrategy(cStrategy, codec, function, optimizationSpec, rStrategy); + return new JeneticsConstraintStrategy(cStrategy, codec, function, optimisationSpec, rStrategy); }) .collect(Collectors.toList()); } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java similarity index 70% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java index 30672a6db8d7d86cfa80230ac97ac7f07d7a0ce0..8791ae18a09cc1affa5707b1bb0df5ba82138de5 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java @@ -1,10 +1,10 @@ -package de.evoal.core.main.ea.constraints.constraint.strategies.constraint; +package de.evoal.core.ea.main.constraints.constraint.strategies.constraint; -import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy; -import de.evoal.core.api.ea.constraints.strategies.HandlingStrategy; -import de.evoal.core.api.ea.codec.CustomCodec; -import de.evoal.core.api.ea.constraints.strategies.RepairStrategy; -import de.evoal.core.api.ea.fitness.FitnessFunction; +import de.evoal.core.api.optimisation.OptimisationFunction; +import de.evoal.core.ea.api.constraints.calculation.CalculationStrategy; +import de.evoal.core.ea.api.constraints.strategies.HandlingStrategy; +import de.evoal.core.ea.api.codec.CustomCodec; +import de.evoal.core.ea.api.constraints.strategies.RepairStrategy; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; import io.jenetics.Gene; @@ -17,11 +17,11 @@ public class JeneticsConstraintStrategy< private final CalculationStrategy calculation; private final CustomCodec<G> codec; - private final FitnessFunction function; + private final OptimisationFunction function; private final PropertiesSpecification fitnessSpec; private final RepairStrategy repair; - public JeneticsConstraintStrategy(final CalculationStrategy calculation, final CustomCodec<G> codec, final FitnessFunction function, final PropertiesSpecification fitnessSpec, final RepairStrategy repair) { + public JeneticsConstraintStrategy(final CalculationStrategy calculation, final CustomCodec<G> codec, final OptimisationFunction function, final PropertiesSpecification fitnessSpec, final RepairStrategy repair) { this.calculation = calculation; this.codec = codec; this.function = function; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java similarity index 84% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java index ea28d1f90cedd0b0eaf0222cdf207985e697d095..56cd879cf662a3e470ac83611091adbc7a57baa9 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.constraints.constraint.strategies.constraint; +package de.evoal.core.ea.main.constraints.constraint.strategies.constraint; -import de.evoal.core.api.ea.constraints.strategies.RepairStrategy; +import de.evoal.core.ea.api.constraints.strategies.RepairStrategy; import de.evoal.languages.model.instance.Instance; import io.jenetics.Gene; import io.jenetics.Genotype; 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.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/fitness/MalusFunctionProducer.java similarity index 88% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/fitness/MalusFunctionProducer.java index 57371661129f4e54c8ad43c95cbc89ec50f20d91..5b687c95bb54460b5a79b5c96f9691790cbc91e7 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.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/fitness/MalusFunctionProducer.java @@ -1,13 +1,13 @@ -package de.evoal.core.main.ea.constraints.constraint.strategies.fitness; +package de.evoal.core.ea.main.constraints.constraint.strategies.fitness; -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.strategies.fitness.MalusForFitnessStrategy; -import de.evoal.core.api.ea.constraints.strategies.fitness.MalusFunction; +import de.evoal.core.ea.api.constraints.model.Constraint; +import de.evoal.core.ea.api.constraints.model.Constraints; +import de.evoal.core.ea.api.constraints.strategies.fitness.MalusForFitnessStrategy; +import de.evoal.core.ea.api.constraints.strategies.fitness.MalusFunction; 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.ea.api.constraints.calculation.CalculationFactory; +import de.evoal.core.ea.api.constraints.calculation.CalculationStrategy; import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; import de.evoal.core.api.properties.PropertiesSpecification; @@ -15,8 +15,8 @@ import de.evoal.core.api.properties.PropertySpecification; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; -import de.evoal.core.main.ea.constraints.constraint.strategies.fitness.internal.MalusForFitnessFunction; -import de.evoal.core.main.ea.constraints.constraint.utils.ConfigurationUtils; +import de.evoal.core.ea.main.constraints.constraint.strategies.fitness.internal.MalusForFitnessFunction; +import de.evoal.core.ea.main.constraints.constraint.utils.ConfigurationUtils; import de.evoal.languages.model.instance.*; import org.apache.commons.math3.util.Pair; @@ -28,9 +28,9 @@ import java.util.stream.Collectors; public class MalusFunctionProducer { @ApplicationScoped @Produces public MalusForFitnessStrategy create( - 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 @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Instance [] handlers, + final @Named("optimisation-function-input") PropertiesSpecification source, + final @Named("optimisation-function-output") PropertiesSpecification target, final @Named("output-dependencies") PropertiesDependencies dependencies, final Constraints constraints, final CalculationFactory factory) { diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/internal/MalusForFitnessFunction.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/fitness/internal/MalusForFitnessFunction.java similarity index 77% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/internal/MalusForFitnessFunction.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/fitness/internal/MalusForFitnessFunction.java index 8d637e5fc7cf56d7b4226d519c622eea5d4ee72b..c1af10b45e73069fa20c50213e8e34d8c3f4e325 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/internal/MalusForFitnessFunction.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/strategies/fitness/internal/MalusForFitnessFunction.java @@ -1,8 +1,8 @@ -package de.evoal.core.main.ea.constraints.constraint.strategies.fitness.internal; +package de.evoal.core.ea.main.constraints.constraint.strategies.fitness.internal; -import de.evoal.core.api.ea.constraints.model.Constraint; -import de.evoal.core.api.ea.constraints.model.ConstraintResult; -import de.evoal.core.api.ea.constraints.strategies.fitness.MalusFunction; +import de.evoal.core.ea.api.constraints.model.Constraint; +import de.evoal.core.ea.api.constraints.model.ConstraintResult; +import de.evoal.core.ea.api.constraints.strategies.fitness.MalusFunction; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.languages.model.instance.Instance; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/utils/ArithmeticNumberOperations.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/utils/ArithmeticNumberOperations.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/utils/ArithmeticNumberOperations.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/utils/ArithmeticNumberOperations.java index 79702bbb75b71dde965986d63d5acfbf95a5ace4..d0590f75701f39a6923848dbe76c7d2f8a85920a 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/utils/ArithmeticNumberOperations.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/utils/ArithmeticNumberOperations.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.constraint.utils; +package de.evoal.core.ea.main.constraints.constraint.utils; import de.evoal.core.api.utils.Requirements; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/utils/ConfigurationUtils.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/utils/ConfigurationUtils.java similarity index 73% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/utils/ConfigurationUtils.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/utils/ConfigurationUtils.java index 546a87f235c1075885ad2bba16bf619263f6e51e..feae43512e5dc1d83610b76216e70eda6e5e8c39 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/utils/ConfigurationUtils.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/constraint/utils/ConfigurationUtils.java @@ -1,11 +1,10 @@ -package de.evoal.core.main.ea.constraints.constraint.utils; +package de.evoal.core.ea.main.constraints.constraint.utils; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.languages.model.instance.Array; -import de.evoal.languages.model.instance.Attribute; import de.evoal.languages.model.instance.Instance; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -13,18 +12,16 @@ public final class ConfigurationUtils { private ConfigurationUtils() { } - public static List<Instance> findConstraintHandlerByHandlingStrategy(final Array handlers, final String name) { - return handlers.getValues() - .stream() + public static List<Instance> findConstraintHandlerByHandlingStrategy(final Instance [] handlers, final String name) { + return Arrays.stream(handlers) .map(Instance.class::cast) .filter(LanguageHelper.filterInstanceByType("constraint-handler")) .filter(LanguageHelper.filterByAttributesInstanceType("constraint-handling", name)) .collect(Collectors.toList()); } - public static Instance findConstraintHandlerByHandlingStrategyAndCategory(final Array handlers, final String name, final String category) { - return handlers.getValues() - .stream() + public static Instance findConstraintHandlerByHandlingStrategyAndCategory(final Instance [] handlers, final String name, final String category) { + return Arrays.stream(handlers) .map(Instance.class::cast) .filter(LanguageHelper.filterInstanceByType("constraint-handler")) .filter(LanguageHelper.filterByAttributesInstanceType("constraint-handling", name)) diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/CorrelationsProducer.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/CorrelationsProducer.java similarity index 87% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/CorrelationsProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/CorrelationsProducer.java index 0739e38950f0139f63e78d2f1c765583ab1fa2e8..b26acb2706987e2c2f82059cee154f6e3f25c5bb 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/CorrelationsProducer.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/CorrelationsProducer.java @@ -1,17 +1,17 @@ -package de.evoal.core.main.ea.constraints.correlation; +package de.evoal.core.ea.main.constraints.correlation; -import de.evoal.core.api.ea.codec.CustomCodec; -import de.evoal.core.api.ea.constraints.model.DataConstraints; +import de.evoal.core.ea.api.codec.CustomCodec; +import de.evoal.core.ea.api.constraints.model.DataConstraints; import de.evoal.core.api.properties.PropertiesSpecification; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; -import de.evoal.core.main.ea.constraints.correlation.el.AstHelper; -import de.evoal.core.main.ea.constraints.el.ElHelper; -import de.evoal.core.api.ea.correlations.Correlation; -import de.evoal.core.api.ea.correlations.Correlations; -import de.evoal.core.api.ea.correlations.RangedCorrelation; -import de.evoal.core.main.ea.constraints.el.LogHelper; +import de.evoal.core.ea.main.constraints.correlation.el.AstHelper; +import de.evoal.core.ea.main.constraints.el.ElHelper; +import de.evoal.core.ea.api.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlations; +import de.evoal.core.ea.api.correlations.RangedCorrelation; +import de.evoal.core.ea.main.constraints.el.LogHelper; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.el.Call; import lombok.extern.slf4j.Slf4j; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/el/AstHelper.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/el/AstHelper.java similarity index 73% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/el/AstHelper.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/el/AstHelper.java index 6df67471eff6f7f60b7e33d3d96fc0cbce624f28..231244b528dcca4abcba7e7e2bfe46cf3df8ee59 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/el/AstHelper.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/el/AstHelper.java @@ -1,9 +1,8 @@ -package de.evoal.core.main.ea.constraints.correlation.el; +package de.evoal.core.ea.main.constraints.correlation.el; import de.evoal.core.api.properties.PropertiesSpecification; -import de.evoal.core.api.properties.PropertySpecification; -import de.evoal.core.main.ea.constraints.el.DataReferenceSwitch; -import de.evoal.core.api.ea.correlations.Range; +import de.evoal.core.ea.main.constraints.el.DataReferenceSwitch; +import de.evoal.core.ea.api.correlations.Range; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.el.Expression; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/el/RangeSwitch.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/el/RangeSwitch.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/el/RangeSwitch.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/el/RangeSwitch.java index 33f382bd1d5742a62eb58e7d900a8d067cc92071..771538cfdbea9bd7f3a577310e28a11c7a30f07c 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/el/RangeSwitch.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/correlation/el/RangeSwitch.java @@ -1,7 +1,7 @@ -package de.evoal.core.main.ea.constraints.correlation.el; +package de.evoal.core.ea.main.constraints.correlation.el; -import de.evoal.core.main.ea.constraints.el.ElHelper; -import de.evoal.core.api.ea.correlations.Range; +import de.evoal.core.ea.main.constraints.el.ElHelper; +import de.evoal.core.ea.api.correlations.Range; import de.evoal.languages.model.el.*; import de.evoal.languages.model.el.util.ELSwitch; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/DeviationProducer.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/DeviationProducer.java similarity index 81% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/DeviationProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/DeviationProducer.java index 2c9562be6ff54533476f2fb5499f0836484c1d99..ca30adc0dd1baf1314cdbcafdd4bf052e99d1555 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/DeviationProducer.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/DeviationProducer.java @@ -1,25 +1,20 @@ -package de.evoal.core.main.ea.constraints.deviation; +package de.evoal.core.ea.main.constraints.deviation; -import de.evoal.core.api.ea.codec.CustomCodec; -import de.evoal.core.api.ea.constraints.model.DataConstraints; +import de.evoal.core.ea.api.codec.CustomCodec; +import de.evoal.core.ea.api.constraints.model.DataConstraints; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; -import javax.inject.Named; - -import de.evoal.core.main.ea.constraints.deviation.model.Deviation; -import de.evoal.core.main.ea.constraints.deviation.model.Deviations; -import de.evoal.core.main.ea.constraints.el.ElHelper; -import de.evoal.core.main.ea.constraints.el.LogHelper; +import de.evoal.core.ea.main.constraints.deviation.model.Deviation; +import de.evoal.core.ea.main.constraints.deviation.model.Deviations; +import de.evoal.core.ea.main.constraints.el.ElHelper; +import de.evoal.core.ea.main.constraints.el.LogHelper; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.el.Call; -import de.evoal.languages.model.el.Expression; -import de.evoal.languages.model.el.FunctionName; import lombok.extern.slf4j.Slf4j; -import java.util.Collection; import java.util.Objects; import java.util.Optional; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/model/Deviation.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/model/Deviation.java similarity index 86% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/model/Deviation.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/model/Deviation.java index 8ad2917bb70cc10db2b736bfe54b63db9957bd09..7ae4d4a845a12010cdfe6a398d2b032b47771e9a 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/model/Deviation.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/model/Deviation.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.deviation.model; +package de.evoal.core.ea.main.constraints.deviation.model; import de.evoal.core.api.properties.PropertySpecification; import lombok.Data; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/model/Deviations.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/model/Deviations.java similarity index 94% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/model/Deviations.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/model/Deviations.java index 26f2e2357a41f04949e3547b92b39b676e382a34..b2e839b01e002b80c34c9d50a35a0baf48848924 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/model/Deviations.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/deviation/model/Deviations.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.deviation.model; +package de.evoal.core.ea.main.constraints.deviation.model; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/CallSwitch.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/CallSwitch.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/CallSwitch.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/CallSwitch.java index c1007a8e3dc1fd24ed9019030b6c516de2af90de..1569b03444b9f255effdfb1214be2922dd80841f 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/CallSwitch.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/CallSwitch.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.el; +package de.evoal.core.ea.main.constraints.el; import de.evoal.languages.model.el.*; import de.evoal.languages.model.el.util.ELSwitch; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/DataReferenceSwitch.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/DataReferenceSwitch.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/DataReferenceSwitch.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/DataReferenceSwitch.java index 4a01d1a0ce8b9aa3efe72725f106a60dd0824c04..37abff7c48f952ab35db486d9af499e282f4a00a 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/DataReferenceSwitch.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/DataReferenceSwitch.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.el; +package de.evoal.core.ea.main.constraints.el; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.DataReference; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/ElHelper.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/ElHelper.java similarity index 94% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/ElHelper.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/ElHelper.java index 8913ecdad556c2d50e4bbf117fa4b5d58a10dc2c..b3a3981c82ddd0dd8cf8776b5adfafb49aba146b 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/ElHelper.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/ElHelper.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.el; +package de.evoal.core.ea.main.constraints.el; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.el.Call; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/LogHelper.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/LogHelper.java similarity index 94% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/LogHelper.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/LogHelper.java index 3fec549bbb0f9a32c226a65d6a2fb3a78c895e61..4d0d70e40601f031632b1bc0aae1c9fd51eb9375 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/LogHelper.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/LogHelper.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.el; +package de.evoal.core.ea.main.constraints.el; import de.evoal.languages.model.ddl.dsl.DataDescriptionLanguageStandaloneSetup; import de.evoal.languages.model.el.Call; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/NumberSwitch.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/NumberSwitch.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/NumberSwitch.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/NumberSwitch.java index ccb30d01d5229a6c942e63f5fae09594cc831f85..b2f107e249cb7defca6f25d7c4c145525ef5c63f 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/NumberSwitch.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/NumberSwitch.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.el; +package de.evoal.core.ea.main.constraints.el; import de.evoal.languages.model.el.*; import de.evoal.languages.model.el.util.ELSwitch; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/StringSwitch.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/StringSwitch.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/StringSwitch.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/StringSwitch.java index df1834226708af97c4a157c06e4ee355f3e4ca1c..1dc2d79e2b26a99f4f1919649edc3c3e73293f90 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/StringSwitch.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/StringSwitch.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.el; +package de.evoal.core.ea.main.constraints.el; import de.evoal.languages.model.el.*; import de.evoal.languages.model.el.util.ELSwitch; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/ValueReferenceSwitch.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/ValueReferenceSwitch.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/ValueReferenceSwitch.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/ValueReferenceSwitch.java index b7e4876d28a70e35d22b40f50712f5e50068ff3a..0172ec4383b15d633d887ff151dc4241952f469c 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/ValueReferenceSwitch.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraints/el/ValueReferenceSwitch.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.constraints.el; +package de.evoal.core.ea.main.constraints.el; import de.evoal.core.api.utils.Requirements; import de.evoal.languages.model.ddl.DataDescription; 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.ea/src/main/java/de/evoal/core/ea/main/fitness/DistanceFitness.java similarity index 91% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/fitness/DistanceFitness.java index d7cc3febb98ba5dabe5afcb834206c92dd90f074..31a289cbfe2dc4b1fccfe9938f0076e2a9edc377 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.ea/src/main/java/de/evoal/core/ea/main/fitness/DistanceFitness.java @@ -1,9 +1,9 @@ -package de.evoal.core.main.ea.fitness; +package de.evoal.core.ea.main.fitness; import de.evoal.core.api.board.Blackboard; 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.optimisation.OptimisationFunction; +import de.evoal.core.api.optimisation.OptimisationFunctionDecorator; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.utils.Requirements; @@ -17,7 +17,7 @@ import javax.inject.Named; @Dependent @Named("distance") @Slf4j -public class DistanceFitness extends FitnessDecorator { +public class DistanceFitness extends OptimisationFunctionDecorator { @Inject private Blackboard board; @@ -47,7 +47,7 @@ public class DistanceFitness extends FitnessDecorator { } @Override - public FitnessFunction init(final Instance config) { + public OptimisationFunction init(final Instance config) { super.init(config); final Attribute target = config.findAttribute("target"); 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.ea/src/main/java/de/evoal/core/ea/main/fitness/FitnessFactory.java similarity index 72% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/fitness/FitnessFactory.java index c5ce9b63763ab38961b86bc625eefcce4b2f0ae2..0f6fc428d7792c32bb8bca09291db922fa442f2e 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.ea/src/main/java/de/evoal/core/ea/main/fitness/FitnessFactory.java @@ -1,19 +1,19 @@ -package de.evoal.core.main.ea.fitness; +package de.evoal.core.ea.main.fitness; import de.evoal.core.api.board.CoreBlackboardEntries; +import de.evoal.core.api.cdi.BeanFactory; import de.evoal.core.api.cdi.ConfigurationValue; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; import javax.enterprise.inject.Produces; -import de.evoal.core.api.ea.fitness.FitnessFunction; -import de.evoal.core.api.ea.fitness.comparator.FitnessComparator; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.optimisation.OptimisationFunction; +import de.evoal.core.api.optimisation.OptimisationValueComparator; +import de.evoal.core.api.optimisation.OptimisationValue; import de.evoal.core.api.properties.Properties; import de.evoal.languages.model.instance.Instance; import lombok.extern.slf4j.Slf4j; -import org.apache.deltaspike.core.api.provider.BeanProvider; @ApplicationScoped @Slf4j @@ -38,16 +38,16 @@ public class FitnessFactory { log.info("Creating fitness function {} and using comparator {}.", fitnessName, comparatorName); - final FitnessFunction ff = BeanProvider.getContextualReference(fitnessName, false, FitnessFunction.class) + final OptimisationFunction ff = BeanFactory.create(fitnessName, OptimisationFunction.class) .init(fitnessConfig); - final FitnessComparator cmp = BeanProvider.getContextualReference(comparatorName, false, FitnessComparator.class) + final OptimisationValueComparator cmp = BeanFactory.create(comparatorName, OptimisationValueComparator.class) .init(comparatorConfig); return new JeneticsFitnessFunction() { @Override - public FitnessValue apply(final Properties properties) { + public OptimisationValue apply(final Properties properties) { double [] values = ff.evaluate(properties); - return cmp.compare(values); + return cmp.toValue(values); } }; } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/JeneticsFitnessFunction.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/fitness/JeneticsFitnessFunction.java similarity index 55% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/JeneticsFitnessFunction.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/fitness/JeneticsFitnessFunction.java index 5da57327355a1db7f3914fe8ef6a74e4c9eefb5e..385fddba8a2899b0087af37e85ea180f326883f1 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/JeneticsFitnessFunction.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/fitness/JeneticsFitnessFunction.java @@ -1,9 +1,9 @@ -package de.evoal.core.main.ea.fitness; +package de.evoal.core.ea.main.fitness; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.optimisation.OptimisationValue; import de.evoal.core.api.properties.Properties; import java.util.function.Function; -public interface JeneticsFitnessFunction extends Function<Properties, FitnessValue> { +public interface JeneticsFitnessFunction extends Function<Properties, OptimisationValue> { } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/MalusFitness.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/fitness/MalusFitness.java similarity index 60% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/MalusFitness.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/fitness/MalusFitness.java index 6a822987666eef56708c0dda6039a36ad670ccef..9e864dcd026390003f91196b2f7edcf2f668dbde 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/MalusFitness.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/fitness/MalusFitness.java @@ -1,14 +1,9 @@ -package de.evoal.core.main.ea.fitness; +package de.evoal.core.ea.main.fitness; -import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.board.BlackboardEntry; -import de.evoal.core.api.ea.constraints.strategies.fitness.MalusForFitnessStrategy; -import de.evoal.core.api.ea.fitness.FitnessDecorator; -import de.evoal.core.api.ea.fitness.FitnessFunction; +import de.evoal.core.ea.api.constraints.strategies.fitness.MalusForFitnessStrategy; +import de.evoal.core.api.optimisation.OptimisationFunctionDecorator; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; -import de.evoal.core.api.utils.Requirements; -import de.evoal.languages.model.instance.*; import lombok.extern.slf4j.Slf4j; import javax.enterprise.context.Dependent; @@ -18,10 +13,10 @@ import javax.inject.Named; @Dependent @Named("malus") @Slf4j -public class MalusFitness extends FitnessDecorator { +public class MalusFitness extends OptimisationFunctionDecorator { @Inject - @Named("optimization-function-output") + @Named("optimisation-function-output") private PropertiesSpecification fitnessSpecification; @Inject 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.ea/src/main/java/de/evoal/core/ea/main/initial/InitialPopulationFactory.java similarity index 86% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/InitialPopulationFactory.java index 859982a02ffcf4b286a1b8f577da4dc7ec6c38f1..139cba9653bf37c66b1c5b599aa60a643c22c7d3 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.ea/src/main/java/de/evoal/core/ea/main/initial/InitialPopulationFactory.java @@ -1,9 +1,9 @@ -package de.evoal.core.main.ea.initial; +package de.evoal.core.ea.main.initial; 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; +import de.evoal.core.ea.api.initial.InitialPopulation; import de.evoal.languages.model.instance.Instance; import javax.enterprise.context.Dependent; @@ -15,7 +15,7 @@ import javax.inject.Named; public class InitialPopulationFactory { @Inject - @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialisation") private Instance initialization; /** diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomInitialPopulation.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/RandomInitialPopulation.java similarity index 77% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomInitialPopulation.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/RandomInitialPopulation.java index 9ea64a72fa31208ced48e34eed27fbd527c00536..21140c0dd730a53b197d50f1ea0e75bd25339b08 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomInitialPopulation.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/RandomInitialPopulation.java @@ -1,14 +1,11 @@ -package de.evoal.core.main.ea.initial; +package de.evoal.core.ea.main.initial; -import de.evoal.core.api.ea.initial.InitialPopulation; +import de.evoal.core.ea.api.initial.InitialPopulation; import de.evoal.languages.model.instance.Instance; import io.jenetics.Gene; import io.jenetics.engine.Engine; import io.jenetics.engine.EvolutionStream; -import javax.enterprise.context.Dependent; -import javax.inject.Named; - public class RandomInitialPopulation<G extends Gene<?, G>, C extends Comparable<C>> implements InitialPopulation<G, C> { @Override public InitialPopulation init(final Instance initialization) { 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.ea/src/main/java/de/evoal/core/ea/main/initial/RandomProducer.java similarity index 85% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/RandomProducer.java index 168407850ea77deca4ae5dcfdbca5bccaaf7b929..fb5ca8adba21dfc6cde853ee269a8155a3433e74 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.ea/src/main/java/de/evoal/core/ea/main/initial/RandomProducer.java @@ -1,9 +1,9 @@ -package de.evoal.core.main.ea.initial; +package de.evoal.core.ea.main.initial; 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; +import de.evoal.core.ea.api.initial.InitialPopulation; import de.evoal.languages.model.instance.Instance; import javax.enterprise.context.ApplicationScoped; @@ -20,7 +20,7 @@ public class RandomProducer { @Produces @Dependent @Named("random") - public InitialPopulation create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) { + public InitialPopulation create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialisation") 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/jenetics/AbstractBoundedChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/AbstractBoundedChromosome.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/AbstractBoundedChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/AbstractBoundedChromosome.java index 4b56a1493e18bf06993ecfb884aaa4fd3005f21f..d002182ec860ee524b45e2b19b865f163deb0dae 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/AbstractBoundedChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/AbstractBoundedChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import static io.jenetics.internal.util.Hashes.hash; import java.util.Objects; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BitChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BitChromosome.java similarity index 99% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BitChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BitChromosome.java index f3d7eec0c9f8f0e78f2118ab26aac80a8c121f64..a0333d81f908ae38610ba6a2d19f0f1faa755078 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BitChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BitChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import static java.lang.Math.min; import static java.util.Objects.requireNonNull; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BitHelper.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BitHelper.java similarity index 97% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BitHelper.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BitHelper.java index 5b476c49cf3f694d8eee98971c5642ae2c60138b..9e05d5844b4cfeb8e41bb456a41f574a58079053 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BitHelper.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BitHelper.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import org.decimal4j.api.ImmutableDecimal; import org.decimal4j.factory.Factories; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedBitChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedBitChromosome.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedBitChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedBitChromosome.java index b2ea8a64feaf43ce589c65cd5292ea44f7de5edb..c3a7c1172d8eb0fc4c91344d926deb78d0d6417c 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedBitChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedBitChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import io.jenetics.BitGene; import io.jenetics.util.ISeq; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedDoubleChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedDoubleChromosome.java similarity index 99% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedDoubleChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedDoubleChromosome.java index d0999989bee80b2ded4d58a3116a7f9e4b4b06c1..d765bbd517ef1d745176124f09a23ee21a60dac9 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedDoubleChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedDoubleChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import io.jenetics.*; import io.jenetics.util.DoubleRange; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedDoubleGene.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedDoubleGene.java similarity index 99% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedDoubleGene.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedDoubleGene.java index e5bce3ebd9acf91a480ed61291df6f6284dc49f0..b15307ec161c9a6ac84f0f9fef6af3da79050c19 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedDoubleGene.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedDoubleGene.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import io.jenetics.DoubleGene; import io.jenetics.NumericGene; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedIntegerChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedIntegerChromosome.java similarity index 99% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedIntegerChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedIntegerChromosome.java index 2421adcb1d76d3daa2fbe89aad75c68589b58d3c..db4a17bdca01aaded5e0d8d9bcf12dcb7bef3fb8 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedIntegerChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedIntegerChromosome.java @@ -1,8 +1,7 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import io.jenetics.DoubleGene; import io.jenetics.NumericChromosome; -import io.jenetics.util.DoubleRange; import io.jenetics.util.ISeq; import io.jenetics.util.IntRange; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedIntegerGene.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedIntegerGene.java similarity index 99% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedIntegerGene.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedIntegerGene.java index d29ed1f14fbdb530aa5646c82eb8c65f0c13a8ae..64192d0d6fd42dabf3c521325e629a15e8b27a98 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedIntegerGene.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedIntegerGene.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import io.jenetics.DoubleGene; import io.jenetics.NumericGene; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedOperations.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedOperations.java similarity index 95% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedOperations.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedOperations.java index 7d513c65672115aa66aeb5680e09905d9fb85872..4dcb0e288c50200d62f580bf7b3c12894211ebb6 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/BoundedOperations.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/BoundedOperations.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import io.jenetics.util.RandomRegistry; diff --git a/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/ConstraintList.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/ConstraintList.java new file mode 100644 index 0000000000000000000000000000000000000000..30207b914012990d4c7779dc840a51b50c4e0a30 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/ConstraintList.java @@ -0,0 +1,32 @@ +package de.evoal.core.ea.main.jenetics; + +import de.evoal.core.api.optimisation.OptimisationValue; +import io.jenetics.Gene; +import io.jenetics.Phenotype; +import io.jenetics.engine.Constraint; + +import java.util.List; + +public class ConstraintList<G extends Gene<?, G>> implements Constraint<G, OptimisationValue> { + private final List<Constraint<G, OptimisationValue>> constraints; + + public ConstraintList(final List<Constraint<G, OptimisationValue>> constraints) { + this.constraints = constraints; + } + + @Override + public boolean test(final Phenotype<G, OptimisationValue> individual) { + return constraints.stream().allMatch(c -> c.test(individual)); + } + + @Override + public Phenotype<G, OptimisationValue> repair(Phenotype<G, OptimisationValue> individual, long generation) { + Phenotype<G, OptimisationValue> phenotype = individual; + + for(final Constraint<G, OptimisationValue> c : constraints) { + phenotype = c.repair(phenotype, generation); + } + + return phenotype; + } +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/DecimalFactory.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/DecimalFactory.java similarity index 92% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/DecimalFactory.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/DecimalFactory.java index fd9e1160bf38d0f72d0e06be6c379889b07303a5..8b0f34f05a932e640d4e2d7924dec783a0db6c6e 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/DecimalFactory.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/DecimalFactory.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import org.decimal4j.api.ImmutableDecimal; import org.decimal4j.factory.Factories; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/GrayBoundedBitChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/GrayBoundedBitChromosome.java similarity index 97% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/GrayBoundedBitChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/GrayBoundedBitChromosome.java index bf1398b8101ad170334d20c10979afc4ed2d1c94..ba255604be98aaab64e29e84b4de69cbd0775052 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/GrayBoundedBitChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/GrayBoundedBitChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import io.jenetics.util.RandomRegistry; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/GrayHelper.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/GrayHelper.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/GrayHelper.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/GrayHelper.java index 65fe1161df8b12bf0178b16d75c3c48b6e28ab16..a44369f035e551cb1b186c462c902d78f24af708 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/GrayHelper.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/GrayHelper.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; /** * Helper class for the gray encoding diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/NaiveBoundedBitChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/NaiveBoundedBitChromosome.java similarity index 97% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/NaiveBoundedBitChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/NaiveBoundedBitChromosome.java index 20ae13a7bff17c6395ea98b25bfaa8f372244d1b..e6d2be3e22050af609cb1f421118da154c2945c2 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/NaiveBoundedBitChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/NaiveBoundedBitChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import io.jenetics.util.RandomRegistry; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/VariableChromosome.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/VariableChromosome.java similarity index 98% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/VariableChromosome.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/VariableChromosome.java index f180cfb880c53c519d3cc244ebd2d7eaef013039..2300fde219e5efaee161b7822706cdfe41e433ff 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/VariableChromosome.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/VariableChromosome.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.jenetics; +package de.evoal.core.ea.main.jenetics; import static java.lang.String.format; import static java.util.Objects.requireNonNull; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/DataConstraintProducer.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/DataConstraintProducer.java similarity index 92% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/DataConstraintProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/DataConstraintProducer.java index f9a5a649d821230bb871d1003265e4e31ba7ebc2..0e4adb7bc0cc3ff49292fdfa3dc2148086eb7f26 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/DataConstraintProducer.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/DataConstraintProducer.java @@ -1,11 +1,10 @@ -package de.evoal.core.main.producer; +package de.evoal.core.ea.main.producer; -import de.evoal.core.api.ea.constraints.model.DataConstraints; +import de.evoal.core.ea.api.constraints.model.DataConstraints; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.DataDescriptionModel; import de.evoal.languages.model.ddl.TypedDataDescription; import de.evoal.languages.model.ol.OptimisationModel; -import de.evoal.languages.model.el.Expression; import de.evoal.languages.model.instance.DataReference; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EObject; @@ -13,8 +12,6 @@ import org.eclipse.emf.ecore.EObject; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; import javax.enterprise.inject.Produces; -import javax.inject.Named; -import java.util.Collection; import java.util.HashSet; import java.util.Objects; import java.util.Set; 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.ea/src/main/java/de/evoal/core/ea/main/producer/OptimisingFunctionProducer.java similarity index 76% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/OptimisingFunctionProducer.java index 77900cf3b87e9835e35da15ac8a122ad36c2ed4c..6643c5f49d0d8f452811d70eda3cb6b179f2959d 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.ea/src/main/java/de/evoal/core/ea/main/producer/OptimisingFunctionProducer.java @@ -1,14 +1,14 @@ -package de.evoal.core.main.ea.producer; +package de.evoal.core.ea.main.producer; 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.fitness.FitnessFunction; +import de.evoal.core.api.optimisation.OptimisationFunction; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Attribute; import de.evoal.languages.model.instance.DataReference; import de.evoal.languages.model.instance.Instance; -import org.apache.deltaspike.core.api.provider.BeanProvider; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; @@ -16,35 +16,35 @@ import javax.enterprise.inject.Produces; import javax.inject.Named; @ApplicationScoped -public class OptimizingFunctionProducer { +public class OptimisingFunctionProducer { @Produces @Dependent - @Named("optimization-function-input") + @Named("optimisation-function-input") public PropertiesSpecification createInputSpec(final @Named("genotype-specification") PropertiesSpecification genotypeSpec) { return genotypeSpec; } @Produces @ApplicationScoped - @Named("optimization-function-configuration") + @Named("optimisation-function-configuration") public Instance find(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfiguration) { return findInner(fitnessConfiguration); } @Produces @Dependent - @Named("optimization-function-output") - public PropertiesSpecification createOutputSpec(final @Named("optimization-function-configuration") Instance configuration) { + @Named("optimisation-function-output") + public PropertiesSpecification createOutputSpec(final @Named("optimisation-function-configuration") Instance configuration) { return toSpecification(configuration); } @Produces @ApplicationScoped - @Named("optimization-function") - private FitnessFunction create(final @Named("optimization-function-configuration") Instance configuration) { + @Named("optimisation-function") + private OptimisationFunction create(final @Named("optimisation-function-configuration") Instance configuration) { final String fitnessName = configuration.getDefinition().getName(); - return BeanProvider.getContextualReference(fitnessName, false, FitnessFunction.class) + return BeanFactory.create(fitnessName, OptimisationFunction.class) .init(configuration); } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/PropertiesBoundariesProducer.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/PropertiesBoundariesProducer.java similarity index 72% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/PropertiesBoundariesProducer.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/PropertiesBoundariesProducer.java index 10bb824a14c58a69a97b2152caee71dad7542568..8bcd55951d40f83455d9d3fe800bed9b01024d62 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/PropertiesBoundariesProducer.java +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/PropertiesBoundariesProducer.java @@ -1,17 +1,13 @@ -package de.evoal.core.main.producer; +package de.evoal.core.ea.main.producer; -import de.evoal.core.api.ea.constraints.model.DataConstraints; +import de.evoal.core.ea.api.constraints.model.DataConstraints; import de.evoal.core.api.properties.PropertiesSpecification; -import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.info.PropertiesBoundaries; -import de.evoal.core.api.properties.info.PropertiesRanges; -import de.evoal.core.main.ea.constraints.constraint.ast.BoundaryIdentifier; -import de.evoal.languages.model.el.Expression; +import de.evoal.core.ea.main.constraints.constraint.ast.BoundaryIdentifier; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import javax.inject.Named; -import java.util.Collection; @ApplicationScoped public class PropertiesBoundariesProducer { 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.ea/src/main/java/de/evoal/core/ea/main/producer/SelectorFactory.java similarity index 99% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/SelectorFactory.java index 17433b5e20e27fb2d28b467c69951a2a6bd128a7..2b201bd1054b145134af66b8cd56d30990030553 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.ea/src/main/java/de/evoal/core/ea/main/producer/SelectorFactory.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.producer; +package de.evoal.core.ea.main.producer; import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; 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.ea/src/main/java/de/evoal/core/ea/main/search/EvolutionaryAlgorithmSearch.java similarity index 71% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java rename to src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/search/EvolutionaryAlgorithmSearch.java index 23a6c383b5de9acabd43d9dda4dd58bc8057ee5a..66596c25cba77d98bf953ad4eda5bc40e58c1d6c 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.ea/src/main/java/de/evoal/core/ea/main/search/EvolutionaryAlgorithmSearch.java @@ -1,4 +1,4 @@ -package de.evoal.core.main.ea.search; +package de.evoal.core.ea.main.search; import java.io.File; import java.time.Duration; @@ -10,16 +10,17 @@ 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; -import de.evoal.core.api.ea.initial.InitialPopulation; -import de.evoal.core.api.search.OptimisationAlgorithm; +import de.evoal.core.ea.api.initial.InitialPopulation; +import de.evoal.core.api.optimisation.OptimisationAlgorithm; import de.evoal.core.api.utils.LanguageHelper; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; - -import de.evoal.core.api.statistics.StatisticsWriter; -import de.evoal.core.main.ea.alterer.AltererFactory; -import de.evoal.core.main.ea.codec.DynamicCodec; -import de.evoal.core.main.ea.fitness.JeneticsFitnessFunction; -import de.evoal.core.main.jenetics.ConstraintList; +import de.evoal.core.api.optimisation.OptimisationValue; + +import de.evoal.core.api.statistics.writer.StatisticsWriter; +import de.evoal.core.ea.main.fitness.JeneticsFitnessFunction; +import de.evoal.core.ea.main.jenetics.ConstraintList; +import de.evoal.core.ea.main.alterer.AltererFactory; +import de.evoal.core.ea.main.codec.DynamicCodec; +import de.evoal.core.ea.main.statistics.JeneticsStatisticsWriter; import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Attribute; import de.evoal.languages.model.instance.Value; @@ -65,14 +66,14 @@ public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm { private int sizeOfPopulation; @Inject - @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.maximize") + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.maximise") private Boolean maximize; @Inject @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.maximum-age") private int maximumAge; - private final Map<String, List<Alterer<?, FitnessValue>>> alterers = new HashMap<>(); + private final Map<String, List<Alterer<?, OptimisationValue>>> alterers = new HashMap<>(); @Inject private DynamicCodec encoding; @@ -109,9 +110,9 @@ public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm { public void run() { setup(); - final Constraint<?, FitnessValue> constraint = new ConstraintList(constraints.get()); + final Constraint<?, OptimisationValue> constraint = new ConstraintList(constraints.get()); - final Engine<?, FitnessValue> engine= Engine.builder(this.fitnessFunction, encoding) + final Engine<?, OptimisationValue> engine= Engine.builder(this.fitnessFunction, encoding) .alterers(flattenAltererMap()) .offspringSelector(this.offspringSelector) .survivorsSelector(this.survivorSelector) @@ -122,14 +123,15 @@ public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm { .executor(executor) .build(); - EvolutionStatistics<FitnessValue, MinMax<FitnessValue>> statistics = EvolutionStatistics.ofComparable(); - EvolutionStream<?, FitnessValue> initialStream = initalStream.create(engine); + EvolutionStatistics<OptimisationValue, MinMax<OptimisationValue>> statistics = EvolutionStatistics.ofComparable(); + EvolutionStream<?, OptimisationValue> initialStream = initalStream.create(engine); + JeneticsStatisticsWriter writer = new JeneticsStatisticsWriter(this.statistics); - final EvolutionResult<?, FitnessValue> result + final EvolutionResult<?, OptimisationValue> result = initialStream.limit(Limits.byFixedGeneration(numberOfGenerations)) .limit(Limits.byExecutionTime(Duration.ofMinutes(5))) // .parallel() - .peek(this.statistics::add) + .peek(writer::add) .peek(statistics) .collect(EvolutionResult.toBestEvolutionResult()); this.statistics.write(); @@ -158,15 +160,15 @@ public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm { } } - private <G extends Gene<?, G>> Alterer<?, FitnessValue> flattenAltererMap() { - Alterer<G, FitnessValue> result = null; + private <G extends Gene<?, G>> Alterer<?, OptimisationValue> flattenAltererMap() { + Alterer<G, OptimisationValue> result = null; - for(final Map.Entry<String, List<Alterer<?, FitnessValue>>> entry : alterers.entrySet()) { - for(final Alterer<?, FitnessValue> e : entry.getValue()) { + for(final Map.Entry<String, List<Alterer<?, OptimisationValue>>> entry : alterers.entrySet()) { + for(final Alterer<?, OptimisationValue> e : entry.getValue()) { if(result == null) { - result = (Alterer<G, FitnessValue>) e; + result = (Alterer<G, OptimisationValue>) e; } else { - result = Alterer.of(result, (Alterer<G, FitnessValue>) e); + result = Alterer.of(result, (Alterer<G, OptimisationValue>) e); } } } diff --git a/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/CandidateAdapter.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/CandidateAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..9836c62e3b15a723cff930e9bd9b6d8f6da2b63d --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/CandidateAdapter.java @@ -0,0 +1,63 @@ +package de.evoal.core.ea.main.statistics; + +import de.evoal.core.api.optimisation.OptimisationValue; +import de.evoal.core.api.properties.Properties; +import de.evoal.core.api.statistics.Candidate; +import de.evoal.core.ea.main.codec.DynamicCodec; +import io.jenetics.Phenotype; + +import javax.enterprise.context.Dependent; +import javax.inject.Inject; + +/** + * An adapter, c.f. GOF: adapter pattern, for adapting Jenetic's {@link Phenotype} to + * EvoAl's {@link Candidate}. + */ +@Dependent +public class CandidateAdapter implements Candidate { + + /** + * Generation for which the adapter was created for (necessary for calculating + * the candidate's age). + */ + private int generation; + + /** + * The candidate's phenotype. + */ + private Phenotype<?, OptimisationValue> phenotype; + + @Inject + private DynamicCodec codec; + + public CandidateAdapter init(final Phenotype<?, OptimisationValue> phenotype, final int generation) { + this.phenotype = phenotype; + this.generation = generation; + + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public Properties searchSpaceRepresentation() { + return (Properties) codec.decoder().apply(phenotype.genotype()); + } + + /** + * {@inheritDoc} + */ + @Override + public int age() { + return (int) phenotype.age(generation); + } + + /** + * {@inheritDoc} + */ + @Override + public OptimisationValue value() { + return phenotype.fitness(); + } +} diff --git a/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/IterationResultAdapter.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/IterationResultAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..76f9b86fdb6cfaf0cb5e5310bfbbcc2cd3512ae1 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/IterationResultAdapter.java @@ -0,0 +1,48 @@ +package de.evoal.core.ea.main.statistics; + +import de.evoal.core.api.cdi.BeanFactory; +import de.evoal.core.api.optimisation.OptimisationValue; +import de.evoal.core.api.statistics.Candidate; +import de.evoal.core.api.statistics.IterationResult; +import io.jenetics.Phenotype; +import io.jenetics.engine.EvolutionResult; + +import java.util.Optional; +import java.util.stream.Stream; + +/** + * An adapter, c.f. GOF: adapter pattern, for adapting Jenetic's {@link EvolutionResult} to + * EvoAl's {@link IterationResult}. + */ +public class IterationResultAdapter implements IterationResult { + + private final EvolutionResult<?, OptimisationValue> statistics; + + public IterationResultAdapter(final EvolutionResult<?, OptimisationValue> statistics) { + this.statistics = statistics; + } + + @Override + public int iteration() { + return (int)statistics.generation(); + } + + @Override + public Stream<Candidate> candidates() { + return statistics.population() + .stream() + .map(p -> BeanFactory.create(CandidateAdapter.class).init(p, (int)statistics.generation())) + .map(Candidate.class::cast); + } + + @Override + public Optional<Integer> candidateCount() { + return Optional.empty(); + } + + @Override + public Candidate bestCandidate() { + return BeanFactory.create(CandidateAdapter.class) + .init(statistics.bestPhenotype(), (int)statistics.generation()); + } +} diff --git a/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/JeneticsStatisticsWriter.java b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/JeneticsStatisticsWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..c2d33ee092dcb532064a0b1e5f30d1f8c1c387e4 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/JeneticsStatisticsWriter.java @@ -0,0 +1,21 @@ +package de.evoal.core.ea.main.statistics; + +import de.evoal.core.api.optimisation.OptimisationValue; +import de.evoal.core.api.statistics.writer.StatisticsWriter; +import io.jenetics.engine.EvolutionResult; + +/** + * Adapter for converting Jenetis statistics information into EvoAl + * statistics information. + */ +public class JeneticsStatisticsWriter { + private final StatisticsWriter writer; + + public JeneticsStatisticsWriter(final StatisticsWriter writer) { + this.writer = writer; + } + + public void add(final EvolutionResult<?, OptimisationValue> result) { + writer.add(new IterationResultAdapter(result)); + } +} diff --git a/src/core/de.evoal.core.ea/src/main/java/module-info.java b/src/core/de.evoal.core.ea/src/main/java/module-info.java new file mode 100644 index 0000000000000000000000000000000000000000..a3984f71de6bc9627b425189c8cb9f4065f3446d --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/java/module-info.java @@ -0,0 +1,49 @@ +module de.evoal.core.ea { + exports de.evoal.core.ea.api.codec; + exports de.evoal.core.ea.api.initial; + exports de.evoal.core.ea.api.constraints.strategies; + exports de.evoal.core.ea.api.correlations; + exports de.evoal.core.ea.api.constraints.calculation; + exports de.evoal.core.ea.api.constraints.model; + requires jakarta.enterprise.cdi.api; + requires jakarta.inject.api; + + requires lombok; + + requires org.slf4j; + + requires commons.math3; + requires io.jenetics.ext; + + requires org.eclipse.emf.common; + + requires de.evoal.languages.model.ddl; + requires de.evoal.languages.model.el; + requires de.evoal.languages.model.instance; + + requires de.evoal.core.main; + requires java.annotation; + requires decimal4j; + requires de.evoal.languages.model.ol; + + opens de.evoal.core.ea.api.correlations to weld.core.impl; + opens de.evoal.core.ea.api.constraints.model to weld.core.impl; + opens de.evoal.core.ea.api.constraints.calculation to weld.core.impl; + + opens de.evoal.core.ea.main.alterer to weld.core.impl; + opens de.evoal.core.ea.main.alterer.mutator to weld.core.impl; + opens de.evoal.core.ea.main.codec to weld.core.impl; + opens de.evoal.core.ea.main.codec.chromosome to weld.core.impl; + opens de.evoal.core.ea.main.comparator to weld.core.impl; + opens de.evoal.core.ea.main.constraints.constraint to weld.core.impl; + opens de.evoal.core.ea.main.constraints.constraint.strategies.constraint to weld.core.impl; + opens de.evoal.core.ea.main.constraints.constraint.strategies.calculations to weld.core.impl; + opens de.evoal.core.ea.main.constraints.constraint.strategies.fitness to weld.core.impl; + opens de.evoal.core.ea.main.constraints.correlation to weld.core.impl; + opens de.evoal.core.ea.main.constraints.deviation to weld.core.impl; + opens de.evoal.core.ea.main.fitness to weld.core.impl; + opens de.evoal.core.ea.main.initial to weld.core.impl; + opens de.evoal.core.ea.main.producer to weld.core.impl; + opens de.evoal.core.ea.main.search to weld.core.impl; + opens de.evoal.core.ea.main.statistics to weld.core.impl; +} diff --git a/src/core/de.evoal.core.ea/src/main/resources/META-INF/MANIFEST.MF b/src/core/de.evoal.core.ea/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000000000000000000000000000000000..9d885be534121a9f146924f4832955dfe2ee2d4b --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1 @@ +Manifest-Version: 1.0 diff --git a/src/core/de.evoal.core.ea/src/main/resources/META-INF/beans.xml b/src/core/de.evoal.core.ea/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000000000000000000000000000000000000..36964de4bdc1dbcbbf02c9552692e62804947dc3 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/resources/META-INF/beans.xml @@ -0,0 +1,11 @@ +<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd" + bean-discovery-mode="annotated" + version="2.0"> + <scan> + <exclude name="org.apache.deltaspike.core.impl.throttling.ThrottledInterceptor" /> + <exclude name="org.apache.deltaspike.core.impl.scope.window.DefaultWindowContextQuotaHandler" /> + <exclude name="org.apache.deltaspike.core.impl.scope.window.WindowBeanHolder" /> + </scan> +</beans> \ No newline at end of file diff --git a/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/data/constraints.dl b/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/data/constraints.dl new file mode 100644 index 0000000000000000000000000000000000000000..1ba8690e74f9ad2ba8fd29a3979296932e3c9ee7 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/data/constraints.dl @@ -0,0 +1,13 @@ +/** + * Sets the variance of some data. + * + * <b>Parameters:</b> + * <ol> + * <li>Reference to the data ...</li> + * </ol> + */ +def void variance(data reference, float variance); + +def void connection(data ref1, data ref2, float connection); + +def void constraint(expression exp, string category); diff --git a/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/data/si-units.ddl b/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/data/si-units.ddl new file mode 100644 index 0000000000000000000000000000000000000000..b7e8f2976ccf4269c5d941834c9e8f2a99c168c6 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/data/si-units.ddl @@ -0,0 +1,67 @@ +types: + cardinal type Newton description : "SI-Unit for force, measure in Newton[N=kg*m/s*s]." + with constraints: + value >= 0.0; + ; + + quotient type Meter description: "SI-Unit for lengths, measured in metres[m]." + with constraints: + value >= 0.0; + ; + + quotient type Second description: "SI-Unit for time, measured in seconds[s]." + with constraints: + value >= 0.0; + ; + + quotient type Kilogram description: "SI-Unit for mass, measured in kilogram[kg]." + with constraints: + value >= 0.0; + ; + + quotient type Ampere description: "SI-Unit for eletric current, measured in ampere[A]." + with constraints: + value >= 0.0; + ; + + quotient type Kelvin description: "SI-Unit for thermodynamic temperature, measured in kelvin[K]." + with constraints: + value >= 0.0; + ; + + quotient type Mole description: "SI-Unit for amount of substance, measure in mole[mol]." + with constraints: + value >= 0.0; + ; + + quotient type Candela description: "SI-Unit for luminous intensity, measured in candela[cd]." + with constraints: + value >= 0.0; + ; + + quotient type Hertz description: "SI-Unit for frequency, measured in hertz[Hz=1/s]." + with constraints: + value >= 0.0; + ; + + quotient type Speed description: "SI-Unit for frequency, measured in metre per second[m/s]." + with constraints: + value >= 0.0; + ; + + quotient type Pascal description: "SI-Unit for pressure, measure in Pascal[Pa=kg/m*s*s]." + with constraints: + value >= 0.0; + ; + + cardinal type Celsius description: "SI-Unit for temperature relative to 273.15 K, measured in Celsius[°C=K]" + with constraints: + value >= -273.15; + ; + + quotient type Area description: "SI-Unit for areas, measured in square meter[m*m]" + with constraints: + value >= 0.0; + ; + + \ No newline at end of file diff --git a/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/optimisation/core.dl b/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/optimisation/core.dl new file mode 100644 index 0000000000000000000000000000000000000000..911896202f48220753f39a88c2e76c6a525f617b --- /dev/null +++ b/src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/optimisation/core.dl @@ -0,0 +1,434 @@ +/** + * Root element for an evolutionary algorithm configuration. + */ +type configuration { + /** + * A freely selectable name for the configuration. + */ + name : string; + + /** + * The algorithm configuration. + */ + algorithm : instance algorithm; + + /** + * Configuration of statistics to measure and to write. + */ + statistics : instance statistics; +} + +abstract type algorithm {} + +type 'evolutionary-algorithm' extends 'algorithm' { + 'number-of-generations' : int; + 'size-of-population' : int; + 'maximum-age' : int; + maximize : boolean; + + genotype : array instance chromosome; + + initialization : instance 'initial-population'; + handlers : array instance 'handler'; + selectors : instance selectors; + alterers : instance alterers; + + fitness : instance 'fitness-function'; + comparator : instance comparator; +} + +abstract type chromosome { + genes : array instance gene; +} + +type 'bit-chromosome' extends chromosome { + scale : int; +} + +type 'gray-chromosome' extends 'bit-chromosome' { + scale : int; +} + +type 'double-chromosome' extends chromosome { +} + +type 'integer-chromosome' extends chromosome { +} + +type gene { content : data; } + +abstract type comparator {} + +type 'weighted-sum' extends comparator { + weights : array float; +} + +type pareto extends comparator { +} + +/** + * Abstract base class for functions to map the individual to the target values. + */ +abstract type 'fitness-function' {} + +/** + * Abstract base class for all fitness functions that call a subsequent fitness function during calculation. + */ +abstract type 'decorated-fitness-function' extends 'fitness-function' { + /** + * Fitness function we are calling during the fitness calculation. + */ + function : instance 'fitness-function'; +} + +type 'malus' extends 'decorated-fitness-function' { +} + +/** + * Fitness function that calculates the difference between a fitness value and a + * target value to optimize to:<br/> + * + * <mathml> + * <math> + * <mrow> + * <mi>f</mi> + * <mi>i</mi> + * <mi>t</mi> + * <mi>n</mi> + * <mi>e</mi> + * <mi>s</mi> + * <mi>s</mi> + * <mo>=</mo> + * <mi>f</mi> + * <mi>u</mi> + * <mi>n</mi> + * <mi>c</mi> + * <mi>t</mi> + * <mi>i</mi> + * <mi>o</mi> + * <mi>n</mi> + * <mo form="prefix" stretchy="false">(</mo> + * <mi>i</mi> + * <mi>n</mi> + * <mi>d</mi> + * <mo form="postfix" stretchy="false">)</mo> + * <mo>−</mo> + * <mi>t</mi> + * <mi>a</mi> + * <mi>r</mi> + * <mi>g</mi> + * <mi>e</mi> + * <mi>t</mi> + * </mrow> + * </math> + * </mathml> + */ +type distance extends 'decorated-fitness-function' { + target : array instance variable; +} + +type variable { + name : data; + val : literal; +} + +abstract type 'goal-function' extends 'fitness-function' { + 'maps-to' : array data; +} + +/** + * Calculating fitness value by using a surrogate function:<br/> + * + * <mathml> + * <math> + * <mrow> + * <mi>f</mi> + * <mi>i</mi> + * <mi>t</mi> + * <mi>n</mi> + * <mi>e</mi> + * <mi>s</mi> + * <mi>s</mi> + * <mo>=</mo> + * <mi>s</mi> + * <mi>u</mi> + * <mi>r</mi> + * <mi>r</mi> + * <mi>o</mi> + * <mi>g</mi> + * <mi>a</mi> + * <mi>t</mi> + * <mi>e</mi> + * <mo form="prefix" stretchy="false">(</mo> + * <mi>i</mi> + * <mi>n</mi> + * <mi>d</mi> + * <mo form="postfix" stretchy="false">)</mo> + * </mrow> + * </math> + * </mathml> + */ +type surrogate extends 'goal-function' { +} + +/** + * Calculating fitness value by using a known function:<br/> + * + * <mathml> + * <math> + * <mrow> + * <mi>f</mi> + * <mi>i</mi> + * <mi>t</mi> + * <mi>n</mi> + * <mi>e</mi> + * <mi>s</mi> + * <mi>s</mi> + * <mo>=</mo> + * <mi>n</mi> + * <mi>o</mi> + * <mi>r</mi> + * <mi>m</mi> + * <mi>a</mi> + * <mi>l</mi> + * <mo form="prefix" stretchy="false">(</mo> + * <mi>i</mi> + * <mi>n</mi> + * <mi>d</mi> + * <mo form="postfix" stretchy="false">)</mo> + * </mrow> + * </math> + * </mathml> + */ +type normal extends 'fitness-function' { +} + +abstract type 'initial-population' {} + +type 'random-population' extends 'initial-population' { +} + +abstract type handler {} + +type 'constraint-handler' extends handler { + category : string; + calculation : instance normal | 'standard-deviation'; + 'constraint-handling' : instance 'kill-at-birth' | 'malus-for-fitness'; +} + +type 'standard-deviation' { + factor : float; +} + +type 'kill-at-birth' { + 'repair-strategy' : instance 'repair-strategy'; +} + +abstract type 'repair-strategy' {} + +type 'repair-with-random' extends 'repair-strategy' {} + +type 'malus-for-fitness' { + smoothing : float; +} + +type selectors { + survivor : instance selector; + offspring : instance selector; +} + +abstract type selector { +} + +type 'elite-selector' extends selector { + 'size-factor' : float; + 'non-elite-selector' : instance selector; +} + +type 'boltzmann-selector' extends selector { + beta : float; +} + +type 'exponential-rank-selector' extends selector { +} + +type 'linear-rank-selector' extends selector { + nminus : int; +} + +type 'monte-carlo-selector' extends selector { +} + +type 'probability-selector' extends selector { +} + +type 'stochastic-universal-selector' extends selector { +} + +type 'tournament-selector' extends selector { + 'size-factor' : float; +} + +type 'truncation-selector' extends selector { + 'worst-rank' : int; +} + +type alterers { + crossover : array instance crossover; + mutator : array instance mutator ; +} + +abstract type crossover {} + +type 'mean-alterer' extends crossover { + probability : float; +} + +type 'correlation-mean-alterer' extends crossover { + probability : float; +} + +type 'partial-matched-alterer' extends crossover { + probability : float; +} + +type 'correlation-partial-matched-alterer' extends crossover { + probability : float; +} + +type 'line-crossover' extends crossover { + probability : float; + position : float; +} + +type 'correlation-line-crossover' extends crossover { + probability : float; + position : float; +} + +type 'multi-point-crossover' extends crossover { + probability : float; + count : int; +} + +type 'correlation-multi-point-crossover' extends crossover { + probability : float; + count : int; +} + +type 'single-point-crossover' extends crossover { + probability : float; +} + +type 'correlation-single-point-crossover' extends crossover { + probability : float; +} + +type 'uniform-crossover' extends crossover { + 'crossover-probability' : float; + 'swap-probability' : float; +} + +type 'correlation-uniform-crossover' extends crossover { + 'crossover-probability' : float; + 'swap-probability' : float; +} + +abstract type mutator { +} + +type 'gaussian-mutator' extends mutator { + probability : float; +} + +type 'correlation-gaussian-mutator' extends mutator { + probability : float; + threshold : float; +} + +type 'swap-mutator' extends mutator { + probability : float; +} + +type 'correlation-swap-mutator' extends mutator { + probability : float; + threshold : float; +} + +type 'bit-flip-mutator' extends mutator { + probability : float; +} + +type 'correlation-bit-flip-mutator' extends mutator { + probability : float; + threshold : float; +} + +type statistics { + writer : array instance 'statistics-writer'; +} + +abstract type 'statistics-writer' { +} + +/** + * Creates a file named '<tt>constraint-statistics.csv</tt>' containing + * information on each generation and constraint violations: + * + * <ul> + * <li>generation</li> + * <li>for each constraint: + * <ul> + * <li>number of violating individuals</li> + * <li>sum of differences</li> + * <li>min of differences</li> + * <li>avg of differences</li> + * <li>max of differences</li> + * </ul> + * </li> + * </ul> + */ +type 'constraint-statistics' extends 'statistics-writer' {} + +/** + * Creates a file named '<tt>fitness-by-individual.csv</tt>' containing for each individual + * of each generation the following information: + * + * <ul> + * <li>generation</li> + * <li>index of individual</li> + * <li>fitness value of each predicted value of the individual</li> + * </ul> + */ +type 'fitness-per-individual' extends 'statistics-writer' {} + +/** + * Creates a file named '<tt>individuals.csv</tt>' containing for each individual + * the following information: + * + * <ul> + * <li>generation</li> + * <li>index of individual</li> + * <li>text representation of individual</li> + * <li>age</li> + * <li>each property value of the individual</li> + * </ul> + */ +type individuals extends 'statistics-writer' {} + +/** + * Does not write any statistics. Can be used to disable statistics output. + */ +type none extends 'statistics-writer' {} + +/** + * Creates a file named '<tt>prediction-by-individual.csv</tt>' containing the + * predicted value(s) of each individual for each generation of the EA run: + * + * <ul> + * <li>generation</li> + * <li>index of individual</li> + * <li>each predicted value of the individual</li> + * </ul> + */ +type 'prediction-per-individual' extends 'statistics-writer' {} 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 new file mode 100644 index 0000000000000000000000000000000000000000..bde38ea56930869c08d8c5628facff9ce8549e30 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.dl @@ -0,0 +1,12 @@ +type 'parent' { + child : instance A; +} + +type A { + 'float-field' : float; + 'string-field' : string; + 'integer-field' : int; + 'boolean-field' : boolean; + 'array-1D-float' : array float; + '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/LanguageHelperTest.ol b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.ol new file mode 100644 index 0000000000000000000000000000000000000000..590943138468706539bb1fb18c6f5ab0e18731d6 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.ol @@ -0,0 +1,16 @@ +use "LanguageHelperTest.dl"; + +parent { + child := A { + 'boolean-field' := true; + 'float-field' := 1.3; + 'integer-field' := 4; + 'string-field' := "FOOBAR"; + 'array-1D-float' := [4.2, 3.1, 1.0]; + 'array-2D-int' := [ + [ 1, 2, 3, 4, 5], + [ 3, 2, 1], + [42] + ]; + }; +} \ 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 new file mode 100644 index 0000000000000000000000000000000000000000..84b046e8f5db1071b6a220fd41d550b9fa7438f4 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/generator.dl @@ -0,0 +1,25 @@ +/** + * Shekel's foxholes. + * + * https://www.sfu.ca/~ssurjano/shekel.html + */ +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; + + /** + * The recommended value for the constant c is { + * {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}, + * {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; + + /** + * The recommended value for the constant m is 10. + */ + 'm' : float; +} diff --git a/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/shekel.generator b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/shekel.generator new file mode 100644 index 0000000000000000000000000000000000000000..7486510a4391b0837bc10ad685c2e5bcf8b06b53 --- /dev/null +++ b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/shekel.generator @@ -0,0 +1,20 @@ +use "generator.dl"; +use "test.ddl"; + +pipeline example [ + step { + component 'shekel' { + 'a' := [1.0,2.0,2.0,4.0,4.0,6.0,3.0,7.0,5.0,5.0]; + 'c' := [ + [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], + [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] + ]; + 'm' := 10.0; + } + + reads [data 'x:0']; + writes [data 'x:1']; + } +] diff --git a/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/test.ddl b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/test.ddl new file mode 100644 index 0000000000000000000000000000000000000000..0a100d6397a8fdf5ddd81abe08ae60078ff8f7aa --- /dev/null +++ b/src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/test.ddl @@ -0,0 +1,3 @@ +data: + quotient real data 'x:0'; + quotient real data 'x:1'; \ No newline at end of file diff --git a/src/core/de.evoal.core.junit/pom.xml b/src/core/de.evoal.core.junit/pom.xml index 18a5e744436027f83c39af47638c2afc2c749ee3..c2754b4c2f2237fae65501e664da1455a3b36891 100644 --- a/src/core/de.evoal.core.junit/pom.xml +++ b/src/core/de.evoal.core.junit/pom.xml @@ -7,6 +7,7 @@ <groupId>de.evoal</groupId> <artifactId>releng.parent</artifactId> <version>0.9.0-SNAPSHOT</version> + <relativePath>../de.evoal.releng.parent</relativePath> </parent> <artifactId>core.junit</artifactId> diff --git a/src/core/de.evoal.core.junit/src/main/java/de/evoal/core/junit/dsl/NoOpBuiltinProvider.java b/src/core/de.evoal.core.junit/src/main/java/de/evoal/core/junit/dsl/NoOpBuiltinProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..76261191afbf917ee20756608b8864871d3ce9e8 --- /dev/null +++ b/src/core/de.evoal.core.junit/src/main/java/de/evoal/core/junit/dsl/NoOpBuiltinProvider.java @@ -0,0 +1,14 @@ +package de.evoal.core.junit.dsl; + +import de.evoal.languages.model.utils.builtin.BuiltinProvider; + +import java.net.URI; +import java.util.Collection; +import java.util.Collections; + +public class NoOpBuiltinProvider implements BuiltinProvider { + @Override + public Collection<URI> findBuiltins(String s) { + return Collections.emptyList(); + } +} diff --git a/src/core/de.evoal.core.junit/src/main/java/module-info.java b/src/core/de.evoal.core.junit/src/main/java/module-info.java index ca0735dc163a81868abfdc47878feef831f2ebc7..8f2e8717619e52df5d81515d2669bf687af79087 100644 --- a/src/core/de.evoal.core.junit/src/main/java/module-info.java +++ b/src/core/de.evoal.core.junit/src/main/java/module-info.java @@ -22,7 +22,10 @@ module de.evoal.core.junit { requires de.evoal.languages.model.generator.dsl; requires de.evoal.languages.model.mll.dsl; requires de.evoal.languages.model.ol.dsl; + requires de.evoal.languages.model.utils; exports de.evoal.core.junit.dsl; exports de.evoal.core.junit.resources; + + provides de.evoal.languages.model.utils.builtin.BuiltinProvider with de.evoal.core.junit.dsl.NoOpBuiltinProvider; } \ No newline at end of file diff --git a/src/core/de.evoal.core.main/pom.xml b/src/core/de.evoal.core.main/pom.xml index 38fb5e77723ed895c8ac0e9b4e1511d810d1d318..b0ed4fc71389a3629053d3496039c5028d1d327f 100644 --- a/src/core/de.evoal.core.main/pom.xml +++ b/src/core/de.evoal.core.main/pom.xml @@ -250,21 +250,6 @@ <scope>compile</scope> </dependency> - <dependency> - <groupId>io.jenetics</groupId> - <artifactId>jenetics.ext</artifactId> - <version>${jenetics.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.decimal4j</groupId> - <artifactId>decimal4j</artifactId> - <version>1.0.3</version> - <scope>compile</scope> - </dependency> - - <!-- Math stuff --> <dependency> <groupId>org.apache.commons</groupId> @@ -273,13 +258,6 @@ <scope>compile</scope> </dependency> - <dependency> - <groupId>com.github.haifengl</groupId> - <artifactId>smile-math</artifactId> - <version>${smile.version}</version> - <scope>compile</scope> - </dependency> - <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> @@ -317,27 +295,6 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>3.10.1</version> - <configuration> - <annotationProcessorPaths> - <path> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - </path> - </annotationProcessorPaths> - <compilerArgs> - <arg>--add-exports</arg> - <arg>io.jenetics.base/io.jenetics.internal.math=de.evoal.core.main</arg> - <arg>--add-exports</arg> - <arg>io.jenetics.base/io.jenetics.internal.util=de.evoal.core.main</arg> - <arg>--add-exports</arg> - <arg>io.jenetics.base/io.jenetics.internal.collection=de.evoal.core.main</arg> - <!--<arg>- -add-exports</arg> - <arg>org.eclipse.xtext.util/org.eclipse.xtext.util=de.evoal.core.main</arg>--> - </compilerArgs> - <forceJavacCompilerUse>true</forceJavacCompilerUse> - </configuration> </plugin> </plugins> </build> diff --git a/src/core/de.evoal.core.main/scripts/paths.env b/src/core/de.evoal.core.main/scripts/paths.env index b627c074ea53d921bad3d9d0d9d61079c4b6c2e0..afa5637770b472eac02c3be7c98c149e6348d5e0 100644 --- a/src/core/de.evoal.core.main/scripts/paths.env +++ b/src/core/de.evoal.core.main/scripts/paths.env @@ -4,7 +4,7 @@ PLUGIN_PATHS=`ls -d "${EVOALPATH}/plugins"/* | tr '\n' ':'` CLASSPATH="-Dorg.jboss.logging.provider=slf4j \ --module-path ${EVOALPATH}/modules/:$PLUGIN_PATHS \ --add-modules ALL-MODULE-PATH \ - --add-exports io.jenetics.base/io.jenetics.internal.math=de.evoal.core.main \ - --add-exports io.jenetics.base/io.jenetics.internal.collection=de.evoal.core.main \ - --add-exports io.jenetics.base/io.jenetics.internal.util=de.evoal.core.main \ + --add-exports io.jenetics.base/io.jenetics.internal.math=de.evoal.core.ea \ + --add-exports io.jenetics.base/io.jenetics.internal.collection=de.evoal.core.ea \ + --add-exports io.jenetics.base/io.jenetics.internal.util=de.evoal.core.ea \ -m de.evoal.core.main/de.evoal.core.main.Evoal" \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/FitnessDecorator.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/FitnessDecorator.java deleted file mode 100644 index fea17387f53473ba0fe4cc30bb0eaf9dec49fe14..0000000000000000000000000000000000000000 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/FitnessDecorator.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.evoal.core.api.ea.fitness; - -import de.evoal.core.api.cdi.BeanFactory; -import de.evoal.core.api.ea.fitness.FitnessFunction; -import de.evoal.languages.model.instance.Instance; - -public abstract class FitnessDecorator implements FitnessFunction { - protected FitnessFunction decoratedFunction; - - @Override - public FitnessFunction init(final Instance config) { - final Instance decoratedConfig = (Instance) config.findAttribute("function").getValue(); - - decoratedFunction = BeanFactory.create(decoratedConfig.getDefinition().getName(), FitnessFunction.class); - decoratedFunction.init(decoratedConfig); - - return this; - } -} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/FitnessFunction.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/FitnessFunction.java deleted file mode 100644 index fc82aebf1e2962cfaea1c66dd3b3a06f9731ce37..0000000000000000000000000000000000000000 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/FitnessFunction.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.evoal.core.api.ea.fitness; - -import de.evoal.core.api.properties.Properties; -import de.evoal.core.api.properties.PropertiesSpecification; -import de.evoal.languages.model.instance.Instance; - -import java.util.function.Function; - -/** - * A fitness function calculates a list of doubles for a given individual, - * expressing some kind of similarity measures. - */ -public interface FitnessFunction extends Function<Properties, double []> { - public default double [] apply(final Properties properties) { - return evaluate(properties); - } - - public double [] evaluate(final Properties properties); - - FitnessFunction init(final Instance config); -} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/comparator/FitnessComparator.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/comparator/FitnessComparator.java deleted file mode 100644 index ae502fa9608935e260b09111d90eac48299195f2..0000000000000000000000000000000000000000 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/comparator/FitnessComparator.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.evoal.core.api.ea.fitness.comparator; - -import de.evoal.languages.model.instance.Instance; - -import java.util.function.Function; - -/** - * Converts a given set of fitness values (result of {@link de.evoal.core.api.ea.fitness.FitnessFunction} - * into a {@link FitnessValue} for Jenetics. - */ -public interface FitnessComparator extends Function<double [], FitnessValue> { - /** - * Creates a fitness type instance for the given fitness values. - * - * @param fitnessValues The calculated fitness values to convert. - * @return The calculated FitnessType. - */ - public FitnessValue compare(final double [] fitnessValues); - - public default FitnessValue apply(final double [] fitnessValues) { - return compare(fitnessValues); - } - - FitnessComparator init(final Instance config); -} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/comparator/FitnessValue.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/comparator/FitnessValue.java deleted file mode 100644 index 6b0e79e2d536d1c9416eccdfb9a15903cfd7a530..0000000000000000000000000000000000000000 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/comparator/FitnessValue.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.evoal.core.api.ea.fitness.comparator; - -/** - * The fitness value is an abstract type that allows comparing them. - */ -public interface FitnessValue extends Comparable<FitnessValue> { - /** - * @return A list of serializable information for fitness value statistics. - */ - public Object [] toStatistics(); -} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/package-info.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/package-info.java deleted file mode 100644 index 0a81b12d924f5f6638ea7aaea5bc043899b451de..0000000000000000000000000000000000000000 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * API package for fitness calculators. - */ -package de.evoal.core.api.ea.fitness; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/search/OptimisationAlgorithm.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationAlgorithm.java similarity index 85% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/search/OptimisationAlgorithm.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationAlgorithm.java index eb738cc1e5f62063a5cf066eb2068f3505c50ed0..4d3701f6646fde2c07143722b80caf94663350e8 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/search/OptimisationAlgorithm.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationAlgorithm.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.search; +package de.evoal.core.api.optimisation; import de.evoal.languages.model.instance.Instance; @@ -11,7 +11,7 @@ public interface OptimisationAlgorithm { * * @param instance The configuration to use. * - * @return The algrithm itself. + * @return The algorithm itself. */ public OptimisationAlgorithm init(final Instance instance); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationFunction.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..c3407f6d29d86cdc3c2c9afbc3a64c89676de1c6 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationFunction.java @@ -0,0 +1,16 @@ +package de.evoal.core.api.optimisation; + +import de.evoal.core.api.properties.Properties; +import de.evoal.languages.model.instance.Instance; + +import java.util.function.Function; + +public interface OptimisationFunction extends Function<Properties, double []> { + public default double [] apply(final Properties candidate) { + return apply(candidate); + } + + public double [] evaluate(final Properties candidate); + + public OptimisationFunction init(final Instance config); +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationFunctionDecorator.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationFunctionDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..25fa8e466af3d36b8f8615a30a6bb7ccbd4d4f64 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationFunctionDecorator.java @@ -0,0 +1,19 @@ +package de.evoal.core.api.optimisation; + +import de.evoal.core.api.cdi.BeanFactory; +import de.evoal.core.api.optimisation.OptimisationFunction; +import de.evoal.languages.model.instance.Instance; + +public abstract class OptimisationFunctionDecorator implements OptimisationFunction { + protected OptimisationFunction decoratedFunction; + + @Override + public OptimisationFunction init(final Instance config) { + final Instance decoratedConfig = (Instance) config.findAttribute("function").getValue(); + + decoratedFunction = BeanFactory.create(decoratedConfig.getDefinition().getName(), OptimisationFunction.class); + decoratedFunction.init(decoratedConfig); + + return this; + } +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationValue.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationValue.java new file mode 100644 index 0000000000000000000000000000000000000000..3978c729810e47662c0b4583d57aa681f8dbd4f4 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationValue.java @@ -0,0 +1,11 @@ +package de.evoal.core.api.optimisation; + +/** + * The optimisation value is an abstract type that allows comparing them. + */ +public interface OptimisationValue extends Comparable<OptimisationValue> { + /** + * @return A list of serializable information for optimisation value statistics. + */ + public Object [] toStatistics(); +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationValueComparator.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationValueComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..2bd4e34cf63aa56ea7ae328586ea2931f304faaa --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationValueComparator.java @@ -0,0 +1,34 @@ +package de.evoal.core.api.optimisation; + +import de.evoal.languages.model.instance.Instance; + +import java.util.function.Function; + +/** + * Converts a given optimisation value (result of {@link de.evoal.core.api.optimisation.OptimisationFunction}) + * into a {@link OptimisationValue} for comparison. + */ +public interface OptimisationValueComparator extends Function<double [], OptimisationValue> { + + /** + * Applies the comparator to a given set of raw optimisation values. + * + * @param optimisationValues the raw values. + * @return the optimisation value for comparison. + */ + public default OptimisationValue apply(final double [] optimisationValues) { + return toValue(optimisationValues); + } + + /** + * Creates an optimisation value instance for raw fitness values. + * + * @param optimisationValues the raw values. + * @return The calculated optimisation value. + */ + public OptimisationValue toValue(final double [] optimisationValues); + + + + OptimisationValueComparator init(final Instance config); +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java index 55e5ffd65adcf29c94bec6ed61a450dca5a8e099..c4d13c47554cec7514764e023a7dd38308861c2f 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java @@ -1,8 +1,6 @@ package de.evoal.core.api.properties; import de.evoal.languages.model.ddl.DataDescription; -import org.apache.commons.math3.util.Pair; -import org.slf4j.LoggerFactory; import java.util.*; import java.util.stream.Collectors; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Candidate.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Candidate.java new file mode 100644 index 0000000000000000000000000000000000000000..3f8ae958f39b3eb3af6a5496259cca2a9e36de60 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Candidate.java @@ -0,0 +1,30 @@ +package de.evoal.core.api.statistics; + +import de.evoal.core.api.optimisation.OptimisationValue; +import de.evoal.core.api.properties.Properties; + +/** + * A solution candidate for the optimisation problem + */ +public interface Candidate { + /** + * Returns the age of the candidate that is always related to an optimisation + * iteration, c.f., {@link IterationResult}. If there is no age in the + * optimisation algorithm this value defaults to {@code 1}. + * + * @return The age of the candidate For iteration-based approaches. + */ + public default int age() { + return 1; + } + + /** + * @return The candidate's search space representation. + */ + public Properties searchSpaceRepresentation(); + + /** + * @return The optimisation value of the candidate. + */ + public OptimisationValue value(); +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/IterationResult.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/IterationResult.java new file mode 100644 index 0000000000000000000000000000000000000000..b3acbecf912d107cb0bb5b072673ff085698909e --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/IterationResult.java @@ -0,0 +1,30 @@ +package de.evoal.core.api.statistics; + +import java.util.Optional; +import java.util.stream.Stream; + +/** + * Result of a single iteration of an optimisation + */ +public interface IterationResult { + /** + * @return The current iteration number. + */ + public int iteration(); + + /** + * @return Stream of all candidates of the iteration. May be empty. + */ + public Stream<Candidate> candidates(); + + /** + * The number of candidates of this iteration if available. + */ + public Optional<Integer> candidateCount(); + + /** + * @return The best candidate of the iteration. + */ + public Candidate bestCandidate(); + +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Writer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/Writer.java similarity index 92% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Writer.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/Writer.java index 0a1c31895ab74ea4ca0015e9ff4880ce14f1c142..ca52713132811e068311c9ccafd0b4f5b5be11cd 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Writer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/Writer.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.statistics; +package de.evoal.core.api.statistics.io; /** * Base interface for all statistics writer. diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterException.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/WriterException.java similarity index 83% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterException.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/WriterException.java index 62f74d95c03867b8f5e29d9296ed5dd1ec1b639c..12f6a90394a2c67a1ca4b849f7698fb60be3ba0e 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterException.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/WriterException.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.statistics; +package de.evoal.core.api.statistics.io; /** * Exception for signaling errors while writing. diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterStrategy.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/WriterStrategy.java similarity index 86% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterStrategy.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/WriterStrategy.java index 0c6a46270cf99a10a27c71cd7a52d3ce2b2b1897..dbe478e7358e31fb6af5d3887ec251017db51926 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterStrategy.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/io/WriterStrategy.java @@ -1,4 +1,7 @@ -package de.evoal.core.api.statistics; +package de.evoal.core.api.statistics.io; + +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.WriterContext; import javax.inject.Inject; import java.util.List; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/package-info.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/package-info.java index 87bd9222827c21571fdc8c6984face331dc6e4eb..22edd16303b019864815dde9a982036ccb6ca919 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/package-info.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/package-info.java @@ -1,6 +1,6 @@ /** * This package contains all API functionality necessary to implement - * custom {@link de.evoal.core.api.statistics.StatisticsWriter} and to add - * custom {@link de.evoal.core.api.statistics.WriterStrategy}. + * custom {@link de.evoal.core.api.statistics.writer.StatisticsWriter} and to add + * custom {@link de.evoal.core.api.statistics.io.WriterStrategy}. */ package de.evoal.core.api.statistics; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/AbstractCandidateStatisticsWriter.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/AbstractCandidateStatisticsWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..238018e165aa10c9d071829eb981fe1fd0b0fb33 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/AbstractCandidateStatisticsWriter.java @@ -0,0 +1,59 @@ +package de.evoal.core.api.statistics.writer; + +import de.evoal.core.api.statistics.Candidate; +import de.evoal.core.api.statistics.IterationResult; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.io.WriterStrategy; +import de.evoal.languages.model.instance.Instance; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import javax.inject.Inject; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +@Slf4j +public abstract class AbstractCandidateStatisticsWriter implements StatisticsWriter { + + @Inject + protected WriterStrategy strategy; + + private Writer writer; + + @Override + public void add(final IterationResult result) { + final AtomicInteger counter = new AtomicInteger(0); + + result.candidates() + .map(c -> toData(counter.getAndIncrement(), result.iteration(), c)) + .forEach(r -> { + try { + writer.addRecord(r); + } catch (final WriterException e) { + log.warn("Failed to writer statistics record."); + } + }); + } + + @Override + @SneakyThrows(WriterException.class) + public StatisticsWriter init(final Instance configuration) { + writer = createWriter(); + + return this; + } + + protected abstract Writer createWriter() throws WriterException ; + + protected abstract Object [] toData(final int index, final int iteration, final Candidate candidate); + + public void write() { + try { + strategy.close(writer); + } catch (final WriterException e) { + log.error("Failed to write statistics:", e); + } + } +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Column.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/Column.java similarity index 88% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Column.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/Column.java index 8c88921717efc28f8472a009e519173f13ee0b24..8cab93285306f67fc955e7c324e5c8364418bbf9 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Column.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/Column.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.statistics; +package de.evoal.core.api.statistics.writer; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/ColumnType.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/ColumnType.java similarity index 70% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/ColumnType.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/ColumnType.java index f1b8511d2e74aacb3b3946df22b93546add9c081..b726903245d86a17c0ec40b962fc14965c3b46b5 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/ColumnType.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/ColumnType.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.statistics; +package de.evoal.core.api.statistics.writer; /** * Possible column types. diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/StatisticsWriter.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/StatisticsWriter.java similarity index 57% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/StatisticsWriter.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/StatisticsWriter.java index 501057998afce3a4385f4ec42000ef98ebb81d34..40435739d0cf801306fdeab737b0d1e949474bff 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/StatisticsWriter.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/StatisticsWriter.java @@ -1,8 +1,7 @@ -package de.evoal.core.api.statistics; +package de.evoal.core.api.statistics.writer; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.statistics.IterationResult; import de.evoal.languages.model.instance.Instance; -import io.jenetics.engine.EvolutionResult; /** * Evaluation-specific data writer for evaluation results. The information @@ -10,16 +9,16 @@ import io.jenetics.engine.EvolutionResult; * a certain technique under investigation. What all writer have in common * is the table-like structure of data (think of a CSV file). * - * The framework will call {@link #init(Instance)} once before the evolutionary - * algorithm starts. While the EA runs, it will call {@link #add(EvolutionResult)} - * for each generation of individuals. When the EA terminated, the framework calls - * {@link #write()} once to force a serialization of the data. + * The framework will call {@link #init(Instance)} once before the optimisation + * algorithm starts. While the algorithm runs, it will call {@link #add(IterationResult)} + * for each generation step. When the algorithm terminates, the framework calls + * {@link #write()} once to force data serialization. */ public interface StatisticsWriter { /** - * Adds a evaluation result to the statistics. + * Adds an optimisation result to the statistics. */ - public void add(final EvolutionResult<?, FitnessValue> result); + public void add(final IterationResult result); /** * Passes the writer configuration. diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterContext.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/WriterContext.java similarity index 96% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterContext.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/WriterContext.java index 2b417785b384b1d78ff0526eef0a67c3e4241285..0a1edbda968c8fda0fe84c65bf61893169a65f46 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/WriterContext.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/WriterContext.java @@ -1,4 +1,4 @@ -package de.evoal.core.api.statistics; +package de.evoal.core.api.statistics.writer; import javax.enterprise.context.ApplicationScoped; import java.util.*; 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 c7cc28ce4920587c0a2a43d44f7c8438b3d44948..92ead2624fa731ebe7a4bead86ff623b5fd32c7e 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 @@ -16,10 +16,6 @@ import org.apache.deltaspike.core.api.provider.BeanProvider; import org.apache.deltaspike.core.util.metadata.AnnotationInstanceProvider; import org.slf4j.bridge.SLF4JBridgeHandler; -import java.io.IOException; -import java.io.UncheckedIOException; -import java.lang.module.ModuleReader; -import java.lang.module.ResolvedModule; import java.lang.reflect.Field; import java.util.*; @@ -29,25 +25,18 @@ import java.util.*; */ @Slf4j public final class Evoal { + + /** + * Some libraries use Java's unified logging facility. This method installs + * a logging bridge that reroutes all logging from JUL to SLF4J. + */ + private static void installJavaLoggingToSLF4JBridge() { + SLF4JBridgeHandler.removeHandlersForRootLogger(); + SLF4JBridgeHandler.install(); + } + public static void main(final String ... args) { installJavaLoggingToSLF4JBridge(); -/* - final ModuleLayer layer = ModuleLayer.boot(); - ModuleLayer.boot().configuration().modules().stream() - .map(ResolvedModule::reference) - .forEach(mref -> { - - System.out.println(mref.descriptor().name() + " --> " + mref.location().get()); - try (ModuleReader reader = mref.open()) { - reader.list().forEach(f -> System.out.println(" " + f)); - } catch (IOException ioe) { - throw new UncheckedIOException(ioe); - } - }); - - - System.exit(1); -*/ log.info("Starting up EvoAl"); log.info("Booting CDI container"); @@ -86,11 +75,6 @@ public final class Evoal { cdiContainer.shutdown(); } - private static void installJavaLoggingToSLF4JBridge() { - SLF4JBridgeHandler.removeHandlersForRootLogger(); - SLF4JBridgeHandler.install(); - } - private static void printUsage() { System.out.println(); System.out.println(); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/WeightedSumComparator.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/comparator/WeightedSumComparator.java similarity index 65% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/WeightedSumComparator.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/comparator/WeightedSumComparator.java index 90ac991abc22da1fa977d2f3164965117a27be58..4479daefd3f0e3d454fcafa98fb1da46342beaf1 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/WeightedSumComparator.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/comparator/WeightedSumComparator.java @@ -1,28 +1,27 @@ -package de.evoal.core.main.ea.comparator; +package de.evoal.core.main.comparator; -import de.evoal.core.api.ea.fitness.comparator.FitnessComparator; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.optimisation.OptimisationValueComparator; +import de.evoal.core.api.optimisation.OptimisationValue; import de.evoal.languages.model.el.DoubleLiteral; import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Instance; import de.evoal.languages.model.instance.LiteralValue; -import de.evoal.languages.model.instance.Value; import javax.enterprise.context.Dependent; import javax.inject.Named; @Dependent @Named("weighted-sum") -public class WeightedSumComparator implements FitnessComparator { +public class WeightedSumComparator implements OptimisationValueComparator { private double [] weights; @Override - public FitnessValue compare(final double[] fitnessValues) { - return WeightedSumFitnessValue.of(weights, fitnessValues); + public OptimisationValue toValue(final double[] fitnessValues) { + return WeightedSumOptimisationValue.of(weights, fitnessValues); } @Override - public FitnessComparator init(final Instance config) { + public OptimisationValueComparator init(final Instance config) { final Array weights = (Array) config.findAttribute("weights") .getValue(); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/WeightedSumFitnessValue.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/comparator/WeightedSumOptimisationValue.java similarity index 72% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/WeightedSumFitnessValue.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/comparator/WeightedSumOptimisationValue.java index e7f0bb89e9be7aa535fc4640f1c62e597d5502e8..5246a7b72e0bf0987307f6a30e29bb3e59f18413 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/WeightedSumFitnessValue.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/comparator/WeightedSumOptimisationValue.java @@ -1,6 +1,6 @@ -package de.evoal.core.main.ea.comparator; +package de.evoal.core.main.comparator; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.optimisation.OptimisationValue; import de.evoal.core.api.utils.Requirements; import lombok.Getter; import lombok.NonNull; @@ -9,12 +9,12 @@ import java.util.Arrays; import static de.evoal.core.api.utils.Requirements.requireSameSize; -public class WeightedSumFitnessValue implements FitnessValue { +public class WeightedSumOptimisationValue implements OptimisationValue { @Getter private final @NonNull double[] fitnessValues; private final @NonNull double[] normalizedWeights; - private WeightedSumFitnessValue(final @NonNull double[] weights, final @NonNull double[] fitnessValues) { + private WeightedSumOptimisationValue(final @NonNull double[] weights, final @NonNull double[] fitnessValues) { Requirements.requireSameSize(weights, fitnessValues); this.normalizedWeights = new double[weights.length]; @@ -27,13 +27,13 @@ public class WeightedSumFitnessValue implements FitnessValue { } } - public static FitnessValue of(final double [] weights, final double [] fitnessValues) { - return new WeightedSumFitnessValue(weights, fitnessValues); + public static OptimisationValue of(final double [] weights, final double [] fitnessValues) { + return new WeightedSumOptimisationValue(weights, fitnessValues); } @Override - public int compareTo(final FitnessValue other) { - if(!(other instanceof WeightedSumFitnessValue)) { + public int compareTo(final OptimisationValue other) { + if(!(other instanceof WeightedSumOptimisationValue)) { throw new IllegalArgumentException("Only allowed to compare WeightedSumFitnessValue"); } @@ -42,7 +42,7 @@ public class WeightedSumFitnessValue implements FitnessValue { for(int index = 0; index < fitnessValues.length; ++index) { ownFitness = ownFitness + this.normalizedWeights[index] * Math.abs(this.fitnessValues[index]); - otherFitness = otherFitness + this.normalizedWeights[index] * Math.abs(((WeightedSumFitnessValue)other).getFitnessValues()[index]); + otherFitness = otherFitness + this.normalizedWeights[index] * Math.abs(((WeightedSumOptimisationValue)other).getFitnessValues()[index]); } return ownFitness == otherFitness ? 0 : (int)Math.signum(ownFitness - otherFitness); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/ParetoComparator.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/ParetoComparator.java deleted file mode 100644 index 21baf96561ba22f36a0d9204f0454664acbca926..0000000000000000000000000000000000000000 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/ParetoComparator.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.evoal.core.main.ea.comparator; - -import de.evoal.core.api.ea.fitness.comparator.FitnessComparator; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; -import de.evoal.languages.model.instance.Instance; - -import javax.enterprise.context.ApplicationScoped; - -import javax.inject.Named; - -@ApplicationScoped -@Named("pareto") -public class ParetoComparator implements FitnessComparator { - @Override - public FitnessValue compare(final double[] fitnessValues) { - return ParetoFitnessValue.of(fitnessValues); - } - - @Override - public ParetoComparator init(Instance config) { - return this; - } -} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/ConstraintList.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/ConstraintList.java deleted file mode 100644 index 1f3c7c540b9f3f17376f2195303cf4c4b89bf5e9..0000000000000000000000000000000000000000 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/ConstraintList.java +++ /dev/null @@ -1,32 +0,0 @@ -package de.evoal.core.main.jenetics; - -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; -import io.jenetics.Gene; -import io.jenetics.Phenotype; -import io.jenetics.engine.Constraint; - -import java.util.List; - -public class ConstraintList<G extends Gene<?, G>> implements Constraint<G, FitnessValue> { - private final List<Constraint<G, FitnessValue>> constraints; - - public ConstraintList(final List<Constraint<G, FitnessValue>> constraints) { - this.constraints = constraints; - } - - @Override - public boolean test(final Phenotype<G, FitnessValue> individual) { - return constraints.stream().allMatch(c -> c.test(individual)); - } - - @Override - public Phenotype<G, FitnessValue> repair(Phenotype<G, FitnessValue> individual, long generation) { - Phenotype<G, FitnessValue> phenotype = individual; - - for(final Constraint<G, FitnessValue> c : constraints) { - phenotype = c.repair(phenotype, generation); - } - - return phenotype; - } -} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/language/ModuleBuiltinProvider.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/language/ModuleBuiltinProvider.java index bc783c435d23285b0aa99993dc58a4737502bb83..2842415e76dcdf80d628c8dee7789eaa0e216e37 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/language/ModuleBuiltinProvider.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/language/ModuleBuiltinProvider.java @@ -3,14 +3,77 @@ package de.evoal.core.main.language; import de.evoal.languages.model.utils.builtin.BuiltinProvider; import lombok.extern.slf4j.Slf4j; +import java.io.IOException; +import java.lang.module.ModuleReader; +import java.lang.module.ModuleReference; +import java.lang.module.ResolvedModule; import java.net.URI; -import java.util.Collection; -import java.util.Collections; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; +/** + * Builtin provider for Java SE module environment. + */ @Slf4j public class ModuleBuiltinProvider implements BuiltinProvider { + private static Map<String, Collection<URI>> builtinCache = new HashMap<>(); + @Override public Collection<URI> findBuiltins(final String name) { - return Collections.emptyList(); + Collection<URI> result = builtinCache.get(name); + + if(result != null) { + return result; + } + + result = ModuleLayer.boot() + .configuration() + .modules() + .stream() + .map(ResolvedModule::reference) + .flatMap(m -> findBuiltins(m, name)) + .collect(Collectors.toList()); + + log.info("Found {} builtins for {}.", result.size(), name); + result.forEach(u -> log.info(" {}", u)); + builtinCache.put(name, result); + + return result; + } + + private Stream<URI> findBuiltins(final ModuleReference module, final String basename) { + final String completeBase = "META-INF/definitions/" + basename; + + try (ModuleReader reader = module.open()) { + return reader.list() + .filter(f -> f.startsWith(completeBase)) + .filter(f -> f.endsWith(".dl")) + .map(f -> { + try { + log.info("Found builtin {} in {}.", f, module.location().get().getPath()); + final Path modulePath = Paths.get(module.location().get().getPath()); + + if(modulePath.toFile().isDirectory()) { + return modulePath.resolve(f).toUri(); + } else { + final FileSystem zipFS = FileSystems.newFileSystem(modulePath); + final Path fileInZip = zipFS.getPath(f); + + return fileInZip.toUri(); + } + } catch (final Exception e) { + log.error("Unable to create URI for {} in {}.", f, module.location().get(), e); + return null; + } + }) + .filter(Objects::nonNull); + } catch (IOException ioe) { + return Stream.<URI>builder().build(); + } } } 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 ffe4d141c9262387bbfc896d7eaded23e847a5e6..13262c3b3dcf469fa976d5298dec03ad1bae3b40 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 @@ -50,6 +50,19 @@ public class ConfigurationValueProducer { return lookup(board.get(value.entry()), value.access()); } + @Produces + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "") + public final Instance [] injectInstanceArrayValue(final InjectionPoint ip, final Blackboard board) { + final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class); + + final Object [] array = lookup(board.get(value.entry()), value.access()); + final Instance [] copy = new Instance[array.length]; + + System.arraycopy(array, 0, copy, 0, copy.length); + + return copy; + } + @Produces @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "") public final Instance injectInstanceValue(final InjectionPoint ip, final Blackboard board) { @@ -79,6 +92,7 @@ public class ConfigurationValueProducer { } private static <T> T lookup(final OptimisationModel model, final String access) { + log.info("Looking up configuration value {}", access); return LanguageHelper.lookup(model.getInstance(), access); } } 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 faf31bd308b230f574d61b83ae94d6d0669a62f9..c0edffbc3fb45b175d7a03a1ad40b371e88c2757 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 @@ -13,6 +13,7 @@ import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; import javax.enterprise.inject.Produces; import javax.inject.Named; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -21,9 +22,8 @@ public class SpecificationProducer { @Produces @Dependent @Named("genotype-description") - public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array genotype) { - final List<DataDescription> descriptors = genotype.getValues() - .stream() + public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Instance [] genotype) { + final List<DataDescription> descriptors = Arrays.stream(genotype) .map(Instance.class::cast) .map(i -> i.findAttribute("genes")) .map(Attribute::getValue) 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 d5cabac5a5fc18784cf2ba9c5fca9a97ebacdd18..74e944936ba41547802dab76510bb2b1e55f16cf 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,19 +1,17 @@ package de.evoal.core.main.search; 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; +import de.evoal.core.api.cdi.*; +import de.evoal.core.api.optimisation.OptimisationAlgorithm; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesPair; import de.evoal.core.api.board.Blackboard; import javax.enterprise.context.ApplicationScoped; -import de.evoal.core.api.statistics.Column; -import de.evoal.core.api.statistics.ColumnType; -import de.evoal.core.api.statistics.WriterContext; -import de.evoal.core.main.ea.search.EvolutionaryAlgorithmSearch; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; +import de.evoal.core.api.statistics.writer.WriterContext; +import de.evoal.languages.model.instance.Instance; import lombok.extern.slf4j.Slf4j; import org.apache.commons.math3.util.Pair; @@ -65,6 +63,10 @@ public class HeuristicSearchEvaluation implements MainClass { private Column targetColumn; private Column runColumn; + @Inject + @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm") + private Instance algorithmConfiguration; + @Override public void run() { log.info("Running heuristic search evaluation with the following configuration:"); @@ -113,8 +115,9 @@ public class HeuristicSearchEvaluation implements MainClass { board.bind(CoreBlackboardEntries.EVALUATION_RUN, run); context.bindColumn(runColumn, i); - BeanFactory.create(EvolutionaryAlgorithmSearch.class) - .run(); + BeanFactory.create(OptimisationAlgorithm.class) + .init(algorithmConfiguration) + .run(); } } 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 42900dd8b117cc00bb0dcfea40d51179ba1fecff..8f0d469ed193607e472c7dfc21a4f97e458f4d62 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 @@ -9,14 +9,13 @@ import de.evoal.core.api.cdi.MainClass; import de.evoal.core.api.properties.Properties; import javax.enterprise.context.ApplicationScoped; -import de.evoal.core.api.search.OptimisationAlgorithm; -import de.evoal.core.api.statistics.ColumnType; -import de.evoal.core.api.statistics.WriterContext; +import de.evoal.core.api.optimisation.OptimisationAlgorithm; +import de.evoal.core.api.statistics.writer.ColumnType; +import de.evoal.core.api.statistics.writer.WriterContext; import de.evoal.languages.model.instance.Instance; import org.apache.commons.math3.util.Pair; import javax.inject.Inject; -import javax.inject.Named; import java.io.File; import java.util.stream.Stream; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchUtils.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchUtils.java index 4e1abf34f31e785565070087a7a8711cee671e2b..bfe4ac00df1beec4bb4cfd52ed256652a4b08424 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchUtils.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchUtils.java @@ -1,11 +1,9 @@ package de.evoal.core.main.search; -import de.evoal.core.api.statistics.Column; -import de.evoal.core.api.statistics.ColumnType; -import de.evoal.core.api.statistics.WriterContext; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; +import de.evoal.core.api.statistics.writer.WriterContext; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.File; 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 1da6eb6ad378fdb34641c1a6d28654888971e890..dcde046a03d8f2aff4b9978ae933852a01569431 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,12 +1,14 @@ package de.evoal.core.main.statistics; 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.statistics.StatisticsWriter; +import de.evoal.core.api.statistics.writer.StatisticsWriter; import de.evoal.core.api.utils.Requirements; +import de.evoal.core.main.statistics.internal.MultipleStatisticsWriter; import de.evoal.languages.model.instance.Array; import de.evoal.languages.model.instance.Instance; -import de.evoal.core.main.statistics.internal.MultipleStatisticsWriter; + import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; import javax.enterprise.inject.Produces; @@ -28,7 +30,7 @@ public class StatisticsFactory { final StatisticsWriter [] writers = array.getValues() .stream() .map(Instance.class::cast) - .map(i -> new Pair<>(BeanProvider.getContextualReference(i.getDefinition().getName(), false, StatisticsWriter.class), i)) + .map(i -> new Pair<>(BeanFactory.create(i.getDefinition().getName(), StatisticsWriter.class), i)) .map(p -> p.getFirst().init(p.getSecond())) .toArray(i -> new StatisticsWriter[i]); 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 c5c323f6ed21c1a8b46393140c633c548097fed8..2318297ea54a6b9b79699b7971a0ba064b92ea85 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,14 +1,14 @@ package de.evoal.core.main.statistics.fitness; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.statistics.*; -import de.evoal.languages.model.instance.Instance; -import io.jenetics.Phenotype; -import io.jenetics.engine.EvolutionResult; -import io.jenetics.util.ISeq; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.writer.AbstractCandidateStatisticsWriter; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; + import javax.enterprise.context.Dependent; -import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import javax.inject.Inject; @@ -23,26 +23,14 @@ import java.util.List; @Slf4j @Named("fitness-per-individual") @Dependent -public class FitnessStatistics implements StatisticsWriter { +public class FitnessStatistics extends AbstractCandidateStatisticsWriter { @Inject - @Named("optimization-function-output") + @Named("optimisation-function-output") private Provider<PropertiesSpecification> targetSpecification; - @Inject - private WriterStrategy strategy; - - private Writer writer; - @Override - @SneakyThrows(WriterException.class) - public StatisticsWriter init(Instance configuration) { - createWriter(); - - return this; - } - - private void createWriter() throws WriterException { + protected Writer createWriter() throws WriterException { final List<Column> columns = new LinkedList<>(); columns.add(new Column("generation", ColumnType.Integer)); @@ -52,38 +40,20 @@ public class FitnessStatistics implements StatisticsWriter { columns.add(new Column("fitness-value-" + targetSpecification.get().get(i).name(), ColumnType.Double)); } - writer = strategy.create("fitness-by-individual", columns); + return strategy.create("fitness-by-individual", columns); } - private Object[] dataOfPhenotype(final int index, final long generation, Phenotype<?, FitnessValue> phenotype) { + @Override + protected Object[] toData(final int index, final int iteration, final Candidate candidate) { final Object [] data = new Object[2 + targetSpecification.get().size()]; - data[0] = generation; + data[0] = iteration; data[1] = index; - final Object [] fitnessValues = phenotype.fitness().toStatistics(); + final Object [] fitnessValues = candidate.value().toStatistics(); - for(int i = 0; i < fitnessValues.length; ++i) { - data[2 + i] = fitnessValues[i]; - } + System.arraycopy(fitnessValues, 0, data, 2, fitnessValues.length); return data; } - - @SneakyThrows(WriterException.class) - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { - final ISeq<Phenotype<?, FitnessValue>> population = (ISeq<Phenotype<?, FitnessValue>>)(Object)evolutionResult.population(); - - for(int i = 0; i < population.size(); ++i) { - writer.addRecord(dataOfPhenotype(i, evolutionResult.generation(), population.get(i))); - } - } - - public void write() { - try { - strategy.close(writer); - } catch (final WriterException e) { - log.error("Failed to write statistics:", e); - } - } } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/OptimisingStatistics.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/OptimisingStatistics.java new file mode 100644 index 0000000000000000000000000000000000000000..5709cf8d3b5a9af7a490da0e03b4bb659a5da3a0 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/OptimisingStatistics.java @@ -0,0 +1,66 @@ +package de.evoal.core.main.statistics.fitness; + +import de.evoal.core.api.optimisation.OptimisationFunction; +import de.evoal.core.api.properties.Properties; +import de.evoal.core.api.properties.PropertiesSpecification; +import de.evoal.core.api.statistics.*; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.writer.AbstractCandidateStatisticsWriter; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; +import lombok.extern.slf4j.Slf4j; + +import javax.enterprise.context.Dependent; +import javax.inject.Inject; +import javax.inject.Named; +import java.util.LinkedList; +import java.util.List; + +/** + * Small helper class for collecting and writing the generation-based statistics. + */ +@Slf4j +@Named("optimising-per-individual") +@Dependent +public class OptimisingStatistics extends AbstractCandidateStatisticsWriter { + + @Inject + @Named("optimisation-function") + private OptimisationFunction optimisationFunction; + + @Inject + @Named("optimisation-function-output") + private PropertiesSpecification targetSpecification; + + @Override + protected Writer createWriter() throws WriterException { + final List<Column> columns = new LinkedList<>(); + + columns.add(new Column("generation", ColumnType.Integer)); + columns.add(new Column("index", ColumnType.Integer)); + + for(int i = 0; i < targetSpecification.size(); ++i) { + columns.add(new Column("optimisation-value-" + targetSpecification.get(i).name(), ColumnType.Double)); + } + + return strategy.create("optimisation-by-individual", columns); + } + + @Override + protected Object [] toData(final int index, final int iteration, final Candidate candidate) { + final Object [] data = new Object[2 + targetSpecification.size()]; + + data[0] = iteration; + data[1] = index; + + final Properties individual = candidate.searchSpaceRepresentation(); + final double [] raw = optimisationFunction.evaluate(individual); + + for(int i = 0; i < raw.length; ++i) { + data[2 + i] = raw[i]; + } + + return data; + } +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/OptimizingStatistics.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/OptimizingStatistics.java deleted file mode 100644 index f8a1b0b6c6a5aba75d738a1f389355b5f80de02c..0000000000000000000000000000000000000000 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/OptimizingStatistics.java +++ /dev/null @@ -1,104 +0,0 @@ -package de.evoal.core.main.statistics.fitness; - -import de.evoal.core.api.board.BlackboardEntry; -import de.evoal.core.api.cdi.BlackboardValue; -import de.evoal.core.api.ea.codec.CustomCodec; -import de.evoal.core.api.ea.fitness.FitnessFunction; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; -import de.evoal.core.api.properties.Properties; -import de.evoal.core.api.properties.PropertiesSpecification; -import de.evoal.core.api.statistics.*; -import de.evoal.languages.model.instance.Instance; -import io.jenetics.Genotype; -import io.jenetics.Phenotype; -import io.jenetics.engine.EvolutionResult; -import io.jenetics.util.ISeq; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; - -import javax.enterprise.context.Dependent; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Provider; -import java.util.LinkedList; -import java.util.List; - -/** - * Small helper class for collecting and writing the generation-based statistics. - */ -@Slf4j -@Named("optimizing-per-individual") -@Dependent -public class OptimizingStatistics implements StatisticsWriter { - - @Inject - private CustomCodec codec; - - @Inject - @Named("optimization-function") - private FitnessFunction optimization; - - @Inject - @Named("optimization-function-output") - private PropertiesSpecification targetSpecification; - - @Inject - private WriterStrategy strategy; - - private Writer writer; - - @Override - @SneakyThrows(WriterException.class) - public StatisticsWriter init(Instance configuration) { - createWriter(); - - return this; - } - - private void createWriter() throws WriterException { - final List<Column> columns = new LinkedList<>(); - - columns.add(new Column("generation", ColumnType.Integer)); - columns.add(new Column("index", ColumnType.Integer)); - - for(int i = 0; i < targetSpecification.size(); ++i) { - columns.add(new Column("optimization-value-" + targetSpecification.get(i).name(), ColumnType.Double)); - } - - writer = strategy.create("optimization-by-individual", columns); - } - - private Object[] dataOfPhenotype(final int index, final long generation, Phenotype<?, FitnessValue> phenotype) { - final Object [] data = new Object[2 + targetSpecification.size()]; - - data[0] = generation; - data[1] = index; - - final Genotype<?> genotype = phenotype.genotype(); - final Properties individual = (Properties)codec.decode(genotype); - final double [] raw = optimization.evaluate(individual); - - for(int i = 0; i < raw.length; ++i) { - data[2 + i] = raw[i]; - } - - return data; - } - - @SneakyThrows(WriterException.class) - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { - final ISeq<Phenotype<?, FitnessValue>> population = (ISeq<Phenotype<?, FitnessValue>>)(Object)evolutionResult.population(); - - for(int i = 0; i < population.size(); ++i) { - writer.addRecord(dataOfPhenotype(i, evolutionResult.generation(), population.get(i))); - } - } - - public void write() { - try { - strategy.close(writer); - } catch (final WriterException e) { - log.error("Failed to write statistics:", e); - } - } -} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/individuals/IndividualStatistics.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/individuals/IndividualStatistics.java index b8f58b5c641f4a2b45a021c4b632bd84da30b013..c4473223da06b4c0b0768f2f3ba718eb19b03cd5 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/individuals/IndividualStatistics.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/individuals/IndividualStatistics.java @@ -1,26 +1,28 @@ package de.evoal.core.main.statistics.individuals; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.statistics.IterationResult; import de.evoal.core.api.statistics.*; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.io.WriterStrategy; +import de.evoal.core.api.statistics.writer.AbstractCandidateStatisticsWriter; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; +import de.evoal.core.api.statistics.writer.StatisticsWriter; import de.evoal.languages.model.instance.Instance; -import de.evoal.core.api.ea.codec.CustomCodec; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; -import io.jenetics.Genotype; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; -import io.jenetics.Phenotype; -import io.jenetics.engine.EvolutionResult; -import io.jenetics.util.ISeq; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import javax.enterprise.inject.Produces; import javax.inject.Inject; import javax.inject.Named; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; /** * Small helper class for collecting and writing the generation-based statistics. @@ -28,33 +30,13 @@ import java.util.List; @Slf4j @Named("individuals") @Dependent -public class IndividualStatistics implements StatisticsWriter { - /** - * Encoding for converting between ea and domain. - */ - @Inject - private CustomCodec encoding; +public class IndividualStatistics extends AbstractCandidateStatisticsWriter { @Inject @Named("genotype-specification") private PropertiesSpecification sourceSpecification; - @Inject - private WriterStrategy strategy; - - private Writer writer; - - @PostConstruct - @SneakyThrows(WriterException.class) - private void init() { - createWriter(); - } - @Override - public StatisticsWriter init(Instance configuration) { - return this; - } - - private void createWriter() throws WriterException { + protected Writer createWriter() throws WriterException { final List<Column> columns = new ArrayList<>(); columns.add(new Column("generation", ColumnType.Integer)); @@ -65,18 +47,18 @@ public class IndividualStatistics implements StatisticsWriter { columns.add(new Column(sourceSpecification.getProperties().get(i).name(), ColumnType.Double)); } - writer = strategy.create("individuals", columns); + return strategy.create("individuals", columns); } - private Object[] dataOfPhenotype(final int index, final long generation, Phenotype<?, FitnessValue> phenotype) { + @Override + protected Object[] toData(final int index, final int iteration, final Candidate candidate) { final Object [] data = new Object[3 + sourceSpecification.size()]; - final Genotype<?> genotype = phenotype.genotype(); - final Properties individual = (Properties) encoding.decode(genotype); + final Properties individual = candidate.searchSpaceRepresentation(); - data[0] = generation; + data[0] = iteration; data[1] = index; - data[2] = phenotype.age(generation); + data[2] = candidate.age(); for(int i = 0; i < individual.size(); ++i) { data[3 + i] = individual.getValues()[i]; @@ -84,21 +66,4 @@ public class IndividualStatistics implements StatisticsWriter { return data; } - - @SneakyThrows(WriterException.class) - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { - final ISeq<Phenotype<?, FitnessValue>> population = (ISeq<Phenotype<?, FitnessValue>>)(Object)evolutionResult.population(); - - for(int i = 0; i < population.size(); ++i) { - writer.addRecord(dataOfPhenotype(i, evolutionResult.generation(), population.get(i))); - } - } - - public void write() { - try { - strategy.close(writer); - } catch (final WriterException e) { - log.error("Failed to write statistics:", e); - } - } } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/internal/MultipleStatisticsWriter.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/internal/MultipleStatisticsWriter.java index 921a2ad4538268eaaea743abbffa9692dc0d2246..9046da28d7bbf5f863cd3f8aa55b41d5c476eca2 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/internal/MultipleStatisticsWriter.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/internal/MultipleStatisticsWriter.java @@ -1,9 +1,8 @@ package de.evoal.core.main.statistics.internal; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.statistics.IterationResult; import de.evoal.languages.model.instance.Instance; -import de.evoal.core.api.statistics.StatisticsWriter; -import io.jenetics.engine.EvolutionResult; +import de.evoal.core.api.statistics.writer.StatisticsWriter; import java.util.Arrays; @@ -15,8 +14,8 @@ public class MultipleStatisticsWriter implements StatisticsWriter { } @Override - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { - Arrays.stream(writers).forEach(w -> w.add(evolutionResult)); + public void add(final IterationResult result) { + Arrays.stream(writers).forEach(w -> w.add(result)); } @Override 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/io/csv/CsvStrategy.java similarity index 82% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/io/csv/CsvStrategy.java index f2bb050689bf434d60cb452eacdcd5b357b485ac..431192e84a8b74e5757e49b6c20d181da274b8cb 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/io/csv/CsvStrategy.java @@ -1,11 +1,11 @@ -package de.evoal.core.main.statistics.writer.csv; +package de.evoal.core.main.statistics.io.csv; 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; -import de.evoal.core.api.statistics.WriterException; -import de.evoal.core.api.statistics.WriterStrategy; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.io.WriterStrategy; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvWriter.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/io/csv/CsvWriter.java similarity index 89% rename from src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvWriter.java rename to src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/io/csv/CsvWriter.java index e303e5053a1477bfe95c4833afbf7239d9ed3601..73bdaa7313e655633324236568cf4b9a1b062a99 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvWriter.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/io/csv/CsvWriter.java @@ -1,9 +1,9 @@ -package de.evoal.core.main.statistics.writer.csv; +package de.evoal.core.main.statistics.io.csv; -import de.evoal.core.api.statistics.Column; -import de.evoal.core.api.statistics.Writer; -import de.evoal.core.api.statistics.WriterContext; -import de.evoal.core.api.statistics.WriterException; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.writer.WriterContext; +import de.evoal.core.api.statistics.io.WriterException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/nop/NopStatistics.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/nop/NopStatistics.java index 195ae316e57a342ff0b062d271d774ee762d469d..18c1b25433ccc9eaf5ed266df889833960d760f1 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/nop/NopStatistics.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/nop/NopStatistics.java @@ -1,9 +1,8 @@ package de.evoal.core.main.statistics.nop; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; +import de.evoal.core.api.statistics.IterationResult; import de.evoal.languages.model.instance.Instance; -import de.evoal.core.api.statistics.StatisticsWriter; -import io.jenetics.engine.EvolutionResult; +import de.evoal.core.api.statistics.writer.StatisticsWriter; import javax.enterprise.context.Dependent; @@ -13,7 +12,7 @@ import javax.inject.Named; @Dependent public class NopStatistics implements StatisticsWriter { @Override - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { + public void add(final IterationResult evolutionResult) { } @Override diff --git a/src/core/de.evoal.core.main/src/main/java/module-info.java b/src/core/de.evoal.core.main/src/main/java/module-info.java index bd1fbec6ed89fde20a30b1dcc41437c0956db713..b422e6e8827cd3aa7a75e7d975f60039ae2793dd 100644 --- a/src/core/de.evoal.core.main/src/main/java/module-info.java +++ b/src/core/de.evoal.core.main/src/main/java/module-info.java @@ -16,13 +16,7 @@ module de.evoal.core.main { requires jul.to.slf4j; requires ch.qos.logback.classic; - requires io.jenetics.base; - requires io.jenetics.ext; - requires commons.math3; requires commons.csv; - requires smile.math; - - requires decimal4j; requires com.fasterxml.jackson.databind; @@ -41,66 +35,41 @@ module de.evoal.core.main { requires de.evoal.languages.model.instance; requires de.evoal.languages.model.utils; requires com.google.guice; + requires commons.math3; exports de.evoal.core.api.board; exports de.evoal.core.api.cdi; - exports de.evoal.core.api.ea.codec; - exports de.evoal.core.api.ea.constraints.model; - exports de.evoal.core.api.ea.constraints.strategies; - exports de.evoal.core.api.ea.constraints.calculation; - exports de.evoal.core.api.ea.constraints.strategies.fitness; - exports de.evoal.core.api.ea.correlations; - exports de.evoal.core.api.ea.fitness; - exports de.evoal.core.api.ea.fitness.comparator; - exports de.evoal.core.api.ea.initial; exports de.evoal.core.api.properties; exports de.evoal.core.api.properties.info; exports de.evoal.core.api.properties.io; exports de.evoal.core.api.properties.stream; - exports de.evoal.core.api.search; + exports de.evoal.core.api.optimisation; exports de.evoal.core.api.statistics; + exports de.evoal.core.api.statistics.io; + exports de.evoal.core.api.statistics.writer; exports de.evoal.core.api.utils; opens de.evoal.core.api.board to weld.core.impl; opens de.evoal.core.api.cdi to weld.core.impl; - opens de.evoal.core.api.ea to weld.core.impl; - opens de.evoal.core.api.ea.constraints to weld.core.impl; - opens de.evoal.core.api.ea.constraints.model to weld.core.impl; - opens de.evoal.core.api.ea.constraints.strategies.fitness to weld.core.impl; - opens de.evoal.core.api.ea.fitness to weld.core.impl; + opens de.evoal.core.api.optimisation to weld.core.impl; opens de.evoal.core.api.properties to weld.core.impl; + opens de.evoal.core.api.properties.info to weld.core.impl; opens de.evoal.core.api.properties.io to weld.core.impl; opens de.evoal.core.api.properties.stream to weld.core.impl; opens de.evoal.core.api.statistics to weld.core.impl; opens de.evoal.core.api.utils to weld.core.impl; - opens de.evoal.core.main.ea.alterer to weld.core.impl; - opens de.evoal.core.main.ea.alterer.mutator to weld.core.impl; - opens de.evoal.core.main.ea.codec to weld.core.impl; - opens de.evoal.core.main.ea.codec.chromosome to weld.core.impl; - opens de.evoal.core.main.ea.comparator to weld.core.impl; - opens de.evoal.core.main.ea.constraints.deviation to weld.core.impl; - opens de.evoal.core.main.ea.constraints.constraint to weld.core.impl; - opens de.evoal.core.main.ea.constraints.constraint.strategies.calculations to weld.core.impl; - opens de.evoal.core.main.ea.constraints.constraint.strategies.constraint to weld.core.impl; - opens de.evoal.core.main.ea.constraints.constraint.strategies.fitness to weld.core.impl; - opens de.evoal.core.main.ea.constraints.correlation to weld.core.impl; - opens de.evoal.core.main.ea.fitness to weld.core.impl; - opens de.evoal.core.main.ea.initial to weld.core.impl; - opens de.evoal.core.main.ea.producer to weld.core.impl; + opens de.evoal.core.main.comparator to weld.core.impl; opens de.evoal.core.main.producer to weld.core.impl; + opens de.evoal.core.main.properties to weld.core.impl; opens de.evoal.core.main.search to weld.core.impl; opens de.evoal.core.main.statistics to weld.core.impl; opens de.evoal.core.main.statistics.fitness to weld.core.impl; opens de.evoal.core.main.statistics.individuals to weld.core.impl; opens de.evoal.core.main.statistics.nop to weld.core.impl; - opens de.evoal.core.main.statistics.writer.csv to weld.core.impl; - opens de.evoal.core.api.ea.correlations to weld.core.impl; - opens de.evoal.core.api.ea.constraints.calculation to weld.core.impl; - opens de.evoal.core.api.properties.info to weld.core.impl; - opens de.evoal.core.api.ea.constraints.strategies to weld.core.impl; - opens de.evoal.core.main.properties to weld.core.impl; - opens de.evoal.core.main.ea.search to weld.core.impl; + opens de.evoal.core.main.statistics.io.csv to weld.core.impl; + opens de.evoal.core.api.statistics.io to weld.core.impl; + opens de.evoal.core.api.statistics.writer to weld.core.impl; - provides de.evoal.languages.model.utils.builtin.BuiltinProvider with de.evoal.core.main.language.ModuleBuiltinProvider; + //provides de.evoal.languages.model.utils.builtin.BuiltinProvider with ModuleBuiltinProvider; } diff --git a/src/core/de.evoal.core.main/src/main/resources/META-INF/definitions/data/constraints.dl b/src/core/de.evoal.core.main/src/main/resources/META-INF/definitions/data/constraints.dl new file mode 100644 index 0000000000000000000000000000000000000000..1ba8690e74f9ad2ba8fd29a3979296932e3c9ee7 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/resources/META-INF/definitions/data/constraints.dl @@ -0,0 +1,13 @@ +/** + * Sets the variance of some data. + * + * <b>Parameters:</b> + * <ol> + * <li>Reference to the data ...</li> + * </ol> + */ +def void variance(data reference, float variance); + +def void connection(data ref1, data ref2, float connection); + +def void constraint(expression exp, string category); diff --git a/src/core/de.evoal.core.main/src/main/resources/META-INF/definitions/optimisation/core.dl b/src/core/de.evoal.core.main/src/main/resources/META-INF/definitions/optimisation/core.dl index 501c25165a7c0490fb893aabf99ef1018c3edd0b..911896202f48220753f39a88c2e76c6a525f617b 100644 --- a/src/core/de.evoal.core.main/src/main/resources/META-INF/definitions/optimisation/core.dl +++ b/src/core/de.evoal.core.main/src/main/resources/META-INF/definitions/optimisation/core.dl @@ -18,17 +18,18 @@ type configuration { statistics : instance statistics; } -type algorithm { - number_of_generations : int; - size_of_population : int; - maximum_age : int; +abstract type algorithm {} + +type 'evolutionary-algorithm' extends 'algorithm' { + 'number-of-generations' : int; + 'size-of-population' : int; + 'maximum-age' : int; maximize : boolean; - + genotype : array instance chromosome; - initialization : instance random | training; - encoding : instance encoding; - constraint_handling : instance constraint_handling; + initialization : instance 'initial-population'; + handlers : array instance 'handler'; selectors : instance selectors; alterers : instance alterers; @@ -54,10 +55,8 @@ type 'double-chromosome' extends chromosome { type 'integer-chromosome' extends chromosome { } - type gene { content : data; } - abstract type comparator {} type 'weighted-sum' extends comparator { @@ -80,13 +79,15 @@ abstract type 'decorated-fitness-function' extends 'fitness-function' { * Fitness function we are calling during the fitness calculation. */ function : instance 'fitness-function'; - +} + +type 'malus' extends 'decorated-fitness-function' { } /** * Fitness function that calculates the difference between a fitness value and a * target value to optimize to:<br/> - * + * * <mathml> * <math> * <mrow> @@ -137,7 +138,7 @@ abstract type 'goal-function' extends 'fitness-function' { /** * Calculating fitness value by using a surrogate function:<br/> - * + * * <mathml> * <math> * <mrow> @@ -172,7 +173,7 @@ type surrogate extends 'goal-function' { /** * Calculating fitness value by using a known function:<br/> - * + * * <mathml> * <math> * <mrow> @@ -202,63 +203,32 @@ type surrogate extends 'goal-function' { type normal extends 'fitness-function' { } -type adjusted extends 'decorated-fitness-function' { -} - -type 'adjusted-modified' extends 'decorated-fitness-function' { -} +abstract type 'initial-population' {} -type density extends 'decorated-fitness-function' { - exponent : float; - root_exponent : float; - - kind : string; +type 'random-population' extends 'initial-population' { } -type density2 extends 'decorated-fitness-function' { - exponent : float; - root_exponent : float; - - kind : string; -} - -type training { -} - -type random { -} - -abstract type encoding {} - -type double_to_properties extends encoding { - bounded_operations : boolean; -} - -type bit_to_properties extends encoding { - bounded_operations : boolean; -} +abstract type handler {} -type gray_bit_to_properties extends encoding { - bounded_operations : boolean; +type 'constraint-handler' extends handler { + category : string; + calculation : instance normal | 'standard-deviation'; + 'constraint-handling' : instance 'kill-at-birth' | 'malus-for-fitness'; } -type constraint_handling { - unnamed : instance handling; +type 'standard-deviation' { + factor : float; } -type handling { - calculation : instance normal | standard_deviation; - handling : instance kill_at_birth | malus_for_fitness; +type 'kill-at-birth' { + 'repair-strategy' : instance 'repair-strategy'; } -type standard_deviation { - factor : float; -} +abstract type 'repair-strategy' {} -type kill_at_birth { -} +type 'repair-with-random' extends 'repair-strategy' {} -type malus_for_fitness { +type 'malus-for-fitness' { smoothing : float; } @@ -270,37 +240,37 @@ type selectors { abstract type selector { } -type elite_selector extends selector { - count : int; - nonEliteSelector : instance selector; +type 'elite-selector' extends selector { + 'size-factor' : float; + 'non-elite-selector' : instance selector; } -type boltzmann_selector extends selector { +type 'boltzmann-selector' extends selector { beta : float; } -type exponential_rank_selector extends selector { +type 'exponential-rank-selector' extends selector { } -type linear_rank_selector extends selector { +type 'linear-rank-selector' extends selector { nminus : int; } -type monte_carlo_selector extends selector { +type 'monte-carlo-selector' extends selector { } -type probability_selector extends selector { +type 'probability-selector' extends selector { } -type stochastic_universal_selector extends selector { +type 'stochastic-universal-selector' extends selector { } -type tournament_selector extends selector { - size : int; +type 'tournament-selector' extends selector { + 'size-factor' : float; } -type truncation_selector extends selector { - worst_rank : int; +type 'truncation-selector' extends selector { + 'worst-rank' : int; } type alterers { @@ -310,109 +280,101 @@ type alterers { abstract type crossover {} -type mean_alterer extends crossover { +type 'mean-alterer' extends crossover { probability : float; } -type correlation_mean_alterer extends crossover { +type 'correlation-mean-alterer' extends crossover { probability : float; } -type partial_matched_alterer extends crossover { +type 'partial-matched-alterer' extends crossover { probability : float; } -type correlation_partial_matched_alterer extends crossover { +type 'correlation-partial-matched-alterer' extends crossover { probability : float; } -type line_crossover extends crossover { +type 'line-crossover' extends crossover { probability : float; position : float; } -type correlation_line_crossover extends crossover { +type 'correlation-line-crossover' extends crossover { probability : float; position : float; } -type multi_point_crossover extends crossover { +type 'multi-point-crossover' extends crossover { probability : float; count : int; } -type correlation_multi_point_crossover extends crossover { +type 'correlation-multi-point-crossover' extends crossover { probability : float; count : int; } -type single_point_crossover extends crossover { +type 'single-point-crossover' extends crossover { probability : float; } -type correlation_single_point_crossover extends crossover { +type 'correlation-single-point-crossover' extends crossover { probability : float; } -type uniform_crossover extends crossover { - crossover_probability : float; - swap_probability : float; +type 'uniform-crossover' extends crossover { + 'crossover-probability' : float; + 'swap-probability' : float; } -type correlation_uniform_crossover extends crossover { - crossover_probability : float; - swap_probability : float; +type 'correlation-uniform-crossover' extends crossover { + 'crossover-probability' : float; + 'swap-probability' : float; } abstract type mutator { } -type gaussian_mutator extends mutator { +type 'gaussian-mutator' extends mutator { probability : float; } -type correlation_gaussian_mutator { +type 'correlation-gaussian-mutator' extends mutator { probability : float; threshold : float; -} +} -type swap_mutator extends mutator { +type 'swap-mutator' extends mutator { probability : float; } -type correlation_swap_mutator extends mutator { +type 'correlation-swap-mutator' extends mutator { probability : float; threshold : float; } -type bit_flip_mutator extends mutator { +type 'bit-flip-mutator' extends mutator { probability : float; -} +} -type correlation_bit_flip_mutator extends mutator { +type 'correlation-bit-flip-mutator' extends mutator { probability : float; threshold : float; -} - -type statistics { - writer : array instance statistics_writer; } -abstract type statistics_writer { +type statistics { + writer : array instance 'statistics-writer'; } -/** - * Not functional at the moment. - */ -type approximative extends statistics_writer { - fitness : array instance 'fitness-function'; - +abstract type 'statistics-writer' { } /** * Creates a file named '<tt>constraint-statistics.csv</tt>' containing * information on each generation and constraint violations: - * + * * <ul> * <li>generation</li> * <li>for each constraint: @@ -426,37 +388,24 @@ type approximative extends statistics_writer { * </li> * </ul> */ -type constraint_statistics extends statistics_writer {} - -/** - * Creates a file named '<tt>best-individual-statistics.csv</tt>' containing the - * following information for the individual with the best fitness result: - * - * <ul> - * <li>generation</li> - * <li>individual string</li> - * <li>age of individual</li> - * <li>???</li> - * </ul> - */ -type correlated extends statistics_writer {} +type 'constraint-statistics' extends 'statistics-writer' {} /** * Creates a file named '<tt>fitness-by-individual.csv</tt>' containing for each individual * of each generation the following information: - * + * * <ul> * <li>generation</li> * <li>index of individual</li> * <li>fitness value of each predicted value of the individual</li> * </ul> */ -type fitness_per_individual extends statistics_writer {} +type 'fitness-per-individual' extends 'statistics-writer' {} /** * Creates a file named '<tt>individuals.csv</tt>' containing for each individual * the following information: - * + * * <ul> * <li>generation</li> * <li>index of individual</li> @@ -465,27 +414,21 @@ type fitness_per_individual extends statistics_writer {} * <li>each property value of the individual</li> * </ul> */ -type individuals extends statistics_writer {} +type individuals extends 'statistics-writer' {} /** * Does not write any statistics. Can be used to disable statistics output. */ -type none extends statistics_writer {} +type none extends 'statistics-writer' {} /** * Creates a file named '<tt>prediction-by-individual.csv</tt>' containing the * predicted value(s) of each individual for each generation of the EA run: - * + * * <ul> * <li>generation</li> * <li>index of individual</li> * <li>each predicted value of the individual</li> * </ul> */ -type prediction_per_individual extends statistics_writer {} - -/** - * Creates a file named '<tt'>hypercube-correlation-distances.csv</tt>' with - * some weird hypercube info. - */ -type range_correlated extends statistics_writer {} \ No newline at end of file +type 'prediction-per-individual' extends 'statistics-writer' {} diff --git a/src/core/de.evoal.core.main/src/test/java/de/evoal/core/api/utils/LanguageHelperRegressionTest.java b/src/core/de.evoal.core.main/src/test/java/de/evoal/core/api/utils/LanguageHelperRegressionTest.java new file mode 100644 index 0000000000000000000000000000000000000000..85c45e0e93abc333cbfc6eff506deb327eaefc9d --- /dev/null +++ b/src/core/de.evoal.core.main/src/test/java/de/evoal/core/api/utils/LanguageHelperRegressionTest.java @@ -0,0 +1,102 @@ +package de.evoal.core.api.utils; + +import de.evoal.core.junit.dsl.LanguageHelper; +import de.evoal.languages.model.dl.*; +import de.evoal.languages.model.el.DoubleLiteral; +import de.evoal.languages.model.generator.Configuration; +import de.evoal.languages.model.generator.Step; +import de.evoal.languages.model.instance.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Optional; + +public class LanguageHelperRegressionTest { + private void assertAttributeTypeOfA(final AttributeDefinition attribute) { + Assertions.assertNotNull(attribute); + Assertions.assertEquals("a", attribute.getName()); + Assertions.assertTrue(attribute.getType() instanceof ArrayType); + final ArrayType typeA = (ArrayType) attribute.getType(); + Assertions.assertEquals(1, typeA.getElements().size()); + Assertions.assertTrue(typeA.getElements().get(0) instanceof FloatType); + } + + private void assertAttributeTypeOfC(final AttributeDefinition attribute) { + Assertions.assertNotNull(attribute); + Assertions.assertTrue(attribute.getType() instanceof ArrayType); + final ArrayType typeC = (ArrayType) attribute.getType(); + Assertions.assertEquals(1, typeC.getElements().size()); + Assertions.assertTrue(typeC.getElements().get(0) instanceof ArrayType); + final ArrayType typetypeC = (ArrayType) typeC.getElements().get(0); + Assertions.assertEquals(1, typetypeC.getElements().size()); + Assertions.assertTrue(typetypeC.getElements().get(0) instanceof FloatType); + } + + private void assertAttributeTypeOfM(final AttributeDefinition attribute) { + Assertions.assertNotNull(attribute); + Assertions.assertTrue(attribute.getType() instanceof FloatType); + } + + @Test + public void testDefinitionLanguageParser() { + final DefinitionModel model = LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/regressions/generator.dl"); + + Assertions.assertNotNull(model); + Assertions.assertNotNull(model.getTypes()); + Assertions.assertEquals(1, model.getTypes().size()); + + final TypeDefinition type = model.getTypes().get(0); + Assertions.assertEquals("shekel", type.getName()); + Assertions.assertNull(type.getSuperType()); + Assertions.assertEquals(3, type.getAttributes().size()); + + final Optional<AttributeDefinition> attributeA = type.getAttributes().stream().map(AttributeDefinition.class::cast).filter(a -> "a".equals(a.getName())).findFirst(); + final Optional<AttributeDefinition> attributeC = type.getAttributes().stream().map(AttributeDefinition.class::cast).filter(a -> "c".equals(a.getName())).findFirst(); + final Optional<AttributeDefinition> attributeM = type.getAttributes().stream().map(AttributeDefinition.class::cast).filter(a -> "m".equals(a.getName())).findFirst(); + + assertAttributeTypeOfA(attributeA.get()); + assertAttributeTypeOfC(attributeC.get()); + assertAttributeTypeOfM(attributeM.get()); + } + + @Test + public void testLoading() { + final Configuration configuration = LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/regressions/shekel.generator"); + + // fetch step configuration for testee + final Step step = configuration.getPipelines().get(0).getSteps().get(0); + + Assertions.assertNotNull(step); + Assertions.assertNotNull(step.getInstance()); + Assertions.assertEquals(3, step.getInstance().getAttributes().size()); + + final Attribute attributeA = step.getInstance().findAttribute("a"); + final Attribute attributeC = step.getInstance().findAttribute("c"); + final Attribute attributeM = step.getInstance().findAttribute("m"); + + assertAttributeTypeOfA(attributeA.getDefinition()); + assertAttributeTypeOfC(attributeC.getDefinition()); + assertAttributeTypeOfM(attributeM.getDefinition()); + + { + Assertions.assertTrue(attributeA.getValue() instanceof Array); + final Array array = (Array)attributeA.getValue(); + Assertions.assertEquals(10, array.getValues().size()); + Assertions.assertTrue(array.getValues().get(0) instanceof LiteralValue); + final LiteralValue literal = (LiteralValue) array.getValues().get(0); + Assertions.assertTrue(literal.getLiteral() instanceof DoubleLiteral); + Assertions.assertEquals(1.0, literal.getLiteral().getValue()); + } + + { + Assertions.assertTrue(attributeC.getValue() instanceof Array); + final Array array = (Array)attributeC.getValue(); + Assertions.assertEquals(4, array.getValues().size()); + Assertions.assertTrue(array.getValues().get(0) instanceof Array); + final Array array2 = (Array) array.getValues().get(0); + Assertions.assertEquals(10, array2.getValues().size()); + } + + } + +} diff --git a/src/core/de.evoal.core.main/src/test/java/de/evoal/core/api/utils/LanguageHelperUnitTest.java b/src/core/de.evoal.core.main/src/test/java/de/evoal/core/api/utils/LanguageHelperUnitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..896d04525ac8b69de13611fdc0bcf9002530b165 --- /dev/null +++ b/src/core/de.evoal.core.main/src/test/java/de/evoal/core/api/utils/LanguageHelperUnitTest.java @@ -0,0 +1,182 @@ +package de.evoal.core.api.utils; + +import de.evoal.languages.model.instance.Instance; +import de.evoal.languages.model.ol.OptimisationModel; +import org.junit.jupiter.api.*; + +import static de.evoal.core.api.utils.LanguageHelper.*; + +public class LanguageHelperUnitTest { + @Order(1) + @Test + public void testLoading() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + Assertions.assertNotNull(instance); + } + + @Test + public void testLookupForNullInstance() { + Assertions.assertThrows(IllegalStateException.class, () -> lookup(null, "child")); + } + + @Test + public void testLookupForNullPath() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + Assertions.assertThrows(IllegalArgumentException.class, () -> lookup(instance, null)); + } + + @Test + public void testLookupForEmptyPath() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, ""); + + Assertions.assertNotNull(result); + Assertions.assertTrue(instance == result); + } + + @Test + public void testLookupForExistingChild() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, "child"); + + Assertions.assertNotNull(result); + Assertions.assertTrue(result instanceof Instance); + + final Instance child = (Instance)result; + Assertions.assertEquals("A", child.getDefinition().getName()); + } + + @Test + public void testLookupName() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, "name"); + + Assertions.assertNotNull(result); + Assertions.assertEquals("parent", result); + } + + @Test + public void testLookupChildOfLiteral() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + Assertions.assertThrows(IllegalStateException.class, () -> lookup(instance, "child.string-field.non-existing")); + } + + @Test + public void testLookupNonExistingChild() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + Assertions.assertThrows(IllegalStateException.class, () -> lookup(instance, "child.non-existing")); + } + + @Test + public void testLookupBooleanField() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, "child.boolean-field"); + + Assertions.assertNotNull(result); + Assertions.assertTrue(result instanceof Boolean); + Assertions.assertEquals(true, result); + } + + @Test + public void testLookupFlotField() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, "child.float-field"); + + Assertions.assertNotNull(result); + Assertions.assertTrue(result instanceof Double); + Assertions.assertEquals(1.3, result); + } + + @Test + public void testLookupIntegerField() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, "child.integer-field"); + + Assertions.assertNotNull(result); + Assertions.assertTrue(result instanceof Integer); + Assertions.assertEquals(4, result); + } + + @Test + public void testLookupStringField() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, "child.string-field"); + + Assertions.assertNotNull(result); + Assertions.assertTrue(result instanceof String); + Assertions.assertEquals("FOOBAR", result); + } + + @Test + public void testLookup1DArrayField() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, "child.array-1D-float"); + + Assertions.assertNotNull(result); + Assertions.assertTrue(result instanceof Object []); + + final Object [] array = (Object[]) result; + Assertions.assertEquals(3, array.length); + Assertions.assertEquals(4.2, array[0]); + Assertions.assertEquals(3.1, array[1]); + Assertions.assertEquals(1.0, array[2]); + } + + @Test + public void testLookup2DArrayField() { + final OptimisationModel model = de.evoal.core.junit.dsl.LanguageHelper.loadFromClasspath("de/evoal/core/api/utils/LanguageHelperTest.ol"); + final Instance instance = model.getInstance(); + + final Object result = lookup(instance, "child.array-2D-int"); + + Assertions.assertNotNull(result); + Assertions.assertTrue(result instanceof Object []); + + final Object [] array = (Object[]) result; + Assertions.assertEquals(3, array.length); + + final Object [] array0 = (Object[]) array[0]; + final Object [] array1 = (Object[]) array[1]; + final Object [] array2 = (Object[]) array[2]; + + Assertions.assertEquals(5, array0.length); + Assertions.assertEquals(3, array1.length); + Assertions.assertEquals(1, array2.length); + + Assertions.assertEquals(1, array0[0]); + Assertions.assertEquals(2, array0[1]); + Assertions.assertEquals(3, array0[2]); + Assertions.assertEquals(4, array0[3]); + Assertions.assertEquals(5, array0[4]); + + Assertions.assertEquals(3, array1[0]); + Assertions.assertEquals(2, array1[1]); + Assertions.assertEquals(1, array1[2]); + + Assertions.assertEquals(42, array2[0]); + } +} diff --git a/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/generator.dl b/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/generator.dl new file mode 100644 index 0000000000000000000000000000000000000000..84b046e8f5db1071b6a220fd41d550b9fa7438f4 --- /dev/null +++ b/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/generator.dl @@ -0,0 +1,25 @@ +/** + * Shekel's foxholes. + * + * https://www.sfu.ca/~ssurjano/shekel.html + */ +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; + + /** + * The recommended value for the constant c is { + * {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}, + * {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; + + /** + * The recommended value for the constant m is 10. + */ + 'm' : float; +} diff --git a/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/shekel.generator b/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/shekel.generator new file mode 100644 index 0000000000000000000000000000000000000000..7486510a4391b0837bc10ad685c2e5bcf8b06b53 --- /dev/null +++ b/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/shekel.generator @@ -0,0 +1,20 @@ +use "generator.dl"; +use "test.ddl"; + +pipeline example [ + step { + component 'shekel' { + 'a' := [1.0,2.0,2.0,4.0,4.0,6.0,3.0,7.0,5.0,5.0]; + 'c' := [ + [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], + [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] + ]; + 'm' := 10.0; + } + + reads [data 'x:0']; + writes [data 'x:1']; + } +] diff --git a/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/test.ddl b/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/test.ddl new file mode 100644 index 0000000000000000000000000000000000000000..0a100d6397a8fdf5ddd81abe08ae60078ff8f7aa --- /dev/null +++ b/src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/test.ddl @@ -0,0 +1,3 @@ +data: + quotient real data 'x:0'; + quotient real data 'x:1'; \ No newline at end of file diff --git a/src/core/de.evoal.generator.main/pom.xml b/src/core/de.evoal.generator.main/pom.xml index 3da6302a8f7d06a42081708b032483e5081fa90d..50a1d2f5ddc31252bf67979dd1cd8b6e51d63bed 100644 --- a/src/core/de.evoal.generator.main/pom.xml +++ b/src/core/de.evoal.generator.main/pom.xml @@ -7,6 +7,7 @@ <groupId>de.evoal</groupId> <artifactId>core.plugin</artifactId> <version>0.9.0-SNAPSHOT</version> + <relativePath>../de.evoal.core.plugin</relativePath> </parent> <artifactId>generator.main</artifactId> diff --git a/src/core/de.evoal.generator.main/src/main/resources/META-INF/specifications/generator/main.dl b/src/core/de.evoal.generator.main/src/main/resources/META-INF/definitions/generator/main.dl similarity index 95% rename from src/core/de.evoal.generator.main/src/main/resources/META-INF/specifications/generator/main.dl rename to src/core/de.evoal.generator.main/src/main/resources/META-INF/definitions/generator/main.dl index b6d41817d14b645f36e7d0589f2b30077d8f0045..bd4485c14e5d73d400bacb3a3bd7a488b414c6b7 100644 --- a/src/core/de.evoal.generator.main/src/main/resources/META-INF/specifications/generator/main.dl +++ b/src/core/de.evoal.generator.main/src/main/resources/META-INF/definitions/generator/main.dl @@ -1,6 +1,6 @@ /** - * In mathematical optimization, the Ackley function is a non-convex function - * used as a performance test problem for optimization algorithms. It was proposed + * In mathematical optimisation, the Ackley function is a non-convex function + * used as a performance test problem for optimisation algorithms. It was proposed * by David Ackley in his 1987 PhD dissertation. ... <a href="https://en.wikipedia.org/wiki/Ackley_function">Wikipedia</a>. * * <math display="block"> @@ -121,8 +121,8 @@ type ackley { } /** - * In mathematical optimization, the Rastrigin function is a non-convex function - * used as a performance test problem for optimization algorithms. ... <a href="https://en.wikipedia.org/wiki/Rastrigin_function">Wikipedia</a> + * In mathematical optimisation, the Rastrigin function is a non-convex function + * used as a performance test problem for optimisation algorithms. ... <a href="https://en.wikipedia.org/wiki/Rastrigin_function">Wikipedia</a> * * <math display="block"> * <mrow> diff --git a/src/core/de.evoal.releng.parent/pom.xml b/src/core/de.evoal.releng.parent/pom.xml index ccedc18fbeb757e830cf13136a549e507dd7a5cc..623d5c0de57c2c670f664691db0b81b9ca9a2528 100644 --- a/src/core/de.evoal.releng.parent/pom.xml +++ b/src/core/de.evoal.releng.parent/pom.xml @@ -29,6 +29,7 @@ <module>../de.evoal.core.main</module> <module>../de.evoal.core.plugin</module> + <module>../de.evoal.core.ea</module> <module>../de.evoal.core.arff</module> <module>../de.evoal.core.junit</module> @@ -266,6 +267,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> + <version>3.2.1</version> <executions> <execution> <id>attach-sources</id> diff --git a/src/core/de.evoal.surrogate.api/pom.xml b/src/core/de.evoal.surrogate.api/pom.xml index 7dcf280c5d184aac9ad5522b50f0b1b2559efba7..878b15814ed58062b3b6ec1b275b27ba1e89ab71 100644 --- a/src/core/de.evoal.surrogate.api/pom.xml +++ b/src/core/de.evoal.surrogate.api/pom.xml @@ -7,8 +7,24 @@ <groupId>de.evoal</groupId> <artifactId>core.plugin</artifactId> <version>0.9.0-SNAPSHOT</version> + <relativePath>../de.evoal.core.plugin</relativePath> </parent> <artifactId>surrogate.api</artifactId> <name>EvoAl - Surrogate - API</name> + + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>core.ea</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>de.evoal</groupId> + <artifactId>core.ea</artifactId> + <version>0.9.0-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + </dependencies> </project> diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/function/SurrogateFunction.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/function/SurrogateFunction.java index 6f43da8756dd92bb9a6dbe1fe4203a069f16c984..f5bbbd55f71cacca8a6d04e581dc4df49397cf12 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/function/SurrogateFunction.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/function/SurrogateFunction.java @@ -9,7 +9,7 @@ import lombok.NonNull; import java.util.List; /** - * A surrogate function replaces the actual function used in the optimization + * A surrogate function replaces the actual function used in the optimisation * if the actual function is too expensive to calculate or even unknown. A * surrogate function transforms input properties into output properties * according to a known oder learned function. diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/SurrogateFitnessFunction.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/SurrogateFitnessFunction.java index 84f3c0837a45b4010d31ec64b11e2105db713339..f820ef8286feb52a9560989749dc352f35bc5529 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/SurrogateFitnessFunction.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/SurrogateFitnessFunction.java @@ -1,8 +1,7 @@ package de.evoal.surrogate.main.ea; -import de.evoal.core.api.ea.fitness.FitnessFunction; +import de.evoal.core.api.optimisation.OptimisationFunction; import de.evoal.core.api.properties.Properties; -import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.languages.model.instance.Instance; import de.evoal.surrogate.api.function.SurrogateFunction; @@ -12,7 +11,7 @@ import javax.inject.Named; @Dependent @Named("surrogate") -public class SurrogateFitnessFunction implements FitnessFunction { +public class SurrogateFitnessFunction implements OptimisationFunction { @Inject private SurrogateFunction function; @@ -23,7 +22,7 @@ public class SurrogateFitnessFunction implements FitnessFunction { } @Override - public FitnessFunction init(final Instance config) { + public OptimisationFunction init(final Instance config) { return this; } } 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 2064686ef965c31936a26c96f34d0bf40fa3dd0c..4e44046daf9f9a70fca8cfcd5e80f224106e5155 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 @@ -3,12 +3,12 @@ package de.evoal.surrogate.main.ea; import de.evoal.core.api.board.Blackboard; 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; import de.evoal.core.api.properties.Properties; 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.core.ea.api.codec.CustomCodec; +import de.evoal.core.ea.api.initial.InitialPopulation; import de.evoal.languages.model.instance.Instance; import de.evoal.surrogate.api.SurrogateBlackboardEntries; import io.jenetics.Gene; 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 cbbbdef6c4999e582cfb8cdc609fc90ca91116e0..a0f03db9db57453055483ba5bc9245e7cef373c4 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 @@ -3,9 +3,9 @@ package de.evoal.surrogate.main.ea; 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; +import de.evoal.core.ea.api.constraints.strategies.RepairStrategy; +import de.evoal.core.ea.api.initial.InitialPopulation; import de.evoal.languages.model.instance.Instance; -import de.evoal.core.api.ea.constraints.strategies.RepairStrategy; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; @@ -21,7 +21,7 @@ public class TrainingProducer { @Produces @Dependent @Named("training") - public InitialPopulation create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) { + public InitialPopulation create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialisation") 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 545eab0a60366f380a9f1f7014ad4eaec4678d48..b2f005aa5a3f6c439ba45e1f3d226a9e673a7550 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 @@ -1,12 +1,12 @@ package de.evoal.surrogate.main.ea; import de.evoal.core.api.board.Blackboard; -import de.evoal.core.api.ea.codec.CustomCodec; -import de.evoal.core.api.ea.constraints.strategies.RepairStrategy; import de.evoal.core.api.properties.Properties; 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.core.ea.api.codec.CustomCodec; +import de.evoal.core.ea.api.constraints.strategies.RepairStrategy; import de.evoal.languages.model.instance.Instance; import de.evoal.surrogate.api.SurrogateBlackboardEntries; import io.jenetics.Gene; diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/gof/rmse/RMSECalculator.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/gof/rmse/RMSECalculator.java index 420d60636fbaefbd8cfe0ac656c745639af72411..d99fe097e0eebcbe0574819bcc1805a4142d66d4 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/gof/rmse/RMSECalculator.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/gof/rmse/RMSECalculator.java @@ -41,7 +41,7 @@ public class RMSECalculator implements SurrogateInformationCalculator { private SurrogateFunction function; /** - * Supplier for the trainings data. + * Supplier for the training data. */ private PropertiesStreamSupplier trainingData; diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/gof/rmse/RRSECalculator.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/gof/rmse/RRSECalculator.java index 9df7d648a780083e74121413d9bf98c8eddadeb7..aba0ded2139f6aea61a365479d2d416a873a8d09 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/gof/rmse/RRSECalculator.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/gof/rmse/RRSECalculator.java @@ -35,7 +35,7 @@ public class RRSECalculator implements SurrogateInformationCalculator { private SurrogateFunction function; /** - * Supplier for the trainings data. + * Supplier for the training data. */ private PropertiesStreamSupplier trainingData; @@ -58,7 +58,6 @@ public class RRSECalculator implements SurrogateInformationCalculator { final Properties actual = function.apply(source); for(int i = 0; i < expected.size(); ++i) { - System.err.println(" " + expected.getAsDouble(i) + " -- " + actual.getAsDouble(i)); data.get(i).add(Math.pow((expected.getAsDouble(i) - actual.getAsDouble(i)) / expected.getAsDouble(i), 2.0)); } }); diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/constraint/ConstraintStatistics.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/constraint/ConstraintStatistics.java index cc8621a000613311e7ca94f06f951c8973e04a9e..e0d7afff7d6cce87d43344ee647c0c936dd8de34 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/constraint/ConstraintStatistics.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/constraint/ConstraintStatistics.java @@ -1,18 +1,18 @@ package de.evoal.surrogate.main.statistics.constraint; -import de.evoal.core.api.ea.constraints.calculation.CalculationFactory; -import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; import de.evoal.core.api.statistics.*; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.io.WriterStrategy; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; +import de.evoal.core.api.statistics.writer.StatisticsWriter; +import de.evoal.core.ea.api.constraints.calculation.CalculationFactory; +import de.evoal.core.ea.api.constraints.calculation.CalculationStrategy; +import de.evoal.core.ea.api.constraints.model.ConstraintResult; +import de.evoal.core.ea.api.constraints.model.Constraints; +import de.evoal.core.ea.api.constraints.strategies.CalculationResult; import de.evoal.languages.model.instance.Instance; -import de.evoal.core.api.ea.codec.CustomCodec; -import de.evoal.core.api.ea.constraints.model.ConstraintResult; -import de.evoal.core.api.ea.constraints.model.Constraints; -import de.evoal.core.api.ea.constraints.strategies.CalculationResult; -import de.evoal.core.api.properties.Properties; -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; @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.DoubleSummaryStatistics; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Small helper class for collecting and writing the generation-based statistics. @@ -42,15 +43,8 @@ public class ConstraintStatistics implements StatisticsWriter { @Inject private Constraints constraints; - @Inject - private CustomCodec codec; - private CalculationStrategy[] calculators; - private long endTime; - - private long startTime; - @Inject private WriterStrategy strategy; @@ -58,8 +52,6 @@ public class ConstraintStatistics implements StatisticsWriter { @PostConstruct @SneakyThrows(WriterException.class) private void init() { - startTime = System.currentTimeMillis(); - createColumns(); writer = strategy.create("constraint-statistics", columns); @@ -82,7 +74,7 @@ public class ConstraintStatistics implements StatisticsWriter { } } - private Object[] toData(final long generation, final ISeq<Phenotype<?, FitnessValue>> population) { + private Object[] toData(final int generation, final Stream<Candidate> candidates) { final Object [] data = new Object[1 + constraints.getConstraints().size() * NUMBER_OF_STATISTICS_PER_CONSTRAINT]; data[0] = generation; @@ -91,10 +83,9 @@ public class ConstraintStatistics implements StatisticsWriter { final CalculationStrategy strategy = calculators[index]; final List<CalculationResult> calculationResults = - population.stream() - .map(Phenotype::genotype) - .map(g -> (Properties)codec.decode(g)) - // TODO .map(strategy::calculate) + candidates + .map(Candidate::searchSpaceRepresentation) +// TODO .map(strategy::calculate) .map(CalculationResult.class::cast) .collect(Collectors.toList()); @@ -121,11 +112,14 @@ public class ConstraintStatistics implements StatisticsWriter { return data; } - @SneakyThrows(WriterException.class) - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { - final ISeq<Phenotype<?, FitnessValue>> population = (ISeq<Phenotype<?, FitnessValue>>)(Object)evolutionResult.population(); - - writer.addRecord(toData(evolutionResult.generation(), population)); + @Override + public void add(final IterationResult result) { + try { + final Object [] data = toData(result.iteration(), result.candidates()); + writer.addRecord(data); + } catch (final WriterException e) { + log.error("Failed to add record.", e); + } } @Override @@ -133,8 +127,8 @@ public class ConstraintStatistics implements StatisticsWriter { return this; } + @Override public void write() { - endTime = System.currentTimeMillis(); try { strategy.close(writer); } catch (final WriterException e) { 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 c141bda6165947df9c5c69ad9a1c545eec1ca745..f5ab9a93086481fa0efea14d990e262f63e1d571 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 @@ -2,17 +2,19 @@ package de.evoal.surrogate.main.statistics.correlated; import de.evoal.core.api.board.CoreBlackboardEntries; import de.evoal.core.api.cdi.ConfigurationValue; +import de.evoal.core.api.optimisation.OptimisationValue; import de.evoal.core.api.statistics.*; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.io.WriterStrategy; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; +import de.evoal.core.api.statistics.writer.StatisticsWriter; import de.evoal.core.api.utils.LanguageHelper; import de.evoal.languages.model.instance.Instance; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; -import de.evoal.core.api.ea.codec.CustomCodec; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.surrogate.api.training.TrainingDataManager; -import io.jenetics.Genotype; -import io.jenetics.engine.EvolutionResult; -import io.jenetics.util.ISeq; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import lombok.extern.slf4j.Slf4j; @@ -25,6 +27,7 @@ import javax.inject.Provider; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; @@ -46,15 +49,10 @@ public class GenerationStatisticsWriter implements StatisticsWriter { // TODO @Inject @Named("function-names") private List<String> functionNames; - /** - * Encoding for converting between ea and domain. - */ - @Inject - private CustomCodec encoding; private long startTime; - private EvolutionResult<?, FitnessValue> generationWithBestIndividual; + private IterationResult generationWithBestIndividual; private long endTime; @Inject @@ -169,16 +167,17 @@ public class GenerationStatisticsWriter implements StatisticsWriter { } private Matrix createBestGenerationMatrix() { - final ISeq<Genotype<?>> genotypes = (ISeq<Genotype<?>>)(Object)generationWithBestIndividual.genotypes(); + final List<Candidate> candidates = generationWithBestIndividual.candidates().collect(Collectors.toList()); final int dimensions = sourceSpec.size(); - final int size = genotypes.size(); + final Optional<Integer> optSize = generationWithBestIndividual.candidateCount(); + final int size = optSize.orElse(candidates.size()); final Matrix result = new Matrix(dimensions, size); for(int i = 0; i < size; ++i) { - final Genotype<?> genotype = genotypes.get(i); - final Properties individual = (Properties) encoding.decode(genotype); + final Candidate candidate = candidates.get(i); + final Properties individual = candidate.searchSpaceRepresentation(); final Object [] data = individual.getValues(); @@ -245,17 +244,15 @@ public class GenerationStatisticsWriter implements StatisticsWriter { final Object [] data = new Object[3 + functionNames.size() + (int)Math.pow(sourceSpec.size(), 2) + 2 + (int)Math.pow(sourceSpec.size(), 2) + 2 + 1]; - final Genotype<?> genotype = generationWithBestIndividual.bestPhenotype().genotype(); - final Properties individual = (Properties) encoding.decode(genotype); + final Candidate bestCandidate = generationWithBestIndividual.bestCandidate(); + final Properties candidate = bestCandidate.searchSpaceRepresentation(); - data[0] = generationWithBestIndividual.generation(); - data[1] = Arrays.toString(individual.getValues()); - data[2] = generationWithBestIndividual.bestPhenotype().age(generationWithBestIndividual.generation()); - - final Properties candidate = (Properties) encoding.decode(generationWithBestIndividual.bestPhenotype().genotype()); + data[0] = generationWithBestIndividual.iteration(); + data[1] = Arrays.toString(candidate.getValues()); + data[2] = bestCandidate.age(); for(int i = 0; i < functions.size(); ++i) { - final FitnessValue fitness = (FitnessValue) functions.get(i).apply(candidate); + final OptimisationValue fitness = (OptimisationValue) functions.get(i).apply(candidate); data[3 + i] = fitness; throw new IllegalArgumentException("fix me"); } @@ -286,15 +283,16 @@ public class GenerationStatisticsWriter implements StatisticsWriter { throw new IllegalStateException("We have to change the actual fitness type by looking up the correct definition."); } - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { - updateBestGeneration(evolutionResult); + @Override + public void add(final IterationResult result) { + updateBestGeneration(result); } - private void updateBestGeneration(final EvolutionResult<?, FitnessValue> generation) { + private void updateBestGeneration(final IterationResult result) { if(generationWithBestIndividual == null) { - generationWithBestIndividual = generation; - } else if(generationWithBestIndividual.bestFitness().compareTo(generation.bestFitness()) <= 0) { - generationWithBestIndividual = generation; + generationWithBestIndividual = result; + } else if(generationWithBestIndividual.bestCandidate().value().compareTo(result.bestCandidate().value()) <= 0) { + generationWithBestIndividual = result; } } diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/GenerationStatisticsWriter.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/GenerationStatisticsWriter.java index 9a697ea6fa38c1c76589c7a471f0b128025b65e6..38a72042fe9008369bb8812f117b3488541947c6 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/GenerationStatisticsWriter.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/GenerationStatisticsWriter.java @@ -1,19 +1,20 @@ package de.evoal.surrogate.main.statistics.ranged; -import de.evoal.core.api.ea.correlations.Range; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.info.PropertiesBoundaries; import de.evoal.core.api.statistics.*; -import de.evoal.core.api.ea.codec.CustomCodec; -import de.evoal.core.api.properties.Properties; -import de.evoal.core.api.ea.correlations.Correlation; -import de.evoal.core.api.ea.correlations.Correlations; -import de.evoal.core.api.ea.correlations.RangedCorrelation; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.io.WriterStrategy; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; +import de.evoal.core.api.statistics.writer.StatisticsWriter; +import de.evoal.core.ea.api.correlations.Correlation; +import de.evoal.core.ea.api.correlations.Correlations; +import de.evoal.core.ea.api.correlations.RangedCorrelation; import de.evoal.languages.model.instance.Instance; -import io.jenetics.Genotype; -import io.jenetics.engine.EvolutionResult; + import java.util.*; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; @@ -30,12 +31,6 @@ import lombok.extern.slf4j.Slf4j; @Named("range-correlated") @Dependent public class GenerationStatisticsWriter implements StatisticsWriter { - /** - * Encoding for converting between ea and domain. - */ - @Inject - private CustomCodec encoding; - @Inject private PropertiesBoundaries limits; @@ -96,19 +91,19 @@ public class GenerationStatisticsWriter implements StatisticsWriter { } @Override - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { - if(evolutionResult.generation() == 1) { - initialGenerationCubes = fillHypercubes(evolutionResult); + public void add(final IterationResult result) { + if(initialGenerationCubes == null) { + initialGenerationCubes = fillHypercubes(result); } - final List<Hypercube> currentCubes = fillHypercubes(evolutionResult); + final List<Hypercube> currentCubes = fillHypercubes(result); double[] arrayOfDistances = new double[initialGenerationCubes.size()]; for(int i=0; i< arrayOfDistances.length; i++) { arrayOfDistances[i] = currentCubes.get(i).computeSquaredDistanceToCovarianceMatrix(initialGenerationCubes.get(i)); } Object[] data = new Object[1+ arrayOfDistances.length + 1]; - data[0] = evolutionResult.generation(); + data[0] = result.iteration(); double sum = 0.0; for(int i = 0; i < arrayOfDistances.length; i++) { data[i+1] = arrayOfDistances[i]; @@ -118,23 +113,23 @@ public class GenerationStatisticsWriter implements StatisticsWriter { try { writer.addRecord(data); } catch (Exception e) { - log.error("The csv printing didn't work in generation {}", evolutionResult.generation(), e); + log.error("The csv printing didn't work in generation {}", result.iteration(), e); } } - private List<Hypercube> fillHypercubes(final EvolutionResult<?, FitnessValue> evolutionResult){ - List<Hypercube> currentGeneration = new ArrayList<>(); + private List<Hypercube> fillHypercubes(final IterationResult result){ + final List<Hypercube> currentCandidates = new ArrayList<>(); + for(int j = 0; j < hypercubeDefinitions.size(); j++) { - Hypercube hypercube = new Hypercube(hypercubeDefinitions.get(j)); - for(int i= 0; i < evolutionResult.population().asList().size(); i++) { - final Genotype<?> genotype = evolutionResult.population().asList().get(i).genotype(); - final Properties domainValues = (Properties) encoding.decode(genotype); - - hypercube.addDataPoint(domainValues); - } - currentGeneration.add(hypercube); + final Hypercube hypercube = new Hypercube(hypercubeDefinitions.get(j)); + + result.candidates() + .map(Candidate::searchSpaceRepresentation) + .forEach(hypercube::addDataPoint); + + currentCandidates.add(hypercube); } - return currentGeneration; + return currentCandidates; } public void write() { diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/Hypercube.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/Hypercube.java index 7512c25f004f2955d061ce6867e74d90a103ea2d..5882138f757799903465b2e4547d23657c29b73a 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/Hypercube.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/Hypercube.java @@ -5,7 +5,7 @@ import java.util.List; import de.evoal.core.api.properties.Properties; -import de.evoal.core.api.ea.correlations.Range; +import de.evoal.core.ea.api.correlations.Range; import smile.math.matrix.Matrix; public class Hypercube { diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/HypercubeBuilder.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/HypercubeBuilder.java index 183b3465c6e2a61000a81813a3a4fec5db50b19f..93abed2a688b54250a307f94ef21f5201a4b25da 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/HypercubeBuilder.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/HypercubeBuilder.java @@ -1,6 +1,6 @@ package de.evoal.surrogate.main.statistics.ranged; -import de.evoal.core.api.ea.correlations.Range; +import de.evoal.core.ea.api.correlations.Range; import java.util.LinkedList; import java.util.List; diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/PropertyRange.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/PropertyRange.java index 69410c582899e8680d7e2f568d1d59862a52afda..8b117e3573fc8cc22f9403a8d41ce96b0c3c861c 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/PropertyRange.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/ranged/PropertyRange.java @@ -1,6 +1,7 @@ package de.evoal.surrogate.main.statistics.ranged; -import de.evoal.core.api.ea.correlations.Range; + +import de.evoal.core.ea.api.correlations.Range; public class PropertyRange { private final int indexOfChromosome; diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/surrogate/SurrogateStatistics.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/surrogate/SurrogateStatistics.java index fa81cf87e7c0ca140e1f7382144faac0a74dc49d..f1d92d06170f538c6113324b48d0226aff0a1c89 100644 --- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/surrogate/SurrogateStatistics.java +++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/surrogate/SurrogateStatistics.java @@ -3,23 +3,19 @@ package de.evoal.surrogate.main.statistics.surrogate; import java.util.LinkedList; import java.util.List; -import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.inject.Named; import de.evoal.core.api.statistics.*; -import de.evoal.core.api.ea.codec.CustomCodec; -import de.evoal.core.api.ea.fitness.comparator.FitnessValue; import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; -import de.evoal.languages.model.instance.Instance; +import de.evoal.core.api.statistics.io.Writer; +import de.evoal.core.api.statistics.io.WriterException; +import de.evoal.core.api.statistics.writer.AbstractCandidateStatisticsWriter; +import de.evoal.core.api.statistics.writer.Column; +import de.evoal.core.api.statistics.writer.ColumnType; import de.evoal.surrogate.api.function.SurrogateFunction; -import io.jenetics.Genotype; -import io.jenetics.Phenotype; -import io.jenetics.engine.EvolutionResult; -import io.jenetics.util.ISeq; -import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; /** @@ -28,40 +24,19 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Named("prediction-per-individual") @Dependent -public class SurrogateStatistics implements StatisticsWriter { +public class SurrogateStatistics extends AbstractCandidateStatisticsWriter { /** * The predictive function used. */ //@Inject protected SurrogateFunction predictive; - /** - * Encoding for converting between ea and domain. - */ - @Inject - private CustomCodec encoding; - @Inject @Named("surrogate-target-properties-specification") private PropertiesSpecification targetSpecification; - @Inject - private WriterStrategy strategy; - - private Writer writer; - - @PostConstruct - @SneakyThrows(WriterException.class) - private void init() { - createWriter(); - } - @Override - public StatisticsWriter init(Instance configuration) { - return this; - } - - private void createWriter() throws WriterException { + protected Writer createWriter() throws WriterException { final List<Column> columns = new LinkedList<>(); columns.add(new Column("generation", ColumnType.Integer)); @@ -71,18 +46,18 @@ public class SurrogateStatistics implements StatisticsWriter { columns.add(new Column(targetSpecification.getProperties().get(i).name(), ColumnType.Double)); } - writer = strategy.create("prediction-by-individual", columns); + return strategy.create("prediction-by-individual", columns); } - private Object[] dataOfPhenotype(final int index, final long generation, Phenotype<?, FitnessValue> phenotype) { + @Override + protected Object[] toData(final int index, final int iteration, final Candidate candidate) { final Object [] data = new Object[2 + targetSpecification.size()]; - data[0] = generation; + data[0] = iteration; data[1] = index; - final Genotype<?> genotype = phenotype.genotype(); - final Properties individual = (Properties) encoding.decode(genotype); - final Properties predicted = predictive.apply(individual); + final Properties representation = candidate.searchSpaceRepresentation(); + final Properties predicted = predictive.apply(representation); for(int i = 0; i < predicted.size(); ++i) { data[2 + i] = predicted.getValues()[i]; @@ -90,21 +65,4 @@ public class SurrogateStatistics implements StatisticsWriter { return data; } - - @SneakyThrows(WriterException.class) - public void add(final EvolutionResult<?, FitnessValue> evolutionResult) { - final ISeq<Phenotype<?, FitnessValue>> population = (ISeq<Phenotype<?, FitnessValue>>)(Object)evolutionResult.population(); - - for(int i = 0; i < population.size(); ++i) { - writer.addRecord(dataOfPhenotype(i, evolutionResult.generation(), population.get(i))); - } - } - - public void write() { - try { - strategy.close(writer); - } catch (final WriterException e) { - log.error("Failed to write statistics:", e); - } - } } 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 a4a1a87c8f3d195a67618b96ab07d418e6103743..e93c2f8acb31c58b8968cd1465b6bb2d416eff2a 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 @@ -27,6 +27,7 @@ module de.evoal.surrogate.api { requires de.evoal.languages.model.el.dsl; requires de.evoal.languages.model.mll.dsl; requires de.evoal.languages.model.instance; + requires de.evoal.core.ea; exports de.evoal.surrogate.api; exports de.evoal.surrogate.api.function; diff --git a/src/core/de.evoal.surrogate.neural/src/main/java/de/evoal/surrogates/neural/NeuralNetworkConfigurator.java b/src/core/de.evoal.surrogate.neural/src/main/java/de/evoal/surrogates/neural/NeuralNetworkConfigurator.java index d3da4e47e1ddd4e0c13a2133021dd394e635c9e9..129262ad00bab094085b2bfb782ec6c5466c4c04 100644 --- a/src/core/de.evoal.surrogate.neural/src/main/java/de/evoal/surrogates/neural/NeuralNetworkConfigurator.java +++ b/src/core/de.evoal.surrogate.neural/src/main/java/de/evoal/surrogates/neural/NeuralNetworkConfigurator.java @@ -94,7 +94,7 @@ public final class NeuralNetworkConfigurator { } private OptimizationAlgorithm optimizationAlgorithm() { - final String name = parameter("optimization-algorithm"); + final String name = parameter("optimisation-algorithm"); return OptimizationAlgorithm.valueOf(name); } diff --git a/src/core/de.evoal.surrogate.simple/pom.xml b/src/core/de.evoal.surrogate.simple/pom.xml index d8205863ab2a67ea59396973f7cacffc3b77cfe7..a70cdc07f3378c85857a70bbdac924a9f283463d 100644 --- a/src/core/de.evoal.surrogate.simple/pom.xml +++ b/src/core/de.evoal.surrogate.simple/pom.xml @@ -7,6 +7,7 @@ <groupId>de.evoal</groupId> <artifactId>core.plugin</artifactId> <version>0.9.0-SNAPSHOT</version> + <relativePath>../de.evoal.core.plugin</relativePath> </parent> <artifactId>surrogate.simple</artifactId> diff --git a/src/core/de.evoal.surrogate.svr/pom.xml b/src/core/de.evoal.surrogate.svr/pom.xml index c4b6fef8f9c697654f90fb7c9a13e5615de5db6c..208fea6df3fc53ce953e6aa5954d528cd9f584fe 100644 --- a/src/core/de.evoal.surrogate.svr/pom.xml +++ b/src/core/de.evoal.surrogate.svr/pom.xml @@ -7,6 +7,7 @@ <groupId>de.evoal</groupId> <artifactId>core.plugin</artifactId> <version>0.9.0-SNAPSHOT</version> + <relativePath>../de.evoal.core.plugin</relativePath> </parent> <artifactId>surrogate.svr</artifactId>