// MAIN FUNCTION public static bool Run( RandomGeneSig getRandomGeneFunc, FitnessSig getPopFitnessFunc ) { // Runs the EA algorythm, returns true if goal is achieved, false if time is exceeded // local variables bool goalAchieved; double bestFitness, avrFitness; double[] popFitness = new double[G.popSize]; double[][] genes; // Create a random population of creatures myPop = new Population( G.popSize, G.geneLen, getRandomGeneFunc ); // MAIN LOOP while( true ) { // Evaluate and sort population genes = myPop.GetGenes(); myPop.GetFitness( ref popFitness ); goalAchieved = getPopFitnessFunc( genes, ref popFitness, out bestFitness, out avrFitness ); myPop.SetFitness( popFitness, bestFitness, avrFitness ); myPop.Sort(); //myPop.Print( "EVALUATED", false ); //Console.ReadKey( true ); // Are we done? if( goalAchieved ) break; // Mate Selection myPop.SelectToMate( showStepsFlag: true ); myPop.MatePairing(); // Create New Creatures myPop.CreateOffspring(); myPop.Mutate(); // Death Selection myPop.SelectToDie( showStepsFlag: false ); // Pause or continue PausePrintContinue(); // Update population (genes) myPop.InsertNewOffspring(); myPop.IncGeneration(); } // success myPop.Print( "(SUCCESS)", false ); FFNN answer = new FFNN( G.netDef, myPop.creatures[0].Gene); Console.WriteLine( answer.ToString() ); return goalAchieved; }