/// <summary> /// Mutates an individual by choosing an index at random and randomizing /// its training point among possible individuals. /// </summary> protected internal override GAIndividual ReproduceByMutation(int inIndex) { FloatRegFitPredictionIndividual i = (FloatRegFitPredictionIndividual)ReproduceByClone(inIndex); int index = Rng.Next(FloatRegFitPredictionIndividual._sampleSize); i.SetSampleIndex(index, Rng.Next(_solutionGA._testCases.Count)); return(i); }
/// <summary>Evaluates a solution individual using the best predictor so far.</summary> protected internal virtual void PredictIndividual(GAIndividual inIndividual, bool duringSimplify) { FloatRegFitPredictionIndividual predictor = (FloatRegFitPredictionIndividual)_predictorGA.GetBestPredictor(); float fitness = predictor.PredictSolutionFitness((PushGPIndividual)inIndividual); inIndividual.SetFitness(fitness); inIndividual.SetErrors(new List <float>()); }
protected internal override void InitIndividual(GAIndividual inIndividual) { FloatRegFitPredictionIndividual i = (FloatRegFitPredictionIndividual)inIndividual; int[] samples = new int[FloatRegFitPredictionIndividual._sampleSize]; for (int j = 0; j < samples.Length; j++) { samples[j] = Rng.Next(_solutionGA._testCases.Count); } i.SetSampleIndicesAndSolutionGA(_solutionGA, samples); }
protected internal override GAIndividual ReproduceByCrossover(int inIndex) { FloatRegFitPredictionIndividual a = (FloatRegFitPredictionIndividual)ReproduceByClone(inIndex); FloatRegFitPredictionIndividual b = (FloatRegFitPredictionIndividual)TournamentSelect(_tournamentSize, inIndex); // crossoverPoint is the first index of a that will be changed to the // gene from b. int crossoverPoint = Rng.Next(FloatRegFitPredictionIndividual._sampleSize - 1) + 1; for (int i = crossoverPoint; i < FloatRegFitPredictionIndividual._sampleSize; i++) { a.SetSampleIndex(i, b.GetSampleIndex(i)); } return(a); }
protected internal override void EvaluateIndividual(GAIndividual inIndividual) { FloatRegFitPredictionIndividual predictor = (FloatRegFitPredictionIndividual)inIndividual; List <float> errors = new List <float>(); for (int i = 0; i < _trainerPopulationSize; i++) { float predictedError = predictor.PredictSolutionFitness(_trainerPopulation[i]); // Error is difference between predictedError and the actual fitness // of the trainer. float error = Math.Abs(predictedError) - Math.Abs(_trainerPopulation[i].GetFitness()); errors.Add(error); } predictor.SetFitness(AbsoluteAverageOfErrors(errors)); predictor.SetErrors(errors); }