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

Implementing a new numeric comparator to work with roulette wheel selector. #30

parent f5e62d42
No related branches found
No related tags found
No related merge requests found
Pipeline #253782 passed
package de.evoal.core.main.comparator;
import de.evoal.core.api.optimisation.OptimisationValue;
import de.evoal.core.api.optimisation.OptimisationValueComparator;
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 javax.enterprise.context.Dependent;
import javax.inject.Named;
@Dependent
@Named("numeric-comparator")
public class NumericOptimisationComparator implements OptimisationValueComparator {
@Override
public OptimisationValue toValue(final double[] fitnessValues) {
return NumericOptimisationValue.of(fitnessValues);
}
@Override
public OptimisationValueComparator init(final Instance config) {
return this;
}
}
package de.evoal.core.main.comparator;
import de.evoal.core.api.optimisation.OptimisationValue;
import de.evoal.core.api.utils.Requirements;
import lombok.Getter;
import lombok.NonNull;
import java.util.Arrays;
public class NumericOptimisationValue extends Number implements OptimisationValue {
@Getter
private final Number fitnessValue;
private NumericOptimisationValue(final @NonNull Number[] fitnessValues) {
Requirements.requireEqual(fitnessValues.length, 1);
this.fitnessValue = fitnessValues[0];
}
public static OptimisationValue of(final double [] fitnessValues) {
return new NumericOptimisationValue(
Arrays.stream(fitnessValues)
.mapToObj(Double::valueOf)
.toArray(s -> new Number [s]));
}
@Override
public int compareTo(final OptimisationValue other) {
if(!(other instanceof NumericOptimisationValue)) {
throw new IllegalArgumentException("Only allowed to compare NumericOptimisationValue");
}
return Double.compare(this.fitnessValue.doubleValue(), ((NumericOptimisationValue) other).fitnessValue.doubleValue());
}
@Override
public String toString() {
return "NumericOptimisationValue [" + fitnessValue + "]";
}
@Override
public Object[] toStatistics() {
return new Object [] {fitnessValue};
}
@Override
public int intValue() {
return fitnessValue.intValue();
}
@Override
public long longValue() {
return fitnessValue.longValue();
}
@Override
public float floatValue() {
return floatValue();
}
@Override
public double doubleValue() {
return fitnessValue.doubleValue();
}
}
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