protected internal override void InitIndividual(GAIndividual inIndividual) { PushGPIndividual i = (PushGPIndividual)inIndividual; int randomCodeSize = Rng.Next(_maxRandomCodeSize) + 2; Program p = _interpreter.randProgram.RandomCode(randomCodeSize); i.SetProgram(p); }
/// <summary>Evaluates the current population and updates their fitness values.</summary> /// <remarks> /// Evaluates the current population and updates their fitness values. This /// method may be overridden by subclasses to customize GA behavior. /// </remarks> protected internal virtual void Evaluate() { double totalFitness = 0; _bestMeanFitness = float.MaxValue; for (int n = 0; n < _populations[_currentPopulation].Length; n++) { GAIndividual i = _populations[_currentPopulation][n]; EvaluateIndividual(i); totalFitness += i.GetFitness(); if (i.GetFitness() < _bestMeanFitness) { _bestMeanFitness = i.GetFitness(); _bestIndividual = n; _bestErrors = i.GetErrors(); } } _populationMeanFitness = totalFitness / _populations[_currentPopulation].Length; }
/// <summary> /// Sets the population size and resets the GA generation count, as well as /// initializing the population with random individuals. /// </summary> /// <param name="inSize">the size of the new GA population.</param> /// <exception cref="System.Exception"/> protected internal virtual void ResizeAndInitialize(int inSize) { _populations = new GAIndividual[][] { new GAIndividual[inSize], new GAIndividual[inSize] }; _currentPopulation = 0; _generationCount = 0; object iObject = System.Activator.CreateInstance(_individualClass); if (!(iObject is GAIndividual)) { throw new Exception("individual-class must inherit from class GAIndividual"); } GAIndividual individual = (GAIndividual)iObject; for (int i = 0; i < inSize; i++) { _populations[0][i] = individual.Clone(); InitIndividual(_populations[0][i]); } }
protected internal override void Evaluate() { float totalFitness = 0; _bestMeanFitness = float.MaxValue; for (int n = 0; n < _populations[_currentPopulation].Length; n++) { GAIndividual i = _populations[_currentPopulation][n]; EvaluateIndividual(i); totalFitness += i.GetFitness(); // fitness is minimized. if (i.GetFitness() < _bestMeanFitness) { _bestMeanFitness = i.GetFitness(); _bestIndividual = n; _bestSize = ((PushGPIndividual)i)._program.ProgramSize(); _bestErrors = i.GetErrors(); } } _populationMeanFitness = totalFitness / _populations[_currentPopulation].Length; }
protected internal virtual void EvaluateIndividual(GAIndividual inIndividual, bool duringSimplify) { List <float> errors = new List <float>(); if (!duringSimplify) { _averageSize += ((PushGPIndividual)inIndividual)._program.ProgramSize(); } var sw = Stopwatch.StartNew(); for (int n = 0; n < _testCases.Count; n++) { GATestCase test = _testCases[n]; float e = EvaluateTestCase(inIndividual, test._input, test._output); errors.Add(e); } // XXX We measure the time but don't do anything with it. var t = sw.ElapsedMilliseconds; sw.Stop(); inIndividual.SetFitness(AbsoluteAverageOfErrors(errors)); inIndividual.SetErrors(errors); }
protected internal override void EvaluateIndividual(GAIndividual inIndividual) { EvaluateIndividual(inIndividual, false); }
public abstract float EvaluateTestCase(GAIndividual inIndividual, object inInput, object inOutput);
protected internal abstract void EvaluateIndividual(GAIndividual inIndividual);
protected internal abstract void InitIndividual(GAIndividual inIndividual);