View Javadoc
1   package net.bmahe.genetics4j.core.util;
2   
3   import java.util.List;
4   import java.util.Objects;
5   
6   import net.bmahe.genetics4j.core.chromosomes.Chromosome;
7   import net.bmahe.genetics4j.core.mutation.chromosome.ChromosomeMutationHandler;
8   import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
9   import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
10  import net.bmahe.genetics4j.core.spec.chromosome.ChromosomeSpec;
11  import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
12  
13  public class ChromosomeResolverUtils {
14  
15  	public static <T extends Comparable<T>> ChromosomeMutationHandler<? extends Chromosome> findMatchingChromosomeMutationPolicyHandler(
16  			final AbstractEAExecutionContext<T> eaExecutionContext, final MutationPolicy mutationPolicy,
17  			final ChromosomeSpec chromosomeSpec) {
18  		Objects.requireNonNull(eaExecutionContext);
19  		Objects.requireNonNull(mutationPolicy);
20  		Objects.requireNonNull(chromosomeSpec);
21  
22  		final List<ChromosomeMutationHandler<? extends Chromosome>> chromosomeMutationPolicyHandlers = eaExecutionContext
23  				.chromosomeMutationPolicyHandlers();
24  
25  		return chromosomeMutationPolicyHandlers.stream()
26  				.dropWhile(sph -> sph.canHandle(mutationPolicy, chromosomeSpec) == false)
27  				.findFirst()
28  				.orElseThrow(
29  						() -> new IllegalStateException(
30  								"Could not find suitable chromosome mutation policy handler for policy: " + mutationPolicy
31  										+ " and chromosome spec: " + chromosomeSpec));
32  	}
33  
34  	public static <T extends Comparable<T>> ChromosomeMutationHandler<? extends Chromosome>[] resolveChromosomeMutationHandlers(
35  			final AbstractEAExecutionContext<T> eaExecutionContext, final AbstractEAConfiguration<T> eaConfiguration,
36  			final MutationPolicy mutationPolicy) {
37  		Objects.requireNonNull(eaExecutionContext);
38  		Objects.requireNonNull(eaConfiguration);
39  		Objects.requireNonNull(mutationPolicy);
40  
41  		final ChromosomeMutationHandler<? extends Chromosome>[] chromosomePolicyHandlers = new ChromosomeMutationHandler[eaConfiguration
42  				.chromosomeSpecs()
43  				.size()];
44  		final List<ChromosomeSpec> chromosomeSpecs = eaConfiguration.chromosomeSpecs();
45  		for (int i = 0; i < chromosomeSpecs.size(); i++) {
46  			final ChromosomeSpec chromosomeSpec = chromosomeSpecs.get(i);
47  			chromosomePolicyHandlers[i] = findMatchingChromosomeMutationPolicyHandler(
48  					eaExecutionContext,
49  					mutationPolicy,
50  					chromosomeSpec);
51  		}
52  
53  		return chromosomePolicyHandlers;
54  	}
55  }