anchor.diff:  # Genetic programming
   
  +Genetic programming (GP) is a technique where a set of genes are modified (evolved) using an evolutionary algorithm. The `org.jenetics.prog` modules contains a `ProgramGene`, together with its corresponding `ProgramChromosome`, which allows to create operation (`Op`) trees.
  +
   The `org.jenetics.prog` module contains the classes which are needed for doing _Genetic programming_ with the _Jenetics_ library. It introduces a new `Chromosome`/`Gene` pair, which are the main entry points.
   
  -Genetic programming (GP) is a technique where a set of genes are modified (evolved) using an evolutionary algorithm. The `org.jenetics.prog` modules contains a `ProgramGene`, together with its corresponding `ProgramChromosome`, which allows to create operation (`Op`) trees.
   
   ```java
   public interface Op<T> {
  
positive.code: );
  ```
  
  The chosen _non-terminal_ operation set is sufficient to create any polynomial. For the _terminal_ operations, we added a variable "x", whith _index_ zero, and an ephemeral _int_ constant. The purpose of the _ephemeral_ constant is to create constant values, which will differ for every tree, but stay constant within a tree.
  
  In the next step define the fitness function for the GP, which will be an _error_ function we will minimize.
  
  
negative.code: static double error(final ProgramGene<Double> program) {
      return Arrays.stream(SAMPLES).mapToDouble(sample -> {
          final double x = sample[0];
          final double y = sample[1];
          final double result = program.eval(x);
          return abs(y - result) + program.size()*0.0001;
      })
      .sum();
  }
  