static void Main(String[] args)
        {
            //设置染色体组

            //设置最优染色体

            //设置子染色体组

            //检查是否达到最优

            //变异操作

            //记录每次最优的情况



            //按照适应度对种群的个体进行排序

            /*
             *  func SortSuit()
             * {
             *
             * }
             */
            GA g = new GA();

            g.initialization();
            g.caculatefitness();
        }
Exemple #2
0
    public void breed()
    {
        if (ga == null)
        {
            ga = new GA.GA <NEAT.Person>(player.weapon, new GA.Selection.NEAT_Selection(), new GA.Crossover.NEAT_Crossover(), new GA.Mutation.NEAT_Mutation(), new GA.Fitness.NEAT_Fitness(), 10, 0.05f, 0.1f);
        }
        else
        {
            ga.updatePopulation(player.usedWepons);
            ga.updateParameters(ga.population_size, ga.elitesP, crossoverP);
        }
        ga.breed();
        crossoverP += 0.01f;
        if (crossoverP > 0.6f)
        {
            crossoverP = 0.6f;
        }

        player.usedWepons.Clear();

        /*System.Random random = new System.Random();
         * player.weapon = new List<NEAT.Person>() { ga.results[random.Next(ga.results.Count - 1)], ga.results[random.Next(ga.results.Count - 1)], ga.results[random.Next(ga.results.Count - 1)] };
         * player.chosenW = player.weapon[0];
         * player.chosenW.buildModel();*/
    }
        static void Main(string[] args)
        {
            //真实数据集
            //string[] filepath = { "../Data/RealData/S1_500.txt", "../Data/RealData/S2_500.txt", "../Data/RealData/S3_500.txt", "../Data/RealData/S4_500.txt", "../Data/RealData/S5_500.txt" };//数据集规模500
            string[] filepath = { "../Data/RealData/S1_400.txt", "../Data/RealData/S2_400.txt", "../Data/RealData/S3_400.txt", "../Data/RealData/S4_400.txt", "../Data/RealData/S5_400.txt" };//数据集规模400
            //string[] filepath = { "../Data/RealData/S1_300.txt", "../Data/RealData/S2_300.txt", "../Data/RealData/S3_300.txt", "../Data/RealData/S4_300.txt", "../Data/RealData/S5_300.txt" };//数据集规模300
            //string[] filepath = { "../Data/RealData/S1_200.txt", "../Data/RealData/S2_200.txt", "../Data/RealData/S3_200.txt", "../Data/RealData/S4_200.txt", "../Data/RealData/S5_200.txt" };//数据集规模200
            //string[] filepath = { "../Data/RealData/S1_100.txt", "../Data/RealData/S2_100.txt", "../Data/RealData/S3_100.txt", "../Data/RealData/S4_100.txt", "../Data/RealData/S5_100.txt" };//数据集规模100

            //随机数据集
            //string[] filepath = { "../Data/Random/S1_500.txt", "../Data/Random/S2_500.txt", "../Data/Random/S3_500.txt", "../Data/Random/S4_500.txt", "../Data/Random/S5_500.txt" };//数据集规模500
            //string[] filepath = { "../Data/Random/S1_400.txt", "../Data/Random/S2_400.txt", "../Data/Random/S3_400.txt", "../Data/Random/S4_400.txt", "../Data/Random/S5_400.txt" };//数据集规模400
            //string[] filepath = { "../Data/Random/S1_300.txt", "../Data/Random/S2_300.txt", "../Data/Random/S3_300.txt", "../Data/Random/S4_300.txt", "../Data/Random/S5_300.txt" };//数据集规模300
            //string[] filepath = { "../Data/Random/S1_200.txt", "../Data/Random/S2_200.txt", "../Data/Random/S3_200.txt", "../Data/Random/S4_200.txt", "../Data/Random/S5_200.txt" };//数据集规模200
            //string[] filepath = { "../Data/Random/S1_100.txt", "../Data/Random/S2_100.txt", "../Data/Random/S3_100.txt", "../Data/Random/S4_100.txt", "../Data/Random/S5_100.txt" };//数据集规模100

            GA_Server        bestserver = new GA_Server();
            List <GA_Server> scrlist    = new List <GA_Server>();

            List <Server>[] wlist = new List <Server> [ConstNum.PARTICE_DIM];
            double          fit = 0, totaltime = 0;

            wlist = GetData.splitedatafromfile(filepath, ConstNum.PARTICE_DIM);
            Timing dobj     = new Timing();
            int    sum      = 0;
            double totalfit = 0;
            double RMSE     = 0;

            double[] ttfit = new double[101];
            for (int i = 0; i < 100; i++)
            {
                scrlist = GA_Server.GetinitGA_server(wlist);

                dobj.startTime();
                bestserver = GA.GetBest(scrlist, wlist, ref fit);
                dobj.StopTime();

                totaltime += dobj.Result().Milliseconds;
                totaltime += dobj.Result().Seconds * 1000;
                totalfit  += fit;
                ttfit[i]   = fit;

                if (Math.Abs(fit - 0.5608) <= 0.0005)//QWS--500,400
                {
                    sum++;
                }
                //if (Math.Abs(fit - 0.6835) <= 0.0005)//QWS-300
                //{
                //    sum++;
                //}
                //if (Math.Abs(fit - 0.7802) <= 0.0005)//QWS-200
                //{
                //    sum++;
                //}
                //if (Math.Abs(fit - 0.8733) <= 0.0005)//QWS-100
                //{
                //    sum++;
                //}

                //if (Math.Abs(fit - 1.4482) <= 0.0005)//RWS--500
                //{
                //    sum++;
                //}
                //if (Math.Abs(fit - 1.4569) <= 0.0005)//RWS--400
                //{
                //    sum++;
                //}
                //if (Math.Abs(fit - 1.4742) <= 0.0005)//RWS--300
                //{
                //    sum++;
                //}
                //if (Math.Abs(fit - 1.5292) <= 0.0005)//RWS--200
                //{
                //    sum++;
                //}
                //if (Math.Abs(fit - 1.5711) <= 0.0005)//RWS--100
                //{
                //    sum++;
                //}
                Console.WriteLine("Best fit={0}", fit);
                Console.WriteLine("The Best combination is {0},{1},{2},{3},{4}", bestserver.getIndextask(0), bestserver.getIndextask(1), bestserver.getIndextask(2), bestserver.getIndextask(3), bestserver.getIndextask(4));

                Console.WriteLine("The time cost is {0}ms,{1}s,********{2}", dobj.Result().Milliseconds, dobj.Result().Seconds, sum);
            }
            //求均方根误差
            for (int i = 0; i < 100; i++)
            {
                RMSE += (ttfit[i] - totalfit / 100) * (ttfit[i] - totalfit / 100);
            }
            RMSE = RMSE / 100;
            RMSE = Math.Sqrt(RMSE);
            //Console.WriteLine("Average is {0},time is {1},RMSE is {2},*******{3}", totalfit/ 100, totaltime / 100,RMSE,(double)sum/100);
            Console.WriteLine("Average is {0}", totalfit / 100);
            Console.WriteLine("time is {0}", totaltime / 100);
            Console.WriteLine("RMSE is {0}", RMSE);
            Console.WriteLine("*******{0}", (double)sum / 100);
            Console.ReadKey();
        }
