View Javadoc
1   package net.bmahe.genetics4j.gp.combination;
2   
3   import java.util.random.RandomGenerator;
4   
5   import org.apache.commons.lang3.Validate;
6   import org.apache.logging.log4j.LogManager;
7   import org.apache.logging.log4j.Logger;
8   
9   import net.bmahe.genetics4j.core.combination.ChromosomeCombinator;
10  import net.bmahe.genetics4j.core.combination.ChromosomeCombinatorHandler;
11  import net.bmahe.genetics4j.core.combination.ChromosomeCombinatorResolver;
12  import net.bmahe.genetics4j.core.spec.chromosome.ChromosomeSpec;
13  import net.bmahe.genetics4j.core.spec.combination.CombinationPolicy;
14  import net.bmahe.genetics4j.gp.spec.chromosome.ProgramTreeChromosomeSpec;
15  import net.bmahe.genetics4j.gp.spec.combination.ProgramRandomCombine;
16  
17  public class ProgramRandomCombineHandler<T extends Comparable<T>> implements ChromosomeCombinatorHandler<T> {
18  	final static public Logger logger = LogManager.getLogger(ProgramRandomCombineHandler.class);
19  
20  	final RandomGenerator randomGenerator;
21  
22  	public ProgramRandomCombineHandler(final RandomGenerator _randomGenerator) {
23  		Validate.notNull(_randomGenerator);
24  
25  		this.randomGenerator = _randomGenerator;
26  	}
27  
28  	@Override
29  	public boolean canHandle(final ChromosomeCombinatorResolver<T> chromosomeCombinatorResolver,
30  			final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {
31  		Validate.notNull(chromosomeCombinatorResolver);
32  		Validate.notNull(combinationPolicy);
33  		Validate.notNull(chromosome);
34  
35  		return combinationPolicy instanceof ProgramRandomCombine && chromosome instanceof ProgramTreeChromosomeSpec;
36  	}
37  
38  	@Override
39  	public ChromosomeCombinator<T> resolve(final ChromosomeCombinatorResolver<T> chromosomeCombinatorResolver,
40  			final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosomeSpec) {
41  		Validate.notNull(chromosomeCombinatorResolver);
42  		Validate.notNull(combinationPolicy);
43  		Validate.notNull(chromosomeSpec);
44  		Validate.isInstanceOf(ProgramTreeChromosomeSpec.class,
45  				chromosomeSpec,
46  				"This combinator does not support chromosome specs %s",
47  				chromosomeSpec);
48  
49  		final ProgramTreeChromosomeSpec programTreeChromosomeSpec = (ProgramTreeChromosomeSpec) chromosomeSpec;
50  
51  		return new ProgramChromosomeCombinator<T>(randomGenerator);
52  	}
53  }