1 package net.bmahe.genetics4j.neat.spec.mutation;
2
3 import org.apache.commons.lang3.Validate;
4 import org.immutables.value.Value;
5
6 import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
7 import net.bmahe.genetics4j.core.spec.statistics.distributions.Distribution;
8 import net.bmahe.genetics4j.core.spec.statistics.distributions.NormalDistribution;
9 import net.bmahe.genetics4j.core.spec.statistics.distributions.UniformDistribution;
10
11 @Value.Immutable
12 public abstract class NeatConnectionWeight implements MutationPolicy {
13
14 @Value.Default
15 public double populationMutationProbability() {
16 return 0.80;
17 }
18
19 @Value.Default
20 public double perturbationRatio() {
21 return 0.90;
22 }
23
24 @Value.Default
25 public Distribution perturbationDistribution() {
26 return NormalDistribution.of(0.0, 1.0);
27 }
28
29 @Value.Default
30 public Distribution newValuesDistribution() {
31 return UniformDistribution.build();
32 }
33
34 @Value.Check
35 protected void check() {
36 Validate.inclusiveBetween(0.0, 1.0, populationMutationProbability());
37 }
38
39 public static class Builder extends ImmutableNeatConnectionWeight.Builder {
40 }
41
42 public static NeatConnectionWeight build() {
43 return new Builder().build();
44 }
45
46 public static Builder builder() {
47 return new Builder();
48 }
49 }