public bool Mutate(Individual individual) { bool triedBackPropagation; bool mutated = ResultSemanticsOperator.Operate(DesiredSemantics, individual, SubTreePool, MaxTreeDepth, out triedBackPropagation); double fitnessChange = 0; if (triedBackPropagation && individual.FitnessEvaluated && FitnessEvaluator != null) { double fitness = FitnessEvaluator.Evaluate(individual, Problem).Fitness; fitnessChange = fitness - individual.Fitness; } Statistics.Instance.AddBackpropagationAttemptMutation(triedBackPropagation, fitnessChange); if (!triedBackPropagation && Fallback != null) { return(Fallback.Mutate(individual)); } return(mutated); }
private Individual GenerateChildren(Individual individual1, Individual individual2, Semantics midpoint, out bool triedBackPropagation) { var child1 = new Individual(individual1); child1.FitnessEvaluated = false; var mutated = ResultSemanticsOperator.Operate(midpoint, child1, SubTreePool, MaxTreeDepth, out triedBackPropagation); double fitnessChange = 0; if (mutated && triedBackPropagation && individual1.FitnessEvaluated && FitnessEvaluator != null) { double fitness = FitnessEvaluator.Evaluate(child1, Problem).Fitness; fitnessChange = fitness - individual1.Fitness; } Statistics.Instance.AddBackpropagationAttemptCrossover(triedBackPropagation, fitnessChange); return(mutated ? child1 : individual1); }