public void eval(
      int seed, String parent1Expression, String parent2Expression, String offspringExpression) {
    EncogProgramContext context = new EncogProgramContext();
    StandardExtensions.createNumericOperators(context.getFunctions());

    // parent 1
    EncogProgram parent1 = new EncogProgram(context);
    parent1.getVariables().setVariable("x", 1);
    parent1.compileExpression(parent1Expression);

    // parent 2
    EncogProgram parent2 = new EncogProgram(context);
    parent2.getVariables().setVariable("x", 1);
    parent2.compileExpression(parent2Expression);

    // offspring
    EncogProgram[] offspring = parent1.allocateOffspring(1);

    EvolutionaryOperator cross = new SubtreeCrossover();
    Genome[] parents = {parent1, parent2};
    cross.performOperation(new Random(seed), parents, 0, offspring, 0);
    offspring[0].getVariables().setVariable("x", 1);

    RenderCommonExpression render = new RenderCommonExpression();
    // Assert.assertEquals(offspringExpression,render.render(offspring[0]));
  }
 public PrgPopulation(EncogProgramContext theContext, GenomeFactory theGenomeFactory) {
   super(theContext.getParams().getPopulationSize(), theGenomeFactory);
   GeneticTrainingParams params = theContext.getParams();
   this.holder =
       theContext
           .getHolderFactory()
           .factor(params.getPopulationSize(), params.getMaxIndividualSize());
   this.context = theContext;
 }