1 package net.bmahe.genetics4j.core.spec.chromosome;
2
3 import java.util.Objects;
4
5 import org.apache.commons.lang3.Validate;
6 import org.immutables.value.Value;
7
8 import net.bmahe.genetics4j.core.spec.statistics.distributions.Distribution;
9 import net.bmahe.genetics4j.core.spec.statistics.distributions.UniformDistribution;
10
11 @Value.Immutable
12 public abstract class FloatChromosomeSpec implements ChromosomeSpec {
13
14 @Value.Parameter
15 public abstract int size();
16
17 @Value.Parameter
18 public abstract float minValue();
19
20 @Value.Parameter
21 public abstract float maxValue();
22
23 @Value.Default
24 public Distribution distribution() {
25 return UniformDistribution.build();
26 }
27
28 @Value.Check
29 protected void check() {
30 Validate.isTrue(size() > 0);
31 Validate.isTrue(minValue() <= maxValue());
32 }
33
34 public static class Builder extends ImmutableFloatChromosomeSpec.Builder {
35 }
36
37
38
39
40
41
42
43
44
45
46 public static FloatChromosomeSpec of(final int size, final float minValue, final float maxValue) {
47 return ImmutableFloatChromosomeSpec.of(size, minValue, maxValue);
48 }
49
50 public static FloatChromosomeSpec of(final int size, final float minValue, final float maxValue,
51 final Distribution distribution) {
52 Objects.requireNonNull(distribution);
53
54 final var floatChromosomeSpecBuilder = new ImmutableFloatChromosomeSpec.Builder();
55
56 floatChromosomeSpecBuilder.size(size).minValue(minValue).maxValue(maxValue).distribution(distribution);
57
58 return floatChromosomeSpecBuilder.build();
59 }
60 }