1 package net.bmahe.genetics4j.gp.utils;
2
3 import java.util.List;
4 import java.util.Objects;
5
6 import net.bmahe.genetics4j.core.chromosomes.TreeChromosome;
7 import net.bmahe.genetics4j.core.chromosomes.TreeNode;
8 import net.bmahe.genetics4j.gp.Operation;
9
10 public class ProgramUtils {
11
12 private ProgramUtils() {
13 }
14
15 public static Object execute(final TreeChromosome<Operation<?>> treeChromosome, final Object[] input) {
16 Objects.requireNonNull(treeChromosome);
17
18 final TreeNode<Operation<?>> root = treeChromosome.getRoot();
19
20 return execute(root, input);
21 }
22
23 public static Object execute(final TreeNode<Operation<?>> node, final Object[] input) {
24 Objects.requireNonNull(node);
25
26 final Operation operation = node.getData();
27 final List<TreeNode<Operation<?>>> children = node.getChildren();
28
29 final Object[] parameters = children != null ? children.stream().map(child -> execute(child, input)).toArray()
30 : new Object[] {};
31
32 return operation.apply(input, parameters);
33 }
34
35 }