GPUEAConfiguration.java

1
package net.bmahe.genetics4j.gpu.spec;
2
3
import java.util.Arrays;
4
5
import org.immutables.value.Value;
6
7
import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
8
import net.bmahe.genetics4j.core.spec.chromosome.ChromosomeSpec;
9
import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
10
import net.bmahe.genetics4j.gpu.spec.fitness.OpenCLFitness;
11
12
/**
13
 * GPU-specific evolutionary algorithm configuration that extends the core EA framework with OpenCL capabilities.
14
 * 
15
 * <p>GPUEAConfiguration extends {@link AbstractEAConfiguration} to include GPU-specific settings required for
16
 * OpenCL-based fitness evaluation. This configuration combines traditional EA parameters (selection, mutation,
17
 * crossover) with GPU-specific components like OpenCL programs and specialized fitness functions.
18
 * 
19
 * <p>Key GPU-specific additions:
20
 * <ul>
21
 * <li><strong>OpenCL Program</strong>: Specifies kernel source code, build options, and compilation settings</li>
22
 * <li><strong>GPU Fitness Function</strong>: Specialized fitness implementation that leverages OpenCL execution</li>
23
 * <li><strong>Kernel Integration</strong>: Automatic coordination between EA framework and OpenCL kernels</li>
24
 * </ul>
25
 * 
26
 * <p>Configuration workflow:
27
 * <ol>
28
 * <li><strong>Core EA setup</strong>: Define chromosome specs, selection policies, mutation rates</li>
29
 * <li><strong>OpenCL program</strong>: Specify kernel source code and compilation options</li>
30
 * <li><strong>GPU fitness</strong>: Implement fitness evaluation using OpenCL primitives</li>
31
 * <li><strong>Integration</strong>: Combine components into complete GPU-accelerated EA system</li>
32
 * </ol>
33
 * 
34
 * <p>Example configuration:
35
 * 
36
 * <pre>{@code
37
 * // Define OpenCL program with kernel source
38
 * Program optimizationKernels = Program.ofResource("/kernels/tsp_fitness.cl")
39
 * 		.withBuildOption("-DCITY_COUNT=100")
40
 * 		.withBuildOption("-DLOCAL_SIZE=256");
41
 * 
42
 * // Create GPU-specific fitness function
43
 * OpenCLFitness<Double> gpuFitness = new TSPGPUFitness();
44
 * 
45
 * // Build complete GPU EA configuration
46
 * GPUEAConfiguration<Double> config = GPUEAConfiguration.<Double>builder()
47
 * 		// Core EA components
48
 * 		.chromosomeSpecs(intPermutationSpec)
49
 * 		.parentSelectionPolicy(Tournament.of(3))
50
 * 		.combinationPolicy(OrderCrossover.build())
51
 * 		.mutationPolicies(SwapMutation.of(0.1))
52
 * 		.replacementStrategy(Elitism.builder()
53
 * 				.offspringRatio(0.8)
54
 * 				.build())
55
 * 
56
 * 		// GPU-specific components
57
 * 		.program(optimizationKernels)
58
 * 		.fitness(gpuFitness)
59
 * 		.build();
60
 * }</pre>
61
 * 
62
 * <p>OpenCL integration benefits:
63
 * <ul>
64
 * <li><strong>Performance</strong>: Massive parallelism for fitness evaluation</li>
65
 * <li><strong>Scalability</strong>: Handle large populations efficiently</li>
66
 * <li><strong>Hardware utilization</strong>: Leverage GPU compute units</li>
67
 * <li><strong>Memory bandwidth</strong>: High-throughput data processing</li>
68
 * </ul>
69
 * 
70
 * <p>Configuration validation:
71
 * <ul>
72
 * <li><strong>Program completeness</strong>: Ensures all required kernels are specified</li>
73
 * <li><strong>Fitness compatibility</strong>: Validates fitness function matches program interface</li>
74
 * <li><strong>Resource requirements</strong>: Checks memory and compute requirements are feasible</li>
75
 * </ul>
76
 * 
77
 * <p>Builder pattern usage:
78
 * <ul>
79
 * <li><strong>Type safety</strong>: Generic builder ensures fitness type consistency</li>
80
 * <li><strong>Validation</strong>: Build-time validation of configuration completeness</li>
81
 * <li><strong>Convenience methods</strong>: Simplified specification of chromosome and mutation arrays</li>
82
 * <li><strong>Immutability</strong>: Thread-safe configuration objects</li>
83
 * </ul>
84
 * 
85
 * @param <T> the type of fitness values produced by the GPU fitness function
86
 * @see AbstractEAConfiguration
87
 * @see Program
88
 * @see OpenCLFitness
89
 * @see net.bmahe.genetics4j.gpu.GPUEASystemFactory
90
 */
