View Javadoc
1   package net.bmahe.genetics4j.core.spec.chromosome;
2   
3   import java.util.Objects;
4   
5   import org.apache.commons.lang3.Validate;
6   import org.immutables.value.Value;
7   
8   import net.bmahe.genetics4j.core.spec.statistics.distributions.Distribution;
9   import net.bmahe.genetics4j.core.spec.statistics.distributions.UniformDistribution;
10  
11  @Value.Immutable
12  public abstract class FloatChromosomeSpec implements ChromosomeSpec {
13  
14  	@Value.Parameter
15  	public abstract int size();
16  
17  	@Value.Parameter
18  	public abstract float minValue();
19  
20  	@Value.Parameter
21  	public abstract float maxValue();
22  
23  	@Value.Default
24  	public Distribution distribution() {
25  		return UniformDistribution.build();
26  	}
27  
28  	@Value.Check
29  	protected void check() {
30  		Validate.isTrue(size() > 0);
31  		Validate.isTrue(minValue() <= maxValue());
32  	}
33  
34  	public static class Builder extends ImmutableFloatChromosomeSpec.Builder {
35  	}
36  
37  	/**
38  	 * Construct a new immutable {@code FloatChromosomeSpec} instance.
39  	 * 
40  	 * @param size     The value for the {@code size} attribute
41  	 * @param minValue The value for the {@code minValue} attribute
42  	 * @param maxValue The value for the {@code maxValue} attribute
43  	 * @return An immutable FloatChromosomeSpec instance
44  	 */
45  
46  	public static FloatChromosomeSpec of(final int size, final float minValue, final float maxValue) {
47  		return ImmutableFloatChromosomeSpec.of(size, minValue, maxValue);
48  	}
49  
50  	public static FloatChromosomeSpec of(final int size, final float minValue, final float maxValue,
51  			final Distribution distribution) {
52  		Objects.requireNonNull(distribution);
53  
54  		final var floatChromosomeSpecBuilder = new ImmutableFloatChromosomeSpec.Builder();
55  
56  		floatChromosomeSpecBuilder.size(size).minValue(minValue).maxValue(maxValue).distribution(distribution);
57  
58  		return floatChromosomeSpecBuilder.build();
59  	}
60  }