From 642a3640bc5bd950c6e9f463d823644022c7c520 Mon Sep 17 00:00:00 2001 From: "Bernhard J. Berger" <bernhard.berger@uni-bremen.de> Date: Thu, 16 Mar 2023 21:34:41 +0100 Subject: [PATCH] Moved all code that is specific to evolutionary algorithms to core.ea. core.main keeps all the stuff that is optimiser algorithm-independent. We still have to move some more content back to core.main while we implement new optimisers. #19 #15 Fixed regressions with domain-specific language parsing #18. This bug was introduced by d74325cbe24bc9b8010c241906d4b79c6bc3dab6. --- .../de.evoal.approximative.density/pom.xml | 1 + .../ea/fitness/DensityBasedFitness.java | 8 +- .../src/main/java/module-info.java | 1 + src/core/de.evoal.core.arff/pom.xml | 1 + src/core/de.evoal.core.ea/pom.xml | 78 ++++ .../de/evoal/core/ea/api}/cdi/Fitness.java | 2 +- .../evoal/core/ea/api}/codec/CustomCodec.java | 2 +- .../calculation/CalculationFactory.java | 14 +- .../calculation/CalculationStrategy.java | 6 +- .../ea/api}/constraints/model/Constraint.java | 2 +- .../constraints/model/ConstraintResult.java | 2 +- .../constraints/model/ConstraintType.java | 2 +- .../api}/constraints/model/Constraints.java | 2 +- .../constraints/model/DataConstraints.java | 2 +- .../api}/constraints/model/package-info.java | 2 +- .../ea/api}/constraints/package-info.java | 2 +- .../strategies/CalculationResult.java | 4 +- .../strategies/HandlingStrategy.java | 2 +- .../strategies/RepairStrategy.java | 2 +- .../fitness/MalusForFitnessStrategy.java | 8 +- .../strategies/fitness/MalusFunction.java | 2 +- .../fitness/internal/ChainFunction.java | 4 +- .../fitness/internal/IdentityFunction.java | 4 +- .../fitness/internal/package-info.java | 2 +- .../strategies/fitness/package-info.java | 2 +- .../ea/api}/correlations/Correlation.java | 4 +- .../ea/api}/correlations/Correlations.java | 4 +- .../core/ea/api}/correlations/Range.java | 2 +- .../api}/correlations/RangedCorrelation.java | 2 +- .../ea/api}/initial/InitialPopulation.java | 4 +- .../de/evoal/core/ea/api}/package-info.java | 2 +- .../core/ea/main}/alterer/AltererFactory.java | 68 +-- .../crossover/CorrelationCrossover.java | 6 +- .../CorrelationCrossoverMemento.java | 4 +- .../crossover/LineCorrelationCrossover.java | 4 +- .../LineCorrelationCrossoverMemento.java | 4 +- .../MultiPointCorrelationCrossover.java | 4 +- ...MultiPointCorrelationCrossoverMemento.java | 4 +- .../PartiallyMatchedCorrelationCrossover.java | 4 +- ...llyMatchedCorrelationCrossoverMemento.java | 4 +- .../SinglePointCorrelationCrossover.java | 4 +- ...inglePointCorrelationCrossoverMemento.java | 4 +- .../UniformCorrelationCrossover.java | 4 +- .../UniformCorrelationCrossoverMemento.java | 4 +- .../internal/AbstractCorrelationAlterer.java | 2 +- .../internal/CorrelationCombineAlterer.java | 6 +- .../internal/CorrelationRecombinator.java | 2 +- .../internal/MeanCorrelationAlterer.java | 4 +- .../alterer/mutator/CorrelationMutator.java | 8 +- .../mutator/CorrelationMutatorFactory.java | 4 +- .../mutator/CorrelationMutatorMemento.java | 4 +- .../mutator/GaussianCorrelationMutator.java | 6 +- .../GaussianCorrelationMutatorMemento.java | 4 +- .../SingleBitFlipCorrelationMutator.java | 4 +- ...ingleBitFlipCorrelationMutatorMemento.java | 4 +- .../alterer/mutator/SingleBitFlipMutator.java | 2 +- .../mutator/SwapCorrelationMutator.java | 4 +- .../SwapCorrelationMutatorMemento.java | 4 +- .../core/ea/main}/codec/DynamicCodec.java | 18 +- .../ea/main}/codec/DynamicCodecProducer.java | 5 +- .../chromosome/DynamicBitChromosome.java | 11 +- .../DynamicBoundedDoubleChromosome.java | 2 +- .../DynamicBoundedIntegerChromosome.java | 3 +- .../codec/chromosome/DynamicChromosome.java | 2 +- .../chromosome/DynamicChromosomeFactory.java | 2 +- .../chromosome/DynamicDoubleChromosome.java | 6 +- .../chromosome/DynamicGrayChromosome.java | 12 +- .../chromosome/DynamicIntegerChromosome.java | 10 +- .../chromosome/DynamicScaledChromosome.java | 2 +- .../ea/main/comparator/ParetoComparator.java | 23 + .../comparator/ParetoOptimisationValue.java} | 18 +- .../constraint/ConstraintProducer.java | 16 +- .../constraint/ast/BoundaryIdentifier.java | 8 +- .../constraint/ast/ConditionConverter.java | 24 +- .../ast/UnaryBoundaryIdentifier.java | 10 +- .../calculations/NormalCalculation.java | 8 +- .../StandardDeviationCalculation.java | 14 +- .../JeneticsConstraintProducer.java | 26 +- .../JeneticsConstraintStrategy.java | 16 +- .../constraint/RandomGenotypeStrategy.java | 4 +- .../fitness/MalusFunctionProducer.java | 24 +- .../internal/MalusForFitnessFunction.java | 8 +- .../utils/ArithmeticNumberOperations.java | 2 +- .../constraint/utils/ConfigurationUtils.java | 15 +- .../correlation/CorrelationsProducer.java | 18 +- .../constraints/correlation/el/AstHelper.java | 7 +- .../correlation/el/RangeSwitch.java | 6 +- .../deviation/DeviationProducer.java | 19 +- .../deviation/model/Deviation.java | 2 +- .../deviation/model/Deviations.java | 2 +- .../ea/main}/constraints/el/CallSwitch.java | 2 +- .../constraints/el/DataReferenceSwitch.java | 2 +- .../ea/main}/constraints/el/ElHelper.java | 2 +- .../ea/main}/constraints/el/LogHelper.java | 2 +- .../ea/main}/constraints/el/NumberSwitch.java | 2 +- .../ea/main}/constraints/el/StringSwitch.java | 2 +- .../constraints/el/ValueReferenceSwitch.java | 2 +- .../ea/main}/fitness/DistanceFitness.java | 10 +- .../core/ea/main}/fitness/FitnessFactory.java | 18 +- .../fitness/JeneticsFitnessFunction.java | 6 +- .../core/ea/main}/fitness/MalusFitness.java | 15 +- .../initial/InitialPopulationFactory.java | 6 +- .../initial/RandomInitialPopulation.java | 7 +- .../core/ea/main}/initial/RandomProducer.java | 6 +- .../jenetics/AbstractBoundedChromosome.java | 2 +- .../core/ea}/main/jenetics/BitChromosome.java | 2 +- .../core/ea}/main/jenetics/BitHelper.java | 2 +- .../main/jenetics/BoundedBitChromosome.java | 2 +- .../jenetics/BoundedDoubleChromosome.java | 2 +- .../ea}/main/jenetics/BoundedDoubleGene.java | 2 +- .../jenetics/BoundedIntegerChromosome.java | 3 +- .../ea}/main/jenetics/BoundedIntegerGene.java | 2 +- .../ea}/main/jenetics/BoundedOperations.java | 2 +- .../core/ea/main/jenetics/ConstraintList.java | 32 ++ .../ea}/main/jenetics/DecimalFactory.java | 2 +- .../jenetics/GrayBoundedBitChromosome.java | 2 +- .../core/ea}/main/jenetics/GrayHelper.java | 2 +- .../jenetics/NaiveBoundedBitChromosome.java | 2 +- .../ea}/main/jenetics/VariableChromosome.java | 2 +- .../main/producer/DataConstraintProducer.java | 7 +- .../producer/OptimisingFunctionProducer.java} | 22 +- .../PropertiesBoundariesProducer.java | 10 +- .../ea/main}/producer/SelectorFactory.java | 2 +- .../search/EvolutionaryAlgorithmSearch.java | 50 +- .../ea/main/statistics/CandidateAdapter.java | 63 +++ .../statistics/IterationResultAdapter.java | 48 ++ .../statistics/JeneticsStatisticsWriter.java | 21 + .../src/main/java/module-info.java | 49 ++ .../src/main/resources/META-INF/MANIFEST.MF | 1 + .../src/main/resources/META-INF/beans.xml | 11 + .../META-INF/definitions/data/constraints.dl | 13 + .../META-INF/definitions/data/si-units.ddl | 67 +++ .../META-INF/definitions/optimisation/core.dl | 434 ++++++++++++++++++ .../evoal/core/ea/utils/LanguageHelperTest.dl | 12 + .../evoal/core/ea/utils/LanguageHelperTest.ol | 16 + .../core/ea/utils/regressions/generator.dl | 25 + .../ea/utils/regressions/shekel.generator | 20 + .../evoal/core/ea/utils/regressions/test.ddl | 3 + src/core/de.evoal.core.junit/pom.xml | 1 + .../core/junit/dsl/NoOpBuiltinProvider.java | 14 + .../src/main/java/module-info.java | 3 + src/core/de.evoal.core.main/pom.xml | 43 -- src/core/de.evoal.core.main/scripts/paths.env | 6 +- .../core/api/ea/fitness/FitnessDecorator.java | 19 - .../core/api/ea/fitness/FitnessFunction.java | 21 - .../fitness/comparator/FitnessComparator.java | 25 - .../ea/fitness/comparator/FitnessValue.java | 11 - .../core/api/ea/fitness/package-info.java | 4 - .../OptimisationAlgorithm.java | 4 +- .../optimisation/OptimisationFunction.java | 16 + .../OptimisationFunctionDecorator.java | 19 + .../api/optimisation/OptimisationValue.java | 11 + .../OptimisationValueComparator.java | 34 ++ .../properties/PropertiesSpecification.java | 2 - .../evoal/core/api/statistics/Candidate.java | 30 ++ .../core/api/statistics/IterationResult.java | 30 ++ .../core/api/statistics/{ => io}/Writer.java | 2 +- .../statistics/{ => io}/WriterException.java | 2 +- .../statistics/{ => io}/WriterStrategy.java | 5 +- .../core/api/statistics/package-info.java | 4 +- .../AbstractCandidateStatisticsWriter.java | 59 +++ .../api/statistics/{ => writer}/Column.java | 2 +- .../statistics/{ => writer}/ColumnType.java | 2 +- .../{ => writer}/StatisticsWriter.java | 17 +- .../{ => writer}/WriterContext.java | 2 +- .../main/java/de/evoal/core/main/Evoal.java | 36 +- .../comparator/WeightedSumComparator.java | 15 +- .../WeightedSumOptimisationValue.java} | 18 +- .../main/ea/comparator/ParetoComparator.java | 23 - .../core/main/jenetics/ConstraintList.java | 32 -- .../main/language/ModuleBuiltinProvider.java | 69 ++- .../producer/ConfigurationValueProducer.java | 14 + .../main/producer/SpecificationProducer.java | 6 +- .../search/HeuristicSearchEvaluation.java | 23 +- .../core/main/search/HeuristicSearchMain.java | 7 +- .../main/search/HeuristicSearchUtils.java | 8 +- .../main/statistics/StatisticsFactory.java | 8 +- .../statistics/fitness/FitnessStatistics.java | 60 +-- .../fitness/OptimisingStatistics.java | 66 +++ .../fitness/OptimizingStatistics.java | 104 ----- .../individuals/IndividualStatistics.java | 69 +-- .../internal/MultipleStatisticsWriter.java | 9 +- .../{writer => io}/csv/CsvStrategy.java | 10 +- .../{writer => io}/csv/CsvWriter.java | 10 +- .../main/statistics/nop/NopStatistics.java | 7 +- .../src/main/java/module-info.java | 55 +-- .../META-INF/definitions/data/constraints.dl | 13 + .../META-INF/definitions/optimisation/core.dl | 213 ++++----- .../utils/LanguageHelperRegressionTest.java | 102 ++++ .../api/utils/LanguageHelperUnitTest.java | 182 ++++++++ .../core/api/utils/regressions/generator.dl | 25 + .../api/utils/regressions/shekel.generator | 20 + .../evoal/core/api/utils/regressions/test.ddl | 3 + src/core/de.evoal.generator.main/pom.xml | 1 + .../generator/main.dl | 8 +- src/core/de.evoal.releng.parent/pom.xml | 2 + src/core/de.evoal.surrogate.api/pom.xml | 16 + .../api/function/SurrogateFunction.java | 2 +- .../main/ea/SurrogateFitnessFunction.java | 7 +- .../main/ea/TrainingInitialPopulation.java | 4 +- .../surrogate/main/ea/TrainingProducer.java | 6 +- .../main/ea/TrainingRepairStrategy.java | 4 +- .../main/gof/rmse/RMSECalculator.java | 2 +- .../main/gof/rmse/RRSECalculator.java | 3 +- .../constraint/ConstraintStatistics.java | 56 +-- .../GenerationStatisticsWriter.java | 56 ++- .../ranged/GenerationStatisticsWriter.java | 59 ++- .../main/statistics/ranged/Hypercube.java | 2 +- .../statistics/ranged/HypercubeBuilder.java | 2 +- .../main/statistics/ranged/PropertyRange.java | 3 +- .../surrogate/SurrogateStatistics.java | 68 +-- .../src/main/java/module-info.java | 1 + .../neural/NeuralNetworkConfigurator.java | 2 +- src/core/de.evoal.surrogate.simple/pom.xml | 1 + src/core/de.evoal.surrogate.svr/pom.xml | 1 + 215 files changed, 2346 insertions(+), 1266 deletions(-) create mode 100644 src/core/de.evoal.core.ea/pom.xml rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/cdi/Fitness.java (91%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/codec/CustomCodec.java (93%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/calculation/CalculationFactory.java (77%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/calculation/CalculationStrategy.java (85%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/model/Constraint.java (96%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/model/ConstraintResult.java (93%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/model/ConstraintType.java (78%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/model/Constraints.java (94%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/model/DataConstraints.java (97%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/model/package-info.java (62%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/package-info.java (72%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/CalculationResult.java (89%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/HandlingStrategy.java (76%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/RepairStrategy.java (88%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/fitness/MalusForFitnessStrategy.java (85%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/fitness/MalusFunction.java (89%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/fitness/internal/ChainFunction.java (84%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/fitness/internal/IdentityFunction.java (69%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/fitness/internal/package-info.java (54%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/constraints/strategies/fitness/package-info.java (81%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/correlations/Correlation.java (89%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/correlations/Correlations.java (95%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/correlations/Range.java (88%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/correlations/RangedCorrelation.java (95%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/initial/InitialPopulation.java (83%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/api/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/api}/package-info.java (75%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/AltererFactory.java (61%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/CorrelationCrossover.java (95%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/CorrelationCrossoverMemento.java (71%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/LineCorrelationCrossover.java (96%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/LineCorrelationCrossoverMemento.java (87%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/MultiPointCorrelationCrossover.java (97%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/MultiPointCorrelationCrossoverMemento.java (89%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/PartiallyMatchedCorrelationCrossover.java (95%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/PartiallyMatchedCorrelationCrossoverMemento.java (87%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/SinglePointCorrelationCrossover.java (94%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/SinglePointCorrelationCrossoverMemento.java (94%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/UniformCorrelationCrossover.java (95%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/crossover/UniformCorrelationCrossoverMemento.java (95%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/internal/AbstractCorrelationAlterer.java (92%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/internal/CorrelationCombineAlterer.java (96%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/internal/CorrelationRecombinator.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/internal/MeanCorrelationAlterer.java (89%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/CorrelationMutator.java (97%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/CorrelationMutatorFactory.java (87%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/CorrelationMutatorMemento.java (70%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/GaussianCorrelationMutator.java (90%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/GaussianCorrelationMutatorMemento.java (91%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/SingleBitFlipCorrelationMutator.java (97%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/SingleBitFlipCorrelationMutatorMemento.java (96%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/SingleBitFlipMutator.java (96%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/SwapCorrelationMutator.java (94%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/alterer/mutator/SwapCorrelationMutatorMemento.java (87%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/DynamicCodec.java (82%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/DynamicCodecProducer.java (78%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicBitChromosome.java (75%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicBoundedDoubleChromosome.java (95%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicBoundedIntegerChromosome.java (92%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicChromosome.java (97%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicChromosomeFactory.java (91%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicDoubleChromosome.java (91%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicGrayChromosome.java (75%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicIntegerChromosome.java (82%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/codec/chromosome/DynamicScaledChromosome.java (95%) create mode 100644 src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/comparator/ParetoComparator.java rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/ParetoFitnessValue.java => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/comparator/ParetoOptimisationValue.java} (64%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/ConstraintProducer.java (87%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/ast/BoundaryIdentifier.java (91%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/ast/ConditionConverter.java (88%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/ast/UnaryBoundaryIdentifier.java (93%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/strategies/calculations/NormalCalculation.java (75%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/strategies/calculations/StandardDeviationCalculation.java (90%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java (71%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java (70%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java (84%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/strategies/fitness/MalusFunctionProducer.java (88%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/strategies/fitness/internal/MalusForFitnessFunction.java (77%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/utils/ArithmeticNumberOperations.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/constraint/utils/ConfigurationUtils.java (73%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/correlation/CorrelationsProducer.java (87%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/correlation/el/AstHelper.java (73%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/correlation/el/RangeSwitch.java (96%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/deviation/DeviationProducer.java (81%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/deviation/model/Deviation.java (86%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/deviation/model/Deviations.java (94%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/el/CallSwitch.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/el/DataReferenceSwitch.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/el/ElHelper.java (94%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/el/LogHelper.java (94%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/el/NumberSwitch.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/el/StringSwitch.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/constraints/el/ValueReferenceSwitch.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/fitness/DistanceFitness.java (91%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/fitness/FitnessFactory.java (72%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/fitness/JeneticsFitnessFunction.java (55%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/fitness/MalusFitness.java (60%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/initial/InitialPopulationFactory.java (86%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/initial/RandomInitialPopulation.java (77%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/initial/RandomProducer.java (85%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/AbstractBoundedChromosome.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/BitChromosome.java (99%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/BitHelper.java (97%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/BoundedBitChromosome.java (96%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/BoundedDoubleChromosome.java (99%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/BoundedDoubleGene.java (99%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/BoundedIntegerChromosome.java (99%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/BoundedIntegerGene.java (99%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/BoundedOperations.java (95%) create mode 100644 src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/jenetics/ConstraintList.java rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/DecimalFactory.java (92%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/GrayBoundedBitChromosome.java (97%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/GrayHelper.java (96%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/NaiveBoundedBitChromosome.java (97%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/jenetics/VariableChromosome.java (98%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/producer/DataConstraintProducer.java (92%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/OptimisingFunctionProducer.java} (76%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core => de.evoal.core.ea/src/main/java/de/evoal/core/ea}/main/producer/PropertiesBoundariesProducer.java (72%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/producer/SelectorFactory.java (99%) rename src/core/{de.evoal.core.main/src/main/java/de/evoal/core/main/ea => de.evoal.core.ea/src/main/java/de/evoal/core/ea/main}/search/EvolutionaryAlgorithmSearch.java (71%) create mode 100644 src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/CandidateAdapter.java create mode 100644 src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/IterationResultAdapter.java create mode 100644 src/core/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/JeneticsStatisticsWriter.java create mode 100644 src/core/de.evoal.core.ea/src/main/java/module-info.java create mode 100644 src/core/de.evoal.core.ea/src/main/resources/META-INF/MANIFEST.MF create mode 100644 src/core/de.evoal.core.ea/src/main/resources/META-INF/beans.xml create mode 100644 src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/data/constraints.dl create mode 100644 src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/data/si-units.ddl create mode 100644 src/core/de.evoal.core.ea/src/main/resources/META-INF/definitions/optimisation/core.dl create mode 100644 src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.dl create mode 100644 src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/LanguageHelperTest.ol create mode 100644 src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/generator.dl create mode 100644 src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/shekel.generator create mode 100644 src/core/de.evoal.core.ea/src/test/resources/de/evoal/core/ea/utils/regressions/test.ddl create mode 100644 src/core/de.evoal.core.junit/src/main/java/de/evoal/core/junit/dsl/NoOpBuiltinProvider.java delete mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/FitnessDecorator.java delete mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/FitnessFunction.java delete mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/comparator/FitnessComparator.java delete mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/comparator/FitnessValue.java delete mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/fitness/package-info.java rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/{search => optimisation}/OptimisationAlgorithm.java (85%) create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationFunction.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationFunctionDecorator.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationValue.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/optimisation/OptimisationValueComparator.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/Candidate.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/IterationResult.java rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/{ => io}/Writer.java (92%) rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/{ => io}/WriterException.java (83%) rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/{ => io}/WriterStrategy.java (86%) create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/writer/AbstractCandidateStatisticsWriter.java rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/{ => writer}/Column.java (88%) rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/{ => writer}/ColumnType.java (70%) rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/{ => writer}/StatisticsWriter.java (57%) rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/statistics/{ => writer}/WriterContext.java (96%) rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/{ea => }/comparator/WeightedSumComparator.java (65%) rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/{ea/comparator/WeightedSumFitnessValue.java => comparator/WeightedSumOptimisationValue.java} (72%) delete mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/comparator/ParetoComparator.java delete mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/jenetics/ConstraintList.java create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/OptimisingStatistics.java delete mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/OptimizingStatistics.java rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/{writer => io}/csv/CsvStrategy.java (82%) rename src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/{writer => io}/csv/CsvWriter.java (89%) create mode 100644 src/core/de.evoal.core.main/src/main/resources/META-INF/definitions/data/constraints.dl create mode 100644 src/core/de.evoal.core.main/src/test/java/de/evoal/core/api/utils/LanguageHelperRegressionTest.java create mode 100644 src/core/de.evoal.core.main/src/test/java/de/evoal/core/api/utils/LanguageHelperUnitTest.java create mode 100644 src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/generator.dl create mode 100644 src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/shekel.generator create mode 100644 src/core/de.evoal.core.main/src/test/resources/de/evoal/core/api/utils/regressions/test.ddl rename src/core/de.evoal.generator.main/src/main/resources/META-INF/{specifications => definitions}/generator/main.dl (95%) diff --git a/src/core/de.evoal.approximative.density/pom.xml b/src/core/de.evoal.approximative.density/pom.xml index 6a7f9a02..d6d004df 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 abaed5ee..0d2d8435 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 ceeee4e2..ff9fde44 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 e54de0a6..b5952996 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 00000000..168bd7c0 --- /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 f56446d9..ef0c5e39 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 683b2d94..1e15f7a1 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 51ec5676..abd116b8 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 24a389e4..87e1f179 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 c55abd06..d7e6d38c 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 af435030..b5a2cb94 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 3ed3568a..9f306c3a 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 b34928c8..70cb827d 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 6a57f417..69699261 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 31b616e2..e5e3b94f 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 77b586b4..4fe22a2c 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 2c72effc..89283d25 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 3a0687c1..44ea5b58 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 f9b54934..1fe3543c 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 c6d19237..b74ca6b8 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 f05f19b9..ef7bf096 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 1e785595..60a50370 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 268b71c7..5f7d3f7e 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 cc59a125..fc1c069d 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 9ead63b4..678118e2 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 ac64ab6d..501285b7 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 182a46aa..f57489c2 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 598e4636..d173fbd2 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 064a7a94..62de1611 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 1d419270..aad1378b 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 a3ac75c0..436da35f 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 bc094066..17886765 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 6c905c34..85618077 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 904ae719..d68d8672 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 f5b4e587..7fdaa2dc 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 53b7466c..19761ac2 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 6c822877..2b0e3f0e 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 f7513b13..d7acdba9 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 6df51c8c..a9bafbc4 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 37ebc42c..8fa3f211 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 df7d99e3..785edcbb 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 d814190a..2c7d613d 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 f9f8bf64..4a8d095b 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 c48d34fb..4366384e 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 ec6b6646..a7f727ea 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 04c08da2..16b129eb 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 0b05bb86..a2b67712 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 9bf8f08c..07be1b6b 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 9419b4f1..78033e4e 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 a7beee87..84cb1a68 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 c16a79c2..b076919d 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 8fc7d7b5..c4bf3d67 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 d492e41e..826cd7e0 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 b3ce2a63..2b71541a 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 28f26afa..ec047b65 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 2aab3ccf..44bfaa47 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 272ba8e8..ee4b3684 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 c38bf41c..e0fa7d96 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 c9e32d19..714bce24 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 bd7eec67..e8abb952 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 c050bb51..ef50d766 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 2b85fc68..6775e82c 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 70d8330c..18a9b497 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 99527980..aae68706 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 72004b58..8a38301c 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 15ebc323..ccac308e 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 1c18683b..95c0161c 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 44481abd..7b7d2e27 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 9fd9a45c..950267d2 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 00000000..5c955ff5 --- /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 4a975682..9ca49b3c 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 2db5c6e8..a681fa71 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 d452d228..3aa7e14a 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 d424bb6f..9c0a3952 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 c73b01ce..f837106a 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 a12ba46f..6b1cae34 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 0c8dd19c..94e64144 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 6c5ce286..f247107d 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 30672a6d..8791ae18 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 ea28d1f9..56cd879c 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 57371661..5b687c95 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 8d637e5f..c1af10b4 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 79702bbb..d0590f75 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 546a87f2..feae4351 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 0739e389..b26acb27 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 6df67471..231244b5 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 33f382bd..771538cf 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 2c9562be..ca30adc0 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 8ad2917b..7ae4d4a8 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 26f2e235..b2e839b0 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 c1007a8e..1569b034 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 4a01d1a0..37abff7c 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 8913ecda..b3a3981c 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 3fec549b..4d0d70e4 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 ccb30d01..b2f107e2 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 df183422..1dc2d79e 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 b7e4876d..0172ec43 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 d7cc3feb..31a289cb 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 c5ce9b63..0f6fc428 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 5da57327..385fddba 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 6a822987..9e864dcd 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 859982a0..139cba96 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 9ea64a72..21140c0d 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 16840785..fb5ca8ad 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 4b56a149..d002182e 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 f3d7eec0..a0333d81 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 5b476c49..9e05d584 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 b2ea8a64..c3a7c117 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 d0999989..d765bbd5 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 e5bce3eb..b15307ec 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 2421adcb..db4a17bd 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 d29ed1f1..64192d0d 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 7d513c65..4dcb0e28 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 00000000..30207b91 --- /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 fd9e1160..8b0f34f0 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 bf1398b8..ba255604 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 65fe1161..a44369f0 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 20ae13a7..e6d2be3e 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 f180cfb8..2300fde2 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 f9a5a649..0e4adb7b 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 77900cf3..6643c5f4 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 10bb824a..8bcd5595 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 17433b5e..2b201bd1 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 23a6c383..66596c25 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 00000000..9836c62e --- /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 00000000..76f9b86f --- /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 00000000..c2d33ee0 --- /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 00000000..a3984f71 --- /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 00000000..9d885be5 --- /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 00000000..36964de4 --- /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 00000000..1ba8690e --- /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 00000000..b7e8f297 --- /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 00000000..91189620 --- /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 00000000..bde38ea5 --- /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 00000000..59094313 --- /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 00000000..84b046e8 --- /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 00000000..7486510a --- /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 00000000..0a100d63 --- /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 18a5e744..c2754b4c 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 00000000..76261191 --- /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 ca0735dc..8f2e8717 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 38fb5e77..b0ed4fc7 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 b627c074..afa56377 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 fea17387..00000000 --- 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 fc82aebf..00000000 --- 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 ae502fa9..00000000 --- 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 6b0e79e2..00000000 --- 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 0a81b12d..00000000 --- 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 eb738cc1..4d3701f6 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 00000000..c3407f6d --- /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 00000000..25fa8e46 --- /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 00000000..3978c729 --- /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 00000000..2bd4e34c --- /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 55e5ffd6..c4d13c47 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 00000000..3f8ae958 --- /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 00000000..b3acbecf --- /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 0a1c3189..ca527131 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 62f74d95..12f6a903 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 0c6a4627..dbe478e7 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 87bd9222..22edd163 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 00000000..238018e1 --- /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 8c889217..8cab9328 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 f1b8511d..b7269032 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 50105799..40435739 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 2b417785..0a1edbda 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 c7cc28ce..92ead262 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 90ac991a..4479daef 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 e7f0bb89..5246a7b7 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 21baf965..00000000 --- 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 1f3c7c54..00000000 --- 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 bc783c43..2842415e 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 ffe4d141..13262c3b 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 faf31bd3..c0edffbc 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 d5cabac5..74e94493 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 42900dd8..8f0d469e 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 4e1abf34..bfe4ac00 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 1da6eb6a..dcde046a 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 c5c323f6..2318297e 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 00000000..5709cf8d --- /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 f8a1b0b6..00000000 --- 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 b8f58b5c..c4473223 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 921a2ad4..9046da28 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 f2bb0506..431192e8 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 e303e505..73bdaa73 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 195ae316..18c1b254 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 bd1fbec6..b422e6e8 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 00000000..1ba8690e --- /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 501c2516..91189620 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 00000000..85c45e0e --- /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 00000000..896d0452 --- /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 00000000..84b046e8 --- /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 00000000..7486510a --- /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 00000000..0a100d63 --- /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 3da6302a..50a1d2f5 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 b6d41817..bd4485c1 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 ccedc18f..623d5c0d 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 7dcf280c..878b1581 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 6f43da87..f5bbbd55 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 84f3c083..f820ef82 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 2064686e..4e44046d 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 cbbbdef6..a0f03db9 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 545eab0a..b2f005aa 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 420d6063..d99fe097 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 9df7d648..aba0ded2 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 cc8621a0..e0d7afff 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 c141bda6..f5ab9a93 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 9a697ea6..38a72042 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 7512c25f..5882138f 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 183b3465..93abed2a 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 69410c58..8b117e35 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 fa81cf87..f1d92d06 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 a4a1a87c..e93c2f8a 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 d3da4e47..129262ad 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 d8205863..a70cdc07 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 c4b6fef8..208fea6d 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> -- GitLab