IntChromosomeSpec.java

1
package net.bmahe.genetics4j.core.spec.chromosome;
2
3
import org.apache.commons.lang3.Validate;
4
import org.immutables.value.Value;
5
6
/**
7
 * Specification for integer array chromosomes in evolutionary algorithms.
8
 * 
9
 * <p>IntChromosomeSpec defines the blueprint for creating chromosomes that represent solutions as arrays of integer
10
 * values. This is one of the most commonly used chromosome types, suitable for discrete optimization problems,
11
 * permutation problems, and integer programming.
12
 * 
13
 * <p>The specification includes:
14
 * <ul>
15
 * <li><strong>Size</strong>: The number of integer genes in the chromosome</li>
16
 * <li><strong>Value range</strong>: Minimum and maximum bounds for each integer value</li>
17
 * <li><strong>Validation</strong>: Automatic constraint checking for valid parameters</li>
18
 * </ul>
19
 * 
20
 * <p>Common use cases for integer chromosomes:
21
 * <ul>
22
 * <li><strong>Combinatorial optimization</strong>: Knapsack, bin packing, scheduling problems</li>
23
 * <li><strong>Parameter optimization</strong>: Integer hyperparameters, configuration values</li>
24
 * <li><strong>Permutation problems</strong>: Traveling salesman, job scheduling (with appropriate operators)</li>
25
 * <li><strong>Graph problems</strong>: Node selection, path optimization, network design</li>
26
 * <li><strong>Resource allocation</strong>: Assignment problems, load balancing</li>
27
 * </ul>
28
 * 
29
 * <p>The integer values in the chromosome are constrained to the specified range [minValue, maxValue], inclusive on
30
 * both ends. The genetic operators (crossover and mutation) respect these constraints and ensure that offspring remain
31
 * within valid bounds.
32
 * 
33
 * <p>Example usage:
34
 * 
35
 * <pre>{@code
36
 * // Create specification for 10 integers in range [0, 100]
37
 * IntChromosomeSpec spec = IntChromosomeSpec.of(10, 0, 100);
38
 * 
39
 * // Create specification for permutation of 20 items (values 0-19)
40
 * IntChromosomeSpec permutationSpec = IntChromosomeSpec.of(20, 0, 19);
41
 * 
42
 * // Use in EA configuration
43
 * EAConfiguration<Double> config = EAConfigurationBuilder.<Double>builder()
44
 * 		.chromosomeSpecs(spec)
45
 * 		.parentSelectionPolicy(Tournament.of(3))
46
 * 		.build();
47
 * }</pre>
48
 * 
49
 * @see net.bmahe.genetics4j.core.chromosomes.IntChromosome
50
 * @see net.bmahe.genetics4j.core.chromosomes.factory.IntChromosomeFactory
51
 * @see ChromosomeSpec
52
 */
53
@Value.Immutable
54
public abstract class IntChromosomeSpec implements ChromosomeSpec {
55
56
	/**
57
	 * Returns the number of integer values in chromosomes created from this specification.
58
	 * 
59
	 * @return the chromosome size, always positive
60
	 */
61
	@Value.Parameter
62
	public abstract int size();
63
64
	/**
65
	 * Returns the minimum value (inclusive) for integer alleles in the chromosome.
66
	 * 
67
	 * @return the minimum allowed integer value
68
	 */
69
	@Value.Parameter
70
	public abstract int minValue();
71
72
	/**
73
	 * Returns the maximum value (inclusive) for integer alleles in the chromosome.
74
	 * 
75
	 * @return the maximum allowed integer value
76
	 */
77
	@Value.Parameter
78
	public abstract int maxValue();
79
80
	@Value.Check
81
	protected void check() {
82
		Validate.isTrue(size() > 0);
83
		Validate.isTrue(minValue() <= maxValue());
84
	}
85
86
	public static class Builder extends ImmutableIntChromosomeSpec.Builder {
87
	}
88
89
	/**
90
	 * Creates a new integer chromosome specification with the given parameters.
91
	 * 
92
	 * @param size     the number of integer values in the chromosome, must be positive
93
	 * @param minValue the minimum value (inclusive) for each integer in the chromosome
94
	 * @param maxValue the maximum value (inclusive) for each integer in the chromosome
95
	 * @return a new IntChromosomeSpec instance with the specified parameters
96
	 * @throws IllegalArgumentException if size is not positive or if minValue > maxValue
97
	 */
98
	public static IntChromosomeSpec of(final int size, final int minValue, final int maxValue) {
99 2 1. of : replaced return value with null for net/bmahe/genetics4j/core/spec/chromosome/IntChromosomeSpec::of → KILLED
2. of : removed call to net/bmahe/genetics4j/core/spec/chromosome/ImmutableIntChromosomeSpec::of → KILLED
		return ImmutableIntChromosomeSpec.of(size, minValue, maxValue);
100
	}
101
102
}

Mutations

99

1.1
Location : of
Killed by : net.bmahe.genetics4j.core.chromosomes.factory.IntChromosomeFactoryTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.chromosomes.factory.IntChromosomeFactoryTest]/[method:generateTest()]
replaced return value with null for net/bmahe/genetics4j/core/spec/chromosome/IntChromosomeSpec::of → KILLED

2.2
Location : of
Killed by : net.bmahe.genetics4j.core.chromosomes.factory.IntChromosomeFactoryTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.chromosomes.factory.IntChromosomeFactoryTest]/[method:generateTest()]
removed call to net/bmahe/genetics4j/core/spec/chromosome/ImmutableIntChromosomeSpec::of → KILLED

Active mutators

Tests examined


Report generated by PIT 1.20.3