Ejemplo n.º 1
0
        public GAs(int m_Population_size, int m_IndividualLength, RadialNetwork RadialNetwork, double m_MaxIterations, double[][] inputData)
        {
            this.m_Population_size  = m_Population_size;
            this.m_IndividualLength = m_IndividualLength;
            this.m_Random           = new Random();
            this.Population         = new Population_GA(m_Population_size);
            this.m_RadialNetwork    = RadialNetwork;
            this.m_MaxIterations    = m_MaxIterations;

            this.Population.Population_init(m_IndividualLength);
            // set fitness
            for (int i = 0; i < m_Population_size; i++)
            {
                CalculateFitnessOf(Population.Individuals[i], inputData);
            }
        }
Ejemplo n.º 2
0
        // Đây là quá trình tiến hóa của GA nhé
        public void Reproduction(double[][] inputData)
        {
            for (int i = 0; i < m_MaxIterations; i++)
            {
                Population_GA pop_temp = new Population_GA(m_Population_size); // tao mot population tam
                pop_temp = (Population_GA)Population.Clone();
                // Duyệt qua tất cả các cá thể trong quần thể
                for (int index = 0; index < m_Population_size; index++)
                {
                    Individual_GA currIndividual = pop_temp.Individuals[index];
                    int           sol1           = (int)(m_Random.NextDouble() * (m_Population_size - 1));
                    int           sol2           = (int)(m_Random.NextDouble() * (m_Population_size - 1));

                    Individual_GA solution1 = pop_temp.Individuals[sol1];
                    Individual_GA solution2 = pop_temp.Individuals[sol2];

                    while (sol1 == sol2)
                    {
                        sol2      = (int)(m_Random.NextDouble() * (m_Population_size - 1));
                        solution2 = pop_temp.Individuals[sol2];
                    }
                    Individual_GA[] Childs = DoCrossover(solution1, solution2);//DoCrossover(solution1, solution2);//
                    DoMutation(Childs[0]);
                    DoMutation(Childs[1]);
                    // tính toán lại độ thích nghi và từ đó tính ra MSE của cá thể đang xét
                    double MSE_temp1 = CalculateFitnessOf(Childs[0], inputData);
                    double MSE_temp2 = CalculateFitnessOf(Childs[1], inputData);
                    // Chọn lọc
                    // chỉ với những cái cho ra MSE tốt thì mới được cho vào thế hệ mới, còn không vẫn giữ những cái cũ
                    if (MSE_temp1 > MSE_temp2)
                    {
                        if (MSE_temp1 > currIndividual.Fitness)
                        {
                            Childs[0].Values.CopyTo(Population.Individuals[index].Values, 0);
                        }
                    }
                    else
                    {
                        if (MSE_temp2 > currIndividual.Fitness)
                        {
                            Childs[1].Values.CopyTo(Population.Individuals[index].Values, 0);
                        }
                    }
                }
            }
        }