1 package net.bmahe.genetics4j.core.spec.mutation;
2
3 import java.util.Objects;
4
5 import org.apache.commons.lang3.Validate;
6 import org.immutables.value.Value;
7
8
9
10
11
12
13
14 @Value.Immutable
15 public abstract class RepeatedMutation implements MutationPolicy {
16
17 @Value.Parameter
18 public abstract int minRepetitions();
19
20 @Value.Parameter
21 public abstract int maxRepetitions();
22
23 @Value.Parameter
24 public abstract MutationPolicy mutationPolicy();
25
26 @Value.Check
27 protected void check() {
28 Validate.isTrue(minRepetitions() > 0);
29 Validate.isTrue(maxRepetitions() >= minRepetitions());
30 Objects.requireNonNull(mutationPolicy());
31 }
32
33 public static class Builder extends ImmutableRepeatedMutation.Builder {
34 }
35
36 public static Builder builder() {
37 return new Builder();
38 }
39
40
41
42
43
44
45
46
47 public static RepeatedMutation ofExactly(final int repetitions, final MutationPolicy mutationPolicy) {
48 return ImmutableRepeatedMutation.of(repetitions, repetitions, mutationPolicy);
49 }
50
51
52
53
54
55
56
57
58
59 public static RepeatedMutation ofUpTo(final int maxRepetitions, final MutationPolicy mutationPolicy) {
60 return ImmutableRepeatedMutation.of(1, maxRepetitions, mutationPolicy);
61 }
62
63
64
65
66
67
68
69
70
71 public static RepeatedMutation of(final int minRepetitions, final int maxRepetitions,
72 final MutationPolicy mutationPolicy) {
73 return ImmutableRepeatedMutation.of(minRepetitions, maxRepetitions, mutationPolicy);
74 }
75 }