//private static Random random; public static void Main(string[] args) { Util.Initialize(args[0]); var idgen = new IdGenerator(); IExperiment experiment = new LimitExperiment(); XmlSerializer ser = new XmlSerializer(typeof(Settings)); //Settings settings = new Settings() //{ // SmallBlind = 1, // BigBlind = 2, // GamesPerIndividual = 100, // LogFile = "mutlithreaded_log.txt", // MaxHandsPerTourney = 200, // PlayersPerGame = 6, // StackSize = 124, // Threads = 4 //}; //ser.Serialize(new StreamWriter("settings.xml"), settings); Settings settings = (Settings)ser.Deserialize(new StreamReader("settings.xml")); var eval = new PokerPopulationEvaluator<SimpleLimitNeuralNetPlayer2, RingGamePlayerEvaluator>(settings); var ea = new EvolutionAlgorithm( new Population(idgen, GenomeFactory.CreateGenomeList(experiment.DefaultNeatParameters, idgen, experiment.InputNeuronCount, experiment.OutputNeuronCount, experiment.DefaultNeatParameters.pInitialPopulationInterconnections, experiment.DefaultNeatParameters.populationSize)), eval, experiment.DefaultNeatParameters); Console.WriteLine("Starting real evolution"); for (int i = 0; true; i++) { Console.WriteLine("Generation {0}", i + 1); ea.PerformOneGeneration(); Console.WriteLine("Champion Fitness={0}", ea.BestGenome.Fitness); var doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome); FileInfo oFileInfo = new FileInfo("genomes_simple\\" + "bestGenome" + i.ToString() + ".xml"); doc.Save(oFileInfo.FullName); } }
public NoveltyThread(JSPopulationEvaluator jsPop, AssessGenotypeFunction assess, int popSize) { //save our objects for executing later! popEval = jsPop; populationSize = popSize; autoEvent = new AutoResetEvent(false); waitNextTime = true; novelThread = new Thread(delegate() { autoEvent.WaitOne(); //we'll start by testing with 0 parents, and popsize of 15 yay! noveltyRun = EvolutionManager.SharedEvolutionManager.initializeEvolutionAlgorithm(popEval, populationSize, assess); //let our algoirhtm know we want to do novelty gosh darnit if(noveltyRun.multiobjective != null) noveltyRun.multiobjective.doNovelty = true; //we make sure we don't wait in this loop, since we just got started! waitNextTime = false; while (true) { //this will cause us to pause! if (waitNextTime) { waitNextTime = false; autoEvent.WaitOne(); } // Start the stopwatch we'll use to measure eval performance Stopwatch sw = Stopwatch.StartNew(); //run the generation noveltyRun.PerformOneGeneration(); // Stop the stopwatch sw.Stop(); // Report the results Console.WriteLine("Time used per gen (float): {0} ms", sw.Elapsed.TotalMilliseconds); Console.WriteLine("Time used per gen (rounded): {0} ms", sw.ElapsedMilliseconds); } }); novelThread.Start(); }