1 package net.bmahe.genetics4j.core.spec.mutation;
2
3 import org.apache.commons.lang3.Validate;
4 import org.immutables.value.Value;
5
6 @Value.Immutable
7 public abstract class SwapMutation implements MutationPolicy {
8
9 @Value.Parameter
10 public abstract double populationMutationProbability();
11
12 @Value.Parameter
13 public abstract int numSwap();
14
15 @Value.Parameter
16 public abstract boolean isNumSwapFixed();
17
18 @Value.Check
19 protected void check() {
20 Validate.inclusiveBetween(0.0, 1.0, populationMutationProbability());
21 Validate.isTrue(numSwap() > 0);
22 }
23
24
25
26
27
28
29
30
31
32
33 public static SwapMutation of(double populationMutationProbability, int numSwap, boolean isNumSwapFixed) {
34 return ImmutableSwapMutation.of(populationMutationProbability, numSwap, isNumSwapFixed);
35 }
36
37
38
39
40
41
42
43
44 public static SwapMutation ofFixedNumSwap(double populationMutationProbability, int numSwap) {
45 return ImmutableSwapMutation.of(populationMutationProbability, numSwap, true);
46 }
47
48 }