/// <summary> /// NOTE: This is entirely copied from PushGP, except EvaluateIndividual /// was changed to PredictIndividual, as noted below (twice). /// </summary> protected internal override PushGPIndividual Autosimplify(PushGPIndividual inIndividual, int steps) { PushGPIndividual simplest = (PushGPIndividual)inIndividual.Clone(); PushGPIndividual trial = (PushGPIndividual)inIndividual.Clone(); PredictIndividual(simplest, true); // Changed from EvaluateIndividual float bestError = simplest.GetFitness(); bool madeSimpler = false; for (int i = 0; i < steps; i++) { madeSimpler = false; float method = Rng.Next(100); if (trial._program.ProgramSize() <= 0) { break; } if (method < _simplifyFlattenPercent) { // Flatten random thing int pointIndex = Rng.Next(trial._program.ProgramSize()); object point = trial._program.Subtree(pointIndex); if (point is Program) { trial._program.Flatten(pointIndex); madeSimpler = true; } } else { // Remove small number of random things int numberToRemove = Rng.Next(3) + 1; for (int j = 0; j < numberToRemove; j++) { int trialSize = trial._program.ProgramSize(); if (trialSize > 0) { int pointIndex = Rng.Next(trialSize); trial._program.ReplaceSubtree(pointIndex, new Program()); trial._program.Flatten(pointIndex); madeSimpler = true; } } } if (madeSimpler) { PredictIndividual(trial, true); // Changed from EvaluateIndividual if (trial.GetFitness() <= bestError) { simplest = (PushGPIndividual)trial.Clone(); bestError = trial.GetFitness(); } } trial = (PushGPIndividual)simplest.Clone(); } return(simplest); }
/// <summary> /// This must be private, since there must be a _solutionGA set before this /// method is invoked. /// </summary> /// <remarks> /// This must be private, since there must be a _solutionGA set before this /// method is invoked. Use SetGAandTrainers() instead. /// </remarks> private void InitTrainerPopulation() { _trainerPopulation = new List <PushGPIndividual>(); PushGPIndividual individual = new PushGPIndividual(); for (int i = 0; i < _trainerPopulationSize; i++) { _trainerPopulation.Add((PushGPIndividual)individual.Clone()); _solutionGA.InitIndividual(_trainerPopulation[i]); } EvaluateTrainerFitnesses(); }