| 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 2.2 |