Exemple #4
0
        static void Main(string[] args)
        {
            int numberOfGenerations = 50;

            string[,] results = new string[numberOfGenerations, 7];



            for (int i = 0; i < numberOfGenerations; i++)
            {
                Console.Clear();
                Console.Write($"Number of Executions {i + 1}/{numberOfGenerations}");

                GA ga = new GA();

                ga.firstPop();
                ga.population = ga.population.OrderByDescending(x => x.fitness).ToList();

                int    geracoesComResultadoIgual = 0;
                double melhorFitness             = 0;

                for (int j = 0; j < ga.NUMBER_GENERATIONS; j++)
                {
                    melhorFitness = ga.population.First().fitness;

                    ga.Crossover();
                    ga.Mutation();
                    ga.Elitism();
                    ga.NextGenerationSelection();

                    // Tratamento para retirar convergencia local
                    if (melhorFitness == ga.population.First().fitness)
                    {
                        geracoesComResultadoIgual++;
                    }
                    else
                    {
                        geracoesComResultadoIgual = 0;
                    }

                    if (geracoesComResultadoIgual == 6)
                    {
                        ga.firstPop();
                        geracoesComResultadoIgual = 0;
                    }
                }


                results[i, 0] = ga.POP_SIZE.ToString();
                results[i, 1] = ga.NUMBER_GENERATIONS.ToString();
                results[i, 2] = (100 * ga.MUTATION_RATE).ToString();
                results[i, 3] = (100 * ga.REPRODUCTION_RATE).ToString();
                results[i, 4] = ga.population.First().x.ToString("0.0000");
                results[i, 5] = ga.population.First().y.ToString("0.0000");
                results[i, 6] = ga.population.First().fitness.ToString("0.0000");
            }


            //Dá saída em um arquivo
            var nomeArquivo   = $"Results GA{DateTime.Now.ToString("yyyyMMdd-HHmmffff")}.txt";
            var fileDirectory = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + nomeArquivo;

            if (!System.IO.File.Exists(fileDirectory))
            {
                using (System.IO.File.Create(fileDirectory)) { }
            }

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileDirectory, true))
            {
                file.WriteLine("-------------------------- Results --------------------------\n\n");

                file.WriteLine(String.Format("Fitness|Execução|POP Size|Number of Generations|Mutation Rate|Crossover Rate|X      |Y"));
                for (int i = 0; i < numberOfGenerations; i++)
                {
                    file.WriteLine(String.Format("{7}|{0}|{1}|{2}|{3}|{4}|{5}|{6}",
                                                 (i + 1).ToString().PadRight(8),
                                                 results[i, 0].PadRight(20),
                                                 results[i, 1].PadRight(18),
                                                 (results[i, 2] + "%").PadRight(15),
                                                 (results[i, 3] + "%").PadRight(17),
                                                 results[i, 4].PadLeft(7),
                                                 results[i, 5].PadLeft(7),
                                                 results[i, 6].PadLeft(7)));
                }

                file.Write("\n\n------------------------------------------------------------------------");
            }

            System.Diagnostics.Process.Start(fileDirectory);
            Console.ReadKey();
            System.IO.File.Delete(fileDirectory);
        }
