public void initializeEvolution(int populationSize) { logOutput = new StreamWriter(outputFolder + "logfile.txt"); IdGenerator idgen = new IdGenerator(); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(experiment.DefaultNeatParameters, idgen, experiment.InputNeuronCount, experiment.OutputNeuronCount, experiment.OutputsPerPolicy, experiment.DefaultNeatParameters.pInitialPopulationInterconnections, populationSize)), experiment.PopulationEvaluator, experiment.DefaultNeatParameters); }
private void EvolutionaryThread() { m_exp = CreateExperiment(); var idgen = new IdGenerator(); m_evoAlg = new EvolutionAlgorithm( new Population(idgen, GenomeFactory.CreateGenomeList(m_exp.DefaultNeatParameters, idgen, m_exp.InputNeuronCount, m_exp.OutputNeuronCount, m_exp.DefaultNeatParameters.pInitialPopulationInterconnections, NeatExpParams.PopulationSize)), m_exp.PopulationEvaluator, m_exp.DefaultNeatParameters); while (!m_shouldQuit) { Console.WriteLine("::::: Performing one generation"); Console.WriteLine(); m_evoAlg.PerformOneGeneration(); if (NeatExpParams.SaveFitnessGrowth) { m_eaLogger.WriteLine(String.Format("{0,-10} {1,-20} {2,-20} {3,-20}", m_evoAlg.Generation, m_evoAlg.BestGenome.Fitness, m_evoAlg.Population.MeanFitness, m_evoAlg.Population.AvgComplexity)); } m_curBestGenome = m_evoAlg.BestGenome as NeatGenome; if (m_evoAlg.BestGenome.Fitness > m_overalBestFitness) { m_overalBestFitness = m_evoAlg.BestGenome.Fitness; m_overalBestGenome = m_curBestGenome; if (NeatExpParams.SaveEachGenerationChampionCPPN) { try { var doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)m_evoAlg.BestGenome); var oFileInfo = new FileInfo(Path.Combine( NeatExpParams.EALogDir, String.Format("BestIndividual-{0}-{1}.xml", MyUnum, m_evoAlg.Generation.ToString()))); doc.Save(oFileInfo.FullName); } catch { } } } if (EAUpdate != null) { EAUpdate.Invoke(this, EventArgs.Empty); } } }
public void initializeEvolution(int populationSize) { if (logOutput != null) { logOutput.Close(); } logOutput = new StreamWriter(outputFolder + "logfile.txt"); IdGenerator idgen = new IdGenerator(); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(neatParams, idgen, cppnInputs, cppnOutputs, neatParams.pInitialPopulationInterconnections, populationSize)), populationEval, neatParams); }
public void initializeEvolution(int populationSize, NeatGenome seedGenome) { if (seedGenome == null) { initializeEvolution(populationSize); return; } logOutput = new StreamWriter(outputFolder + "logfile.txt"); IdGenerator idgen = new IdGeneratorFactory().CreateIdGenerator(seedGenome); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(seedGenome, populationSize, experiment.DefaultNeatParameters, idgen)), experiment.PopulationEvaluator, experiment.DefaultNeatParameters); }
public void initializeEvolution(int populationSize, NeatGenome seedGenome) { if (seedGenome == null) { initializeEvolution(populationSize); return; } if (logOutput != null) { logOutput.Close(); } logOutput = new StreamWriter(outputFolder + "logfile.txt"); IdGenerator idgen = new IdGeneratorFactory().CreateIdGenerator(seedGenome); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(seedGenome, populationSize, neatParams, idgen)), populationEval, neatParams); }
//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); } }
/// <summary> /// Initializes the EA with a random intial population. /// </summary> public void initializeEvolution(int populationSize) { LogOutput = Logging ? new StreamWriter(Path.Combine(OutputFolder, "log.txt")) : null; FinalPositionOutput = FinalPositionLogging ? new StreamWriter(Path.Combine(OutputFolder, "final-position.txt")) : null; ArchiveModificationOutput = FinalPositionLogging ? new StreamWriter(Path.Combine(OutputFolder, "archive-mods.txt")) : null; ComplexityOutput = new StreamWriter(Path.Combine(OutputFolder, "complexity.txt")); ComplexityOutput.WriteLine("avg,stdev,min,max"); if (FinalPositionLogging) { FinalPositionOutput.WriteLine("ID,x,y"); ArchiveModificationOutput.WriteLine("ID,action,time,x,y"); } IdGenerator idgen = new IdGenerator(); EA = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(experiment.DefaultNeatParameters, idgen, experiment.InputNeuronCount, experiment.OutputNeuronCount, experiment.DefaultNeatParameters.pInitialPopulationInterconnections, populationSize, SimExperiment.neatBrain)), experiment.PopulationEvaluator, experiment.DefaultNeatParameters); EA.outputFolder = OutputFolder; EA.neatBrain = NEATBrain; }
/// <summary> /// Initializes the EA with an initial population generated from a single seed genome. /// </summary> public void initializeEvolution(int populationSize, NeatGenome seedGenome) { if (seedGenome == null) { initializeEvolution(populationSize); return; } LogOutput = Logging ? new StreamWriter(Path.Combine(OutputFolder, "log.txt")) : null; FinalPositionOutput = FinalPositionLogging ? new StreamWriter(Path.Combine(OutputFolder, "final-position.txt")) : null; ArchiveModificationOutput = FinalPositionLogging ? new StreamWriter(Path.Combine(OutputFolder, "archive-mods.txt")) : null; ComplexityOutput = new StreamWriter(Path.Combine(OutputFolder, "complexity.txt")); ComplexityOutput.WriteLine("avg,stdev,min,max"); if (FinalPositionLogging) { FinalPositionOutput.WriteLine("x,y"); ArchiveModificationOutput.WriteLine("ID,action,time,x,y"); } IdGenerator idgen = new IdGeneratorFactory().CreateIdGenerator(seedGenome); EA = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(seedGenome, populationSize, experiment.DefaultNeatParameters, idgen)), experiment.PopulationEvaluator, experiment.DefaultNeatParameters); EA.outputFolder = OutputFolder; EA.neatBrain = NEATBrain; }
static void Main(string[] args) { NeatGenome seedGenome = null; string filename = @"seedGenome.xml"; try { XmlDocument document = new XmlDocument(); document.Load(filename); seedGenome = XmlNeatGenomeReaderStatic.Read(document); } catch (Exception e) { System.Console.WriteLine("Problem loading genome. \n" + e.Message); } string experimentName = "_2Pref"; for (int k = 3; k < 10; k++) { double maxFitness = 0; int maxGenerations = 400; //150; int populationSize = 300; //100;//150; Thread extraWindowThread; extraWindowThread = new System.Threading.Thread(delegate() { var myForm = new SharpNeatExperiments.Pacman.MyForm1(); System.Windows.Forms.Application.Run(myForm); }); extraWindowThread.Start(); IExperiment exp = null; //exp = new SUPGONLYExperiment(4,12,12,5,2); //exp = new PacmanExperimentSUPG(4, 12, 12, 5, 2); //exp = new SPMMExperiment(4, 12, 12, 5, 2); //exp = new SPCExperiment(4, 12, 12, 5, 2); exp = new SPSUPGExperiment(4, 12, 12, 5, 6); StreamWriter SW; SW = File.CreateText("logfile.txt"); //Change this line for different experiments XmlDocument doc; FileInfo oFileInfo; IdGenerator idgen; EvolutionAlgorithm ea; if (seedGenome == null) { idgen = new IdGenerator(); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(exp.DefaultNeatParameters, idgen, exp.InputNeuronCount, exp.OutputNeuronCount, exp.DefaultNeatParameters.pInitialPopulationInterconnections, populationSize)), exp.PopulationEvaluator, exp.DefaultNeatParameters); } else { idgen = new IdGeneratorFactory().CreateIdGenerator(seedGenome); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(seedGenome, exp.DefaultNeatParameters.populationSize, exp.DefaultNeatParameters, idgen)), exp.PopulationEvaluator, exp.DefaultNeatParameters); } bool isNSGAiiEnabled = false; for (int j = 0; j < maxGenerations; j++) { DateTime dt = DateTime.Now; if (isNSGAiiEnabled) { ea.PerformOneGenerationNSGAii(); } else { ea.PerformOneGeneration(); } if (ea.BestGenome.Fitness > maxFitness) { maxFitness = ea.BestGenome.Fitness; Console.WriteLine(maxFitness + "maxFitness"); Console.WriteLine("objectiveFitness" + ea.BestGenome.MultiObjectiveFitness[0] + " " + ea.BestGenome.MultiObjectiveFitness[1]); doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome); oFileInfo = new FileInfo("bestGenome" + j.ToString() + ".xml"); doc.Save(oFileInfo.FullName); //MadsXMLWriter(j, maxFitness); } MadsXMLWriter(j, maxFitness, k, experimentName); Console.WriteLine(ea.Generation.ToString() + " " + (maxFitness).ToString() + " " + (DateTime.Now.Subtract(dt))); //Do any post-hoc stuff here SW.WriteLine(ea.Generation.ToString() + " " + (maxFitness).ToString()); } SW.Close(); //----- Write the genome to an XmlDocument. doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome, ActivationFunctionFactory.GetActivationFunction("NullFn")); oFileInfo = new FileInfo("bestGenome" + experimentName + "_" + k + ".xml"); doc.Save(oFileInfo.FullName); } }
/// <summary> /// This function contains all of the pre-run logic that doesn't involve graphics. /// </summary> protected override void Initialize() { base.Initialize(); // Create the world / region system // Note: The morphology must be generated in advance of the Load INetwork morphologyCPPN = loadCPPNFromXml(initialMorphologyFilename).Decode(ActivationFunctionFactory.GetActivationFunction("BipolarSigmoid")); morphology = generateMorphology(morphologyCPPN); redTexture = generateSolidMorphology(morphology); InitializeRegions(); // Initialize a log to track some instance-specific data using (System.IO.StreamWriter file = new System.IO.StreamWriter("RunInfo.txt", true)) { file.WriteLine("Novelty search run"); file.WriteLine("Start time: " + DateTime.Now.ToString("HH:mm:ss tt")); if (freezeAfterPlanting) { file.WriteLine("Individuals are immobilized once they attempt to plant."); } else { file.WriteLine("Individuals are allowed to keep moving even if/after they attempt to plant."); } file.WriteLine("Morphology genome XML filename: " + initialControllerFilename); file.WriteLine("Behavior update interval: " + behaviorUpdateInterval); file.WriteLine("Planting weight: " + plantingWeight); file.WriteLine("Position weight: " + positionWeight); file.WriteLine("Population size: " + populationSize); file.WriteLine("Archive threshold: " + archiveThreshold); } // Initialize some static variables for the simulation numBidirectionalPlanters = 0; numFirstTrialPlanters = 0; numSecondTrialPlanters = 0; numBidirectionalMisplanters = 0; numFirstTrialMisplanters = 0; numSecondTrialMisplanters = 0; firstTrial = true; // Set the NEAT parameters neatParams = new NeatParameters(); neatParams.archiveThreshold = archiveThreshold; neatParams.noveltyFixed = true; neatParams.noveltySearch = true; // Configure the HyperNEAT substrate controllerSubstrate = new ControllerSubstrate(308, 4, 108, new BipolarSigmoid()); controllerSubstrate.weightRange = 5.0; controllerSubstrate.threshold = 0.2; // Create a genome factory to generate a list of CPPN genomes cppnGenerator = new GenomeFactory(); idGen = new IdGenerator(); cppnGenomeList = cppnGenerator.CreateGenomeList(neatParams, idGen, 4, 8, 1.0f, populationSize); GenomeIndexOfCurrentCreature = 0; // Initialize the folders for storing the archive and planters noveltyLogsFolder = Directory.GetCurrentDirectory() + "\\archive\\" + GenomeIndexOfCurrentCreature + "\\"; if (!Directory.Exists(noveltyLogsFolder)) { Directory.CreateDirectory(noveltyLogsFolder); } plantersFolder = Directory.GetCurrentDirectory() + "\\planters\\" + GenomeIndexOfCurrentCreature + "\\"; if (!Directory.Exists(plantersFolder)) { Directory.CreateDirectory(plantersFolder); } // Create an initial population based on the genome list popn = new Population(idGen, cppnGenomeList); // Set the generation counter // Note: This must be kept seperately from the EA generation counter because novelty search here does't follow the traditional loop. generation = 1; // Create the EA // (Don't run the EA until the first generation has had a chance to go through the simulation. // The EA call happens in Simulator.NewGeneration().) ea = new EvolutionAlgorithm(popn, new ChromariaPopulationEvaluator(new ChromariaNetworkEvaluator()), neatParams); // Initialize the behavior trackers for this individual ea.Population.GenomeList[GenomeIndexOfCurrentCreature].Behavior = new BehaviorType(); ea.Population.GenomeList[GenomeIndexOfCurrentCreature].Behavior.behaviorList = new List <double>(); // Generate the initial creature int x = initialBoardWidth / 2; int y = initialBoardHeight / 2; INetwork newController = controllerSubstrate.generateGenome(ea.Population.GenomeList[GenomeIndexOfCurrentCreature].Decode(ActivationFunctionFactory.GetActivationFunction("BipolarSigmoid"))).Decode(ActivationFunctionFactory.GetActivationFunction("BipolarSigmoid")); if (bidirectionalTrials) { currentCreature = new NNControlledCreature(morphology, x, y, initialHeading + (float)(Math.PI / 2.0), newController, this, drawSensorField, trackPlanting, defaultNumSensors, freezeAfterPlanting); } else { currentCreature = new NNControlledCreature(morphology, x, y, initialHeading, newController, this, drawSensorField, trackPlanting, defaultNumSensors, freezeAfterPlanting); } currentCreature.DrawOrder = 1; indexOfCurrentCreature = Components.Count - 1; // Add the creature to the simulator's region lists int currentPointer = Components.Count - 1; regions[y / regionHeight, x / regionWidth].Add(currentPointer); if ((x % regionWidth > (x + morphology.Width) % regionWidth) && (y % regionHeight > (y + morphology.Height) % regionHeight) && !regions[(y + morphology.Height) / regionHeight, (x + morphology.Width) / regionWidth].Contains(currentPointer)) { regions[(y + morphology.Height) / regionHeight, (x + morphology.Width) / regionWidth].Add(currentPointer); } if (x % regionWidth > (x + morphology.Width) % regionWidth && !regions[(y / regionHeight), (x + morphology.Width) / regionWidth].Contains(currentPointer)) { regions[(y / regionHeight), (x + morphology.Width) / regionWidth].Add(currentPointer); } if (y % regionHeight > (y + morphology.Height) % regionHeight && !(regions[(y + morphology.Height) / regionHeight, x / regionWidth].Contains(currentPointer))) { regions[(y + morphology.Height) / regionHeight, x / regionWidth].Add(currentPointer); } // Preliminarily update the creature's sensors so its first movements are actually based on what's underneath its starting position currentCreature.InitializeSensor(); plantedInColoredSpace1 = false; plantedInColoredSpace2 = false; plantedInWhiteSpace1 = false; plantedInWhiteSpace2 = false; numUpdates = 0; }
static void Main(string[] args) { string folder = ""; NeatGenome seedGenome = null; string filename = null; string shape = "triangle"; bool isMulti = false; for (int j = 0; j < args.Length; j++) { if (j <= args.Length - 2) { switch (args[j]) { case "-seed": filename = args[++j]; Console.WriteLine("Attempting to use seed from file " + filename); break; case "-folder": folder = args[++j]; Console.WriteLine("Attempting to output to folder " + folder); break; case "-shape": shape = args[++j]; Console.WriteLine("Attempting to do experiment with shape " + shape); break; case "-multi": isMulti = Boolean.Parse(args[++j]); Console.WriteLine("Experiment is heterogeneous? " + isMulti); break; } } } if (filename != null) { try { XmlDocument document = new XmlDocument(); document.Load(filename); seedGenome = XmlNeatGenomeReaderStatic.Read(document); } catch (Exception e) { System.Console.WriteLine("Problem loading genome. \n" + e.Message); } } double maxFitness = 0; int maxGenerations = 1000; int populationSize = 150; int inputs = 4; IExperiment exp = new SkirmishExperiment(inputs, 1, isMulti, shape); StreamWriter SW; SW = File.CreateText(folder + "logfile.txt"); XmlDocument doc; FileInfo oFileInfo; IdGenerator idgen; EvolutionAlgorithm ea; if (seedGenome == null) { idgen = new IdGenerator(); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(exp.DefaultNeatParameters, idgen, exp.InputNeuronCount, exp.OutputNeuronCount, exp.DefaultNeatParameters.pInitialPopulationInterconnections, populationSize)), exp.PopulationEvaluator, exp.DefaultNeatParameters); } else { idgen = new IdGeneratorFactory().CreateIdGenerator(seedGenome); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(seedGenome, populationSize, exp.DefaultNeatParameters, idgen)), exp.PopulationEvaluator, exp.DefaultNeatParameters); } for (int j = 0; j < maxGenerations; j++) { DateTime dt = DateTime.Now; ea.PerformOneGeneration(); if (ea.BestGenome.Fitness > maxFitness) { maxFitness = ea.BestGenome.Fitness; doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome); oFileInfo = new FileInfo(folder + "bestGenome" + j.ToString() + ".xml"); doc.Save(oFileInfo.FullName); // This will output the substrate, uncomment if you want that /* doc = new XmlDocument(); * XmlGenomeWriterStatic.Write(doc, (NeatGenome) SkirmishNetworkEvaluator.substrate.generateMultiGenomeModulus(ea.BestGenome.Decode(null),5)); * oFileInfo = new FileInfo(folder + "bestNetwork" + j.ToString() + ".xml"); * doc.Save(oFileInfo.FullName); */ } Console.WriteLine(ea.Generation.ToString() + " " + ea.BestGenome.Fitness + " " + (DateTime.Now.Subtract(dt))); //Do any post-hoc stuff here SW.WriteLine(ea.Generation.ToString() + " " + (maxFitness).ToString()); } SW.Close(); doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome, ActivationFunctionFactory.GetActivationFunction("NullFn")); oFileInfo = new FileInfo(folder + "bestGenome.xml"); doc.Save(oFileInfo.FullName); }
public void run(int type, int evaluationMethod, System.Threading.CancellationToken token) { double maxFitness = 0; int maxGenerations = 800; int populationSize = 300; IExperiment exp; if (evaluationMethod == 1) { novelty = true; } if (type == 0) { exp = new CTRNNExperiment(4, 12, 8, 8, 4); } else if (type == 1) { exp = new SUPGExperiment(4, 12, 12, 3, 2); } else { doClune = true; exp = new CluneExperiment(20, 20, 20, 6, 1); } XmlDocument doc; FileInfo oFileInfo; IdGenerator idgen; EvolutionAlgorithm ea; NeatGenome seedGenome = null; if (seedGenome == null) { idgen = new IdGenerator(); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(exp.DefaultNeatParameters, idgen, exp.InputNeuronCount, exp.OutputNeuronCount, exp.DefaultNeatParameters.pInitialPopulationInterconnections, populationSize)), exp.PopulationEvaluator, exp.DefaultNeatParameters); } else { idgen = new IdGeneratorFactory().CreateIdGenerator(seedGenome); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(seedGenome, populationSize, exp.DefaultNeatParameters, idgen)), exp.PopulationEvaluator, exp.DefaultNeatParameters); } Directory.CreateDirectory(folder); using (var logWriter = File.CreateText(folder + "Log " + DateTime.Now.ToString("u").Replace(':', '.') + ".txt")) for (int j = 0; j < maxGenerations; j++) { if (token.IsCancellationRequested) { logWriter.WriteLine("Cancelled"); break; } DateTime dt = DateTime.Now; ea.PerformOneGeneration(); if (ea.BestGenome.ObjectiveFitness > maxFitness) { maxFitness = ea.BestGenome.ObjectiveFitness; doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome); oFileInfo = new FileInfo(folder + "bestGenome" + j + ".xml"); doc.Save(oFileInfo.FullName); /*/ This will output the substrate * doc = new XmlDocument(); * XmlGenomeWriterStatic.Write(doc, SUPGNetworkEvaluator.substrate.generateGenome(ea.BestGenome.Decode(null))); * oFileInfo = new FileInfo(folder + "bestNetwork" + j + ".xml"); * doc.Save(oFileInfo.FullName);*/ } var msg = DateTime.Now.ToLongTimeString() + "; Duration=" + DateTime.Now.Subtract(dt).ToString("mm\\:ss") + "; Gen=" + ea.Generation.ToString("000") + "; Neurons=" + (ea.Population.TotalNeuronCount / (float)ea.Population.GenomeList.Count).ToString("00.00") + "; Connections=" + (ea.Population.TotalConnectionCount / (float)ea.Population.GenomeList.Count).ToString("00.00") + "; BestFit=" + ea.BestGenome.ObjectiveFitness.ToString("0.000") + "; MaxFit=" + maxFitness.ToString("0.000"); Console.WriteLine(msg); logWriter.WriteLine(msg); logWriter.Flush(); //Do any post-hoc stuff here } doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome, ActivationFunctionFactory.GetActivationFunction("NullFn")); oFileInfo = new FileInfo(folder + "bestGenome.xml"); doc.Save(oFileInfo.FullName); }
public static void ThreeDHyperNEAT() { if (!cmdParser.IsArgumentProvided("-shape", out Program.Shape)) { Program.Shape = "triangle"; } if (!cmdParser.IsArgumentProvided("-folder", out Program.LogFolder)) { Program.LogFolder = "TestLogs"; } if (!Directory.Exists(Program.LogFolder)) { Directory.CreateDirectory(Program.LogFolder); } if (!cmdParser.IsIntArgumentProvided("-gens", out Program.MaxGenerations)) { Program.MaxGenerations = 1000; } double maxFitness = 0; int maxGenerations = Program.MaxGenerations; int populationSize = Program.PopulationSize; IExperiment exp = new Skirmish3DExperiment(5, Program.Shape, Program.PopulationSize); StreamWriter sw = File.CreateText(Path.Combine(Program.LogFolder, String.Format("{0}-logfile.log", Program.LogFolder))); sw.AutoFlush = true; XmlDocument doc; FileInfo oFileInfo; IdGenerator idgen; EvolutionAlgorithm ea; idgen = new IdGenerator(); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(exp.DefaultNeatParameters, idgen, exp.InputNeuronCount, exp.OutputNeuronCount, exp.DefaultNeatParameters.pInitialPopulationInterconnections, populationSize)), exp.PopulationEvaluator, exp.DefaultNeatParameters); for (int j = 0; j < maxGenerations; j++) { DateTime dt = DateTime.Now; ea.PerformOneGeneration(); if (ea.BestGenome.Fitness > maxFitness) { maxFitness = ea.BestGenome.Fitness; doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome); oFileInfo = new FileInfo(Path.Combine(Program.LogFolder, "BestGenome-" + j.ToString() + ".xml")); doc.Save(oFileInfo.FullName); // This will output the substrate, uncomment if you want that /* doc = new XmlDocument(); * XmlGenomeWriterStatic.Write(doc, (NeatGenome) SkirmishNetworkEvaluator.substrate.generateMultiGenomeModulus(ea.BestGenome.Decode(null),5)); * oFileInfo = new FileInfo(folder + "bestNetwork" + j.ToString() + ".xml"); * doc.Save(oFileInfo.FullName); */ } Console.WriteLine(ea.Generation.ToString() + " " + ea.BestGenome.Fitness + " " + (DateTime.Now.Subtract(dt))); //Do any post-hoc stuff here sw.WriteLine("{0} {1} {2}", ea.Generation, maxFitness, ea.Population.MeanFitness); sw.Flush(); } sw.Close(); doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome, ActivationFunctionFactory.GetActivationFunction("NullFn")); oFileInfo = new FileInfo(Path.Combine(Program.LogFolder, "BestGenome.xml")); doc.Save(oFileInfo.FullName); }
private static void PredatorCCEAHNMainThread(object oAgentId) { int agentId = (int)oAgentId; double maxFitness = 0; int maxGenerations = Program.MaxGenerations; int populationSize = Program.PopulationSize; IExperiment exp = new SkirmishCCEAExperiment(agentId, Program.PopulationSize); StreamWriter sw = File.CreateText(Path.Combine(Program.LogFolder, String.Format("{0}-logfile-{1}.log", Program.LogFolder, agentId))); sw.AutoFlush = true; XmlDocument doc; FileInfo oFileInfo; IdGenerator idgen = new IdGenerator(); EvolutionAlgorithm ea = new EvolutionAlgorithm( new Population(idgen, GenomeFactory.CreateGenomeList(exp.DefaultNeatParameters, idgen, exp.InputNeuronCount, exp.OutputNeuronCount, exp.DefaultNeatParameters.pInitialPopulationInterconnections, populationSize)), exp.PopulationEvaluator, exp.DefaultNeatParameters); for (int j = 0; j < maxGenerations; j++) { DateTime dt = DateTime.Now; ea.PerformOneGeneration(); if (ea.BestGenome.Fitness > maxFitness) { maxFitness = ea.BestGenome.Fitness; doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome); oFileInfo = new FileInfo(Path.Combine(LogFolder, String.Format("BestGenome-{0}-{1}.xml", agentId, j))); doc.Save(oFileInfo.FullName); // This will output the substrate, uncomment if you want that /* doc = new XmlDocument(); * XmlGenomeWriterStatic.Write(doc, (NeatGenome) SkirmishNetworkEvaluator.substrate.generateMultiGenomeModulus(ea.BestGenome.Decode(null),5)); * oFileInfo = new FileInfo(folder + "bestNetwork" + j.ToString() + ".xml"); * doc.Save(oFileInfo.FullName); */ } Console.WriteLine("[{0}] {1} {2} {3}", agentId, ea.Generation, ea.BestGenome.Fitness, (DateTime.Now.Subtract(dt))); //Do any post-hoc stuff here sw.WriteLine("{0} {1} {2}", ea.Generation, maxFitness, ea.Population.MeanFitness); sw.Flush(); } sw.Close(); //doc = new XmlDocument(); //XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome, ActivationFunctionFactory.GetActivationFunction("NullFn")); //oFileInfo = new FileInfo(Path.Combine(LogFolder, "BestGenome.xml")); //doc.Save(oFileInfo.FullName); Environment.Exit(0); }
private void startEvolutionToolStripMenuItem_Click(object sender, EventArgs e) { NeatGenome seedGenome = null; if (EvoSeedFileName != null) { try { XmlDocument document = new XmlDocument(); document.Load(EvoSeedFileName); seedGenome = XmlNeatGenomeReaderStatic.Read(document); } catch (Exception ex) { System.Console.WriteLine("Problem loading genome. \n" + ex.Message); } } double maxFitness = 0; int maxGenerations = 1000; int populationSize = 150; int inputs = 4; IExperiment exp = new SkirmishExperiment(inputs, 1, EvoIsMulti, EvoShape); w = SkirmishNetworkEvaluator.lWorldVar(network, 125); timer = 0; StreamWriter SW; SW = File.CreateText(EvoOutputLogFolder + "logfile.txt"); XmlDocument doc; FileInfo oFileInfo; IdGenerator idgen; EvolutionAlgorithm ea; if (seedGenome == null) { idgen = new IdGenerator(); ea = new EvolutionAlgorithm( new Population(idgen, GenomeFactory.CreateGenomeList( exp.DefaultNeatParameters, idgen, exp.InputNeuronCount, exp.OutputNeuronCount, exp.DefaultNeatParameters.pInitialPopulationInterconnections, populationSize)), exp.PopulationEvaluator, exp.DefaultNeatParameters); } else { idgen = new IdGeneratorFactory().CreateIdGenerator(seedGenome); ea = new EvolutionAlgorithm(new Population(idgen, GenomeFactory.CreateGenomeList(seedGenome, populationSize, exp.DefaultNeatParameters, idgen)), exp.PopulationEvaluator, exp.DefaultNeatParameters); } for (int j = 0; j < maxGenerations; j++) { DateTime dt = DateTime.Now; ea.PerformOneGeneration(); if (ea.BestGenome.Fitness > maxFitness) { maxFitness = ea.BestGenome.Fitness; doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome); oFileInfo = new FileInfo(EvoOutputLogFolder + "bestGenome" + j.ToString() + ".xml"); doc.Save(oFileInfo.FullName); // This will output the substrate, uncomment if you want that /* doc = new XmlDocument(); * XmlGenomeWriterStatic.Write(doc, (NeatGenome) SkirmishNetworkEvaluator.substrate.generateMultiGenomeModulus(ea.BestGenome.Decode(null),5)); * oFileInfo = new FileInfo(folder + "bestNetwork" + j.ToString() + ".xml"); * doc.Save(oFileInfo.FullName); */ } Console.WriteLine(ea.Generation.ToString() + " " + ea.BestGenome.Fitness + " " + (DateTime.Now.Subtract(dt))); //Do any post-hoc stuff here SW.WriteLine(ea.Generation.ToString() + " " + (maxFitness).ToString()); } SW.Close(); doc = new XmlDocument(); XmlGenomeWriterStatic.Write(doc, (NeatGenome)ea.BestGenome, ActivationFunctionFactory.GetActivationFunction("NullFn")); oFileInfo = new FileInfo(EvoOutputLogFolder + "bestGenome.xml"); doc.Save(oFileInfo.FullName); }