1 package net.bmahe.genetics4j.gp.chromosomes.factory;
2
3 import java.util.Objects;
4
5 import net.bmahe.genetics4j.core.chromosomes.TreeChromosome;
6 import net.bmahe.genetics4j.core.chromosomes.TreeNode;
7 import net.bmahe.genetics4j.core.chromosomes.factory.ChromosomeFactory;
8 import net.bmahe.genetics4j.core.spec.chromosome.ChromosomeSpec;
9 import net.bmahe.genetics4j.gp.Operation;
10 import net.bmahe.genetics4j.gp.program.Program;
11 import net.bmahe.genetics4j.gp.program.ProgramGenerator;
12 import net.bmahe.genetics4j.gp.spec.chromosome.ProgramTreeChromosomeSpec;
13
14 public class ProgramTreeChromosomeFactory implements ChromosomeFactory<TreeChromosome<Operation<?>>> {
15
16 private final ProgramGenerator programGenerator;
17
18 public ProgramTreeChromosomeFactory(final ProgramGenerator _programGenerator) {
19 Objects.requireNonNull(_programGenerator);
20
21 this.programGenerator = _programGenerator;
22 }
23
24 @Override
25 public boolean canHandle(final ChromosomeSpec chromosomeSpec) {
26 Objects.requireNonNull(chromosomeSpec);
27
28 return chromosomeSpec instanceof ProgramTreeChromosomeSpec;
29 }
30
31 @Override
32 public TreeChromosome<Operation<?>> generate(final ChromosomeSpec chromosomeSpec) {
33 Objects.requireNonNull(chromosomeSpec);
34
35 final ProgramTreeChromosomeSpec ptcs = (ProgramTreeChromosomeSpec) chromosomeSpec;
36 final Program program = ptcs.program();
37
38 final TreeNode<Operation<?>> generatedProgram = programGenerator.generate(program);
39 return new TreeChromosome<>(generatedProgram);
40 }
41 }