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);
                }
            }
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        //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;
        }
Exemple #9
0
        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);
            }
        }
Exemple #10
0
        /// <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;
        }
Exemple #11
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);
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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);
        }