Exemple #5
0
    // Start is called before the first frame update
    void Start()
    {
        /*var watch = System.Diagnostics.Stopwatch.StartNew();
         *
         *
         * a = (NEAT.Person)ScriptableObject.CreateInstance("NEAT.Person");
         *
         * NEAT.GENES.Node a1 = new NEAT.GENES.Node(NEAT.GENES.Node.NODE.IN, 0);
         * NEAT.GENES.Node a2 = new NEAT.GENES.Node(NEAT.GENES.Node.NODE.IN, 1);
         * NEAT.GENES.Node b1 = new NEAT.GENES.Node(NEAT.GENES.Node.NODE.HIDDEN, 2);
         * NEAT.GENES.Node c1 = new NEAT.GENES.Node(NEAT.GENES.Node.NODE.HIDDEN, 3);
         * NEAT.GENES.Node d1 = new NEAT.GENES.Node(NEAT.GENES.Node.NODE.OUT, 4);
         * NEAT.GENES.Node d2 = new NEAT.GENES.Node(NEAT.GENES.Node.NODE.OUT, 5);
         *
         * NEAT.GENES.Connection a1b1 = new NEAT.GENES.Connection(a1.nb, b1.nb, 0.5f);
         * NEAT.GENES.Connection a2b1 = new NEAT.GENES.Connection(a2.nb, b1.nb, 0.5f);
         * NEAT.GENES.Connection b1c1 = new NEAT.GENES.Connection(b1.nb, c1.nb, 0.5f);
         * NEAT.GENES.Connection c1d1 = new NEAT.GENES.Connection(c1.nb, d1.nb, 0.5f);
         * NEAT.GENES.Connection a1d1 = new NEAT.GENES.Connection(a1.nb, d1.nb, 0.5f);
         * NEAT.GENES.Connection c1d2 = new NEAT.GENES.Connection(c1.nb, d2.nb, 0.5f);
         * NEAT.GENES.Connection b1d2 = new NEAT.GENES.Connection(b1.nb, d2.nb, 0.2f);
         * a.node_gene.Add(a1);
         * a.node_gene.Add(a2);
         * a.node_gene.Add(b1);
         * a.node_gene.Add(c1);
         * a.node_gene.Add(d1);
         * a.node_gene.Add(d2);
         *
         * a.node_connect.Add(a1b1);
         * a.node_connect.Add(a2b1);
         * a.node_connect.Add(b1c1);
         * a.node_connect.Add(c1d1);
         * a.node_connect.Add(a1d1);
         * a.node_connect.Add(c1d2);
         * a.node_connect.Add(b1d2);
         *
         * a.buildModel();
         * watch.Stop();
         * Debug.Log(watch.ElapsedMilliseconds);
         *
         * List<float> inputs = new List<float>();
         * inputs.Add(0.5f);
         * inputs.Add(0.5f);
         * Debug.Log(a.network.evaluate(inputs)[0]);
         * Debug.Log(a.network.evaluate(inputs)[1]);*/

        //a.instantiate();
        a.buildModel();

        //b.instantiate();
        b.buildModel();

        c.buildModel();

        foreach (NEAT.GENES.Connection connection in a.node_connect)
        {
            NEAT.GENES.Connection.addConnection(connection);
        }

        foreach (NEAT.GENES.Connection connection in b.node_connect)
        {
            NEAT.GENES.Connection.addConnection(connection);
        }

        foreach (NEAT.GENES.Connection connection in c.node_connect)
        {
            NEAT.GENES.Connection.addConnection(connection);
        }

        List <NEAT.Person> population = new List <NEAT.Person>();

        population.Add(a);
        population.Add(b);
        population.Add(c);

        Debug.Log(a);
        Debug.Log(b);
        Debug.Log(c);
        NEAT.GENES.Connection.global_innov = 7;

        ga = new GA.GA <NEAT.Person>(population, new GA.Selection.NEAT_Selection(), new GA.Crossover.NEAT_Crossover(), new GA.Mutation.NEAT_Mutation(), new GA.Fitness.NEAT_Fitness(), 10, 0.05f, 0.2f);
        //ga.breed();

        //for (int i = 0; i < ga.results.Count; i++)
        //    Debug.Log(ga.results[i]);
        //a.network.randomizeWeight();
        chosen = a;
    }