DoubleChromosomeSpec.java
package net.bmahe.genetics4j.core.spec.chromosome;
import org.apache.commons.lang3.Validate;
import org.immutables.value.Value;
import net.bmahe.genetics4j.core.spec.statistics.distributions.Distribution;
import net.bmahe.genetics4j.core.spec.statistics.distributions.UniformDistribution;
@Value.Immutable
public abstract class DoubleChromosomeSpec implements ChromosomeSpec {
@Value.Parameter
public abstract int size();
@Value.Parameter
public abstract double minValue();
@Value.Parameter
public abstract double maxValue();
@Value.Default
public Distribution distribution() {
return UniformDistribution.build();
}
@Value.Check
protected void check() {
Validate.isTrue(size() > 0);
Validate.isTrue(minValue() <= maxValue());
}
public static class Builder extends ImmutableDoubleChromosomeSpec.Builder {
}
/**
* Construct a new immutable {@code DoubleChromosomeSpec} instance.
*
* @param size The value for the {@code size} attribute
* @param minValue The value for the {@code minValue} attribute
* @param maxValue The value for the {@code maxValue} attribute
* @return An immutable DoubleChromosomeSpec instance
*/
public static DoubleChromosomeSpec of(final int size, final double minValue, final double maxValue) {
return ImmutableDoubleChromosomeSpec.of(size, minValue, maxValue);
}
public static DoubleChromosomeSpec of(final int size, final double minValue, final double maxValue,
final Distribution distribution) {
Validate.notNull(distribution);
final var doubleChromosomeSpecBuilder = new ImmutableDoubleChromosomeSpec.Builder();
doubleChromosomeSpecBuilder.size(size).minValue(minValue).maxValue(maxValue).distribution(distribution);
return doubleChromosomeSpecBuilder.build();
}
}