91
@Value.Immutable
92
public abstract class GPUEAConfiguration<T extends Comparable<T>> extends AbstractEAConfiguration<T> {
93
94
	/**
95
	 * Returns the OpenCL program specification containing kernel source code and build options.
96
	 * 
97
	 * <p>The program defines the OpenCL kernels that will be compiled and executed on GPU devices for fitness
98
	 * evaluation. This includes source code, build flags, and kernel definitions required for the evolutionary algorithm
99
	 * execution.
100
	 * 
101
	 * @return the OpenCL program specification for kernel compilation
102
	 */
103
	public abstract Program program();
104
105
	/**
106
	 * Returns the GPU-specific fitness function that implements evaluation using OpenCL.
107
	 * 
108
	 * <p>The fitness function encapsulates the logic for evaluating individual solutions using GPU acceleration. It
109
	 * coordinates data transfer, kernel execution, and result extraction for efficient parallel fitness computation.
110
	 * 
111
	 * @return the OpenCL fitness function for GPU-accelerated evaluation
112
	 */
113
	public abstract OpenCLFitness<T> fitness();
114
115
	public static class Builder<T extends Comparable<T>> extends ImmutableGPUEAConfiguration.Builder<T> {
116
117
		public final GPUEAConfiguration.Builder<T> chromosomeSpecs(final ChromosomeSpec... elements) {
118 4 1. chromosomeSpecs : removed call to java/util/Arrays::asList → NO_COVERAGE
2. chromosomeSpecs : removed call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::chromosomeSpecs → NO_COVERAGE
3. chromosomeSpecs : replaced call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::chromosomeSpecs with receiver → NO_COVERAGE
4. chromosomeSpecs : replaced return value with null for net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::chromosomeSpecs → NO_COVERAGE
			return this.chromosomeSpecs(Arrays.asList(elements));
119
		}
120
121
		public final GPUEAConfiguration.Builder<T> mutationPolicies(final MutationPolicy... elements) {
122 4 1. mutationPolicies : replaced call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::mutationPolicies with receiver → NO_COVERAGE
2. mutationPolicies : replaced return value with null for net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::mutationPolicies → NO_COVERAGE
3. mutationPolicies : removed call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::mutationPolicies → NO_COVERAGE
4. mutationPolicies : removed call to java/util/Arrays::asList → NO_COVERAGE
			return this.mutationPolicies(Arrays.asList(elements));
123
		}
124
	}
125
126
	/**
127
	 * Creates a new builder for constructing GPU EA configurations.
128
	 * 
129
	 * <p>The builder provides a fluent interface for specifying both core EA components and GPU-specific settings. Type
130
	 * safety is ensured through generic parameterization.
131
	 * 
132
	 * @param <U> the type of fitness values for the EA configuration
133
	 * @return a new builder instance for creating GPU EA configurations
134
	 */
135
	public static <U extends Comparable<U>> Builder<U> builder() {
136 2 1. builder : removed call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::<init> → NO_COVERAGE
2. builder : replaced return value with null for net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration::builder → NO_COVERAGE
		return new Builder<>();
137
	}
138
}

Mutations

118

1.1
Location : chromosomeSpecs
Killed by : none
removed call to java/util/Arrays::asList → NO_COVERAGE

2.2
Location : chromosomeSpecs
Killed by : none
removed call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::chromosomeSpecs → NO_COVERAGE

3.3
Location : chromosomeSpecs
Killed by : none
replaced call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::chromosomeSpecs with receiver → NO_COVERAGE

4.4
Location : chromosomeSpecs
Killed by : none
replaced return value with null for net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::chromosomeSpecs → NO_COVERAGE

122

1.1
Location : mutationPolicies
Killed by : none
replaced call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::mutationPolicies with receiver → NO_COVERAGE

2.2
Location : mutationPolicies
Killed by : none
replaced return value with null for net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::mutationPolicies → NO_COVERAGE

3.3
Location : mutationPolicies
Killed by : none
removed call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::mutationPolicies → NO_COVERAGE

4.4
Location : mutationPolicies
Killed by : none
removed call to java/util/Arrays::asList → NO_COVERAGE

136

1.1
Location : builder
Killed by : none
removed call to net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration$Builder::<init> → NO_COVERAGE

2.2
Location : builder
Killed by : none
replaced return value with null for net/bmahe/genetics4j/gpu/spec/GPUEAConfiguration::builder → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.20.3