Skip to content
Snippets Groups Projects
Commit bd913386 authored by Bernhard Johannes Berger's avatar Bernhard Johannes Berger
Browse files

Moved non-ea stuff back to core.main (#19)

parent d0d3b2ef
No related branches found
No related tags found
No related merge requests found
Pipeline #250263 passed
Showing
with 68 additions and 54 deletions
......@@ -114,7 +114,7 @@ public abstract class DensityBasedFitness extends OptimisationFunctionDecorator
final double predictedValue = current[i];
final double probability = probabilityCalculator.apply(sourceData, targetData, candidate, predictedValue);
fitness[i] = current[i] * Math.pow(probability, rootExponent) + (1 - probability) * 1.0 / Math.pow(probability, exponent);
fitness[i] = current[i] * Math.pow(probability, rootExponent) + (1 - probability) / Math.pow(probability, exponent);
}
return fitness;
......
......@@ -12,7 +12,7 @@ public class CustomKernelDensity {
* The kernel -- a symmetric but not necessarily positive function that
* integrates to one. Here we just Gaussian density function.
*/
private GaussianDistribution gaussian;
private final GaussianDistribution gaussian;
/**
* Constructor. The bandwidth of kernel will be estimated by the rule of thumb.
......
......@@ -4,7 +4,7 @@ import de.evoal.surrogate.api.configuration.PartialFunctionConfiguration;
public interface DensityData {
public void attachTo(final PartialFunctionConfiguration configuration, final String propertyName);
void attachTo(final PartialFunctionConfiguration configuration, final String propertyName);
public double probability(final double value);
double probability(final double value);
}
......@@ -21,7 +21,7 @@ import java.util.Arrays;
@Dependent
@Named("arff-reader")
public class ArffPropertiesReader implements PropertiesReader {
private static interface TriFunction<S,T,U,R> {
private interface TriFunction<S,T,U,R> {
/**
* Applies this function to the given arguments.
*
......
......@@ -52,8 +52,8 @@ public class ConvertArff implements MainClass {
final PropertiesSpecification specification = readSpecification();
try (final PropertiesReader reader = PropertiesIOFactory.reader(arffFile, specification);
final PropertiesWriter writer = PropertiesIOFactory.writer(jsonFile, specification);
) {
final PropertiesWriter writer = PropertiesIOFactory.writer(jsonFile, specification)
) {
while(reader.hasNext()) {
writer.add(reader.next());
......
......@@ -15,5 +15,5 @@ public @interface Fitness {
/**
* @return Name of the fitness calculator.
*/
public String value();
String value();
}
......@@ -18,5 +18,5 @@ public interface CustomCodec<G extends Gene<?, G>> extends Codec<Properties, G>
* @param p The individual to code.
* @return The generated (non-null) genotype.
*/
public Genotype<G> encode(final Properties p);
Genotype<G> encode(final Properties p);
}
......@@ -8,5 +8,5 @@ import io.jenetics.engine.EvolutionStream;
public interface InitialPopulation<G extends Gene<?, G>, C extends Comparable<C>> {
InitialPopulation init(final Instance initialization);
public EvolutionStream<G, C> create(final Engine<G, C> engine);
EvolutionStream<G, C> create(final Engine<G, C> engine);
}
......@@ -3,12 +3,13 @@ package de.evoal.core.ea.main.alterer;
import java.util.function.BiFunction;
import de.evoal.core.api.optimisation.OptimisationValue;
import de.evoal.core.ea.api.codec.CustomCodec;
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.core.api.correlations.Correlations;
import de.evoal.languages.model.instance.Instance;
import de.evoal.core.api.utils.LanguageHelper;
import io.jenetics.*;
......@@ -28,6 +29,9 @@ public class AltererFactory {
@Inject
private BiFunction<Double, Double, Alterer> factory;
@Inject
private CustomCodec codec;
/**
* Creates an alterer based on the heuristic configuration.
*
......@@ -79,7 +83,7 @@ public class AltererFactory {
final Double crossoverProbability = LanguageHelper.lookup(config, "crossover-probability");
final Double swapProbability = LanguageHelper.lookup(config,"swap-probability");
return new UniformCorrelationCrossover(crossoverProbability, swapProbability, correlations);
return new UniformCorrelationCrossover(crossoverProbability, swapProbability, correlations, codec);
}
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createBitFlipMutator (final Instance config) {
......@@ -92,7 +96,7 @@ public class AltererFactory {
final Double probability = LanguageHelper.lookup(config, "probability");
final Double threshold = LanguageHelper.lookup(config, "threshold");
return new SingleBitFlipCorrelationMutator(probability, threshold, correlations);
return new SingleBitFlipCorrelationMutator(probability, threshold, correlations, codec);
}
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createSwapMutator (final Instance config) {
......@@ -105,7 +109,7 @@ public class AltererFactory {
final Double probability = LanguageHelper.lookup(config, "probability");
final Double threshold = LanguageHelper.lookup(config, "threshold");
return new SwapCorrelationMutator<>(probability, threshold, correlations);
return new SwapCorrelationMutator<>(probability, threshold, correlations, codec);
}
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createSinglePointCrossover(final Instance config) {
......@@ -117,7 +121,7 @@ public class AltererFactory {
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationSinglePointCrossover(final Instance config) {
final Double probability = LanguageHelper.lookup(config, "probability");
return new SinglePointCorrelationCrossover(probability, correlations);
return new SinglePointCorrelationCrossover(probability, correlations, codec);
}
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createPartiallyMatchedAlterer(final Instance config) {
......@@ -129,7 +133,7 @@ public class AltererFactory {
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createCorrelationPartiallyMatchedAlterer(final Instance config) {
final Double probability = LanguageHelper.lookup(config, "probability");
return (Alterer<G, OptimisationValue>) new PartiallyMatchedCorrelationCrossover<G, OptimisationValue>(probability, correlations);
return (Alterer<G, OptimisationValue>) new PartiallyMatchedCorrelationCrossover<G, OptimisationValue>(probability, correlations, codec);
}
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createMultiPointCrossover(final Instance config) {
......@@ -143,7 +147,7 @@ public class AltererFactory {
final Double probability = LanguageHelper.lookup(config, "probability");
final Integer count = LanguageHelper.lookup(config, "count");
return new MultiPointCorrelationCrossover<>(probability, count, correlations);
return new MultiPointCorrelationCrossover<>(probability, count, correlations, codec);
}
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createMeanAlterer(final Instance config) {
......@@ -155,7 +159,7 @@ public class AltererFactory {
private <G extends NumericGene<?, G> & Mean<G>> Alterer<G, OptimisationValue> createCorrelationMeanAlterer(final Instance config) {
final Double probability = LanguageHelper.lookup(config, "probability");
return (Alterer<G, OptimisationValue>) new MeanCorrelationAlterer<G, OptimisationValue>(probability, correlations);
return new MeanCorrelationAlterer<G, OptimisationValue>(probability, correlations, codec);
}
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createLineCrossover(final Instance config) {
......@@ -169,7 +173,7 @@ public class AltererFactory {
final Double probability = LanguageHelper.lookup(config, "probability");
final Double position = LanguageHelper.lookup(config, "position");
return new LineCorrelationCrossover(probability, position, correlations);
return new LineCorrelationCrossover(probability, position, correlations, codec);
}
private <G extends Gene<?, G>> Alterer<G, OptimisationValue> createIntermediateCrossover(final Instance config) {
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlation;
import de.evoal.core.ea.api.correlations.Correlations;
import de.evoal.core.api.correlations.Correlation;
import de.evoal.core.api.correlations.Correlations;
import de.evoal.core.ea.api.codec.CustomCodec;
import io.jenetics.*;
import io.jenetics.util.MSeq;
import io.jenetics.util.RandomRegistry;
......@@ -17,7 +18,9 @@ public abstract class CorrelationCrossover<
>
extends Recombinator<G, C> {
private final Correlations<G> correlations;
private final Correlations correlations;
private final CustomCodec<G> codec;
/**
* Constructs an alterer with a given recombination probability.
......@@ -26,10 +29,11 @@ public abstract class CorrelationCrossover<
* @throws IllegalArgumentException if the {@code probability} is not in the
* valid range of {@code [0, 1]}
*/
protected CorrelationCrossover(final double probability, final Correlations correlations) {
protected CorrelationCrossover(final double probability, final Correlations correlations, final CustomCodec<G> codec) {
super(probability, 2);
this.correlations = correlations;
this.codec = codec;
}
@Override
......@@ -48,7 +52,7 @@ public abstract class CorrelationCrossover<
//Choosing the Chromosome index for crossover.
final int chIndex = random.nextInt(min(gt1.length(), gt2.length()));
final int rootIndex = correlations.findCorrelationRoot(gt1, chIndex);
final int rootIndex = correlations.findCorrelationRoot(codec.decode(gt1), chIndex);
final var c1 = MSeq.of(gt1);
final var c2 = MSeq.of(gt2);
......@@ -79,7 +83,7 @@ public abstract class CorrelationCrossover<
c1.set(chIndex, c1.get(chIndex).newInstance(genes1.toISeq()));
c2.set(chIndex, c2.get(chIndex).newInstance(genes2.toISeq()));
for(final Correlation correlation : correlations.find(gt1, chIndex)) {
for(final Correlation correlation : correlations.find(codec.decode(gt1), chIndex)) {
final int targetIndex = correlation.getChromosomeTwo();
correlationOrder += crossover(gt1, gt2, c1, c2, targetIndex, newCrossoverMemento().apply(memento, correlation)); // sum up correlations
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlation;
import de.evoal.core.api.correlations.Correlation;
public interface CorrelationCrossoverMemento<T extends CorrelationCrossoverMemento<T>> {
/**
* Applies the given memento with according to the correlation to this memento.
*/
public T apply(final T memento, final Correlation correlation);
T apply(final T memento, final Correlation correlation);
}
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.api.utils.Requirements;
import de.evoal.core.ea.api.correlations.Correlations;
import de.evoal.core.api.correlations.Correlations;
import de.evoal.core.ea.api.codec.CustomCodec;
import io.jenetics.NumericGene;
import io.jenetics.util.MSeq;
......@@ -27,8 +28,8 @@ public class LineCorrelationCrossover<
* @throws IllegalArgumentException if the {@code probability} is not in the
* valid range of {@code [0, 1]} or if {@code p} is smaller then zero
*/
public LineCorrelationCrossover(final double probability, final double p, final Correlations correlations) {
super(probability, correlations);
public LineCorrelationCrossover(final double probability, final double p, final Correlations correlations, final CustomCodec<G> codec) {
super(probability, correlations, codec);
_p = Requirements.nonNegative(p);
}
......@@ -42,8 +43,8 @@ public class LineCorrelationCrossover<
* @throws IllegalArgumentException if the {@code probability} is not in the
* valid range of {@code [0, 1]}
*/
public LineCorrelationCrossover(final double probability, final Correlations correlations) {
this(probability, 0, correlations);
public LineCorrelationCrossover(final double probability, final Correlations correlations, final CustomCodec<G> codec) {
this(probability, 0, correlations, codec);
}
@Override
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlation;
import de.evoal.core.api.correlations.Correlation;
import io.jenetics.util.RandomRegistry;
import lombok.Data;
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlations;
import de.evoal.core.api.correlations.Correlations;
import de.evoal.core.ea.api.codec.CustomCodec;
import io.jenetics.Gene;
import io.jenetics.util.MSeq;
......@@ -22,8 +23,8 @@ public class MultiPointCorrelationCrossover<
* @throws IllegalArgumentException if the {@code probability} is not in the
* valid range of {@code [0, 1]} or {@code n &lt; 1}.
*/
public MultiPointCorrelationCrossover(final double probability, final int n, final Correlations correlations) {
super(probability, correlations);
public MultiPointCorrelationCrossover(final double probability, final int n, final Correlations correlations, final CustomCodec<G> codec) {
super(probability, correlations, codec);
if (n < 1) {
throw new IllegalArgumentException(format(
"n must be at least 1 but was %d.", n
......@@ -39,8 +40,8 @@ public class MultiPointCorrelationCrossover<
* @throws IllegalArgumentException if the {@code probability} is not in the
* valid range of {@code [0, 1]}.
*/
public MultiPointCorrelationCrossover(final double probability, final Correlations correlations) {
this(probability, 2, correlations);
public MultiPointCorrelationCrossover(final double probability, final Correlations correlations, final CustomCodec<G> codec) {
this(probability, 2, correlations, codec);
}
/**
......@@ -50,16 +51,16 @@ public class MultiPointCorrelationCrossover<
* @param n the number of crossover points.
* @throws IllegalArgumentException if {@code n &lt; 1}.
*/
public MultiPointCorrelationCrossover(final int n, final Correlations correlations) {
this(0.05, n, correlations);
public MultiPointCorrelationCrossover(final int n, final Correlations correlations, final CustomCodec<G> codec) {
this(0.05, n, correlations, codec);
}
/**
* Create a new crossover instance with two crossover points and crossover
* probability 0.05.
*/
public MultiPointCorrelationCrossover(final Correlations correlations) {
this(0.05, 2, correlations);
public MultiPointCorrelationCrossover(final Correlations correlations, final CustomCodec<G> codec) {
this(0.05, 2, correlations, codec);
}
/**
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlation;
import de.evoal.core.api.correlations.Correlation;
import io.jenetics.internal.math.Subset;
import io.jenetics.util.RandomRegistry;
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlations;
import de.evoal.core.api.correlations.Correlations;
import de.evoal.core.ea.api.codec.CustomCodec;
import io.jenetics.EnumGene;
import io.jenetics.util.MSeq;
......@@ -12,8 +13,8 @@ public class PartiallyMatchedCorrelationCrossover<
> extends CorrelationCrossover<EnumGene<T>, C, PartiallyMatchedCorrelationCrossoverMemento>
{
public PartiallyMatchedCorrelationCrossover(final double probability, final Correlations correlations) {
super(probability, correlations);
public PartiallyMatchedCorrelationCrossover(final double probability, final Correlations correlations, final CustomCodec<EnumGene<T>> codec) {
super(probability, correlations, codec);
}
@Override
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlation;
import de.evoal.core.api.correlations.Correlation;
import io.jenetics.internal.math.Subset;
import io.jenetics.util.RandomRegistry;
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlations;
import de.evoal.core.api.correlations.Correlations;
import de.evoal.core.ea.api.codec.CustomCodec;
import io.jenetics.Gene;
import io.jenetics.util.MSeq;
......@@ -20,8 +21,8 @@ public class SinglePointCorrelationCrossover<
* @throws IllegalArgumentException if the {@code probability} is not in the
* valid range of {@code [0, 1]}.
*/
public SinglePointCorrelationCrossover(final double probability, final Correlations correlations) {
super(probability, 1, correlations);
public SinglePointCorrelationCrossover(final double probability, final Correlations correlations, final CustomCodec<G> codec) {
super(probability, 1, correlations, codec);
}
@Override
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.ea.api.correlations.Correlation;
import de.evoal.core.api.correlations.Correlation;
import io.jenetics.util.RandomRegistry;
import lombok.Getter;
import lombok.Setter;
......
package de.evoal.core.ea.main.alterer.crossover;
import de.evoal.core.api.utils.Requirements;
import de.evoal.core.ea.api.correlations.Correlations;
import de.evoal.core.api.correlations.Correlations;
import de.evoal.core.ea.api.codec.CustomCodec;
import io.jenetics.Gene;
import io.jenetics.util.MSeq;
......@@ -28,9 +29,10 @@ public class UniformCorrelationCrossover<
public UniformCorrelationCrossover(
final double crossoverProbability,
final double swapProbability,
final Correlations correlations
final Correlations correlations,
final CustomCodec<G> codec
) {
super(crossoverProbability, correlations);
super(crossoverProbability, correlations, codec);
Requirements.requireProbability(swapProbability);
_swapProbability = swapProbability;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment