Beispiel #1
0
        public CGroup Selection()
        {
            CGroup rSelectedGroup = new CGroup(m_rUpdater, m_rLaw);

            m_sSelectionLog = "";
            double[] aSelectionPercents = new double[GroupSize];
            double   fGradesSum         = 0;

            for (int i = 0; i < GroupSize; i++)
            {
                fGradesSum += GetGradeAtChromosome(i);
            }
            double fAvgGrade         = fGradesSum / GroupSize;
            double fReverseGradesSum = 0;

            for (int i = 0; i < GroupSize; i++)
            {
                //aSelectionPercents[i] = fGradesSum - GetGradeAtChromosome(i);
                //fReverseGradesSum += aSelectionPercents[i];
                aSelectionPercents[i] = fAvgGrade / GetGradeAtChromosome(i);
                fReverseGradesSum    += aSelectionPercents[i];
            }
            for (int i = 0; i < GroupSize; i++)
            {
                aSelectionPercents[i] = aSelectionPercents[i] / fReverseGradesSum;
            }
            UpdateSelectionLog(aSelectionPercents);
            for (int i = 0; i < GroupSize; i++)
            {
                double fRandom = SCRandom.Random;
                rSelectedGroup.AddChromosome(m_aChromosomes[GetNumberInGroup(fRandom, aSelectionPercents)]);
            }
            return(rSelectedGroup);
        }
Beispiel #2
0
        public void Evolution()
        {
            CGroup rChilds = m_rPopulation.Selection().Crossbreeding();

            rChilds.Mutate();
            m_rPopulation.GenerateNewGroup(rChilds);
        }
Beispiel #3
0
 public void GenerateNewGroup(CGroup rNewbies)
 {
     for (int i = 0; i < rNewbies.GroupSize; i++)
     {
         CChromosome rNewChromosome        = rNewbies.m_aChromosomes[i];
         int         iWorstChromosomeIndex = GetWorst();
         double      fWorstGrade           = GetGradeAtChromosome(iWorstChromosomeIndex);
         double      fNewChromosomeGrade   = rNewbies.GetGradeAtChromosome(i);
         if (fNewChromosomeGrade < fWorstGrade)
         {
             m_aChromosomes.Remove(m_aChromosomes[iWorstChromosomeIndex]);
             m_aChromosomes.Add(rNewChromosome);
         }
     }
 }
        public void TestSelection()
        {
            m_rPopulation = new CGroup(m_rGraph, m_rLaw);
            m_rPopulation.GenerateChromosomes(m_rLaw.PopulationSize);
            Console.WriteLine(m_rPopulation.ToString());
            CGroup rSelection = m_rPopulation.Selection();

            Console.WriteLine(m_rPopulation.m_sSelectionLog);
            Console.WriteLine(rSelection.ToString());
            Console.WriteLine(rSelection.Crossbreeding().ToString());

            double fLastBestGrade = m_rPopulation.GetBestGrade();

            Console.WriteLine(fLastBestGrade.ToString());
            fLastBestGrade = rSelection.GetBestGrade();
            Console.WriteLine(fLastBestGrade.ToString());
        }
Beispiel #5
0
        public CGroup Crossbreeding()
        {
            CGroup rChilds        = new CGroup(m_rUpdater, m_rLaw);
            int    iFirstCrossing = -1;

            for (int i = 0; i < GroupSize; i++)
            {
                double fDecision = SCRandom.Random;
                if (m_rLaw.CrossbreedingChance > fDecision)
                {
                    if (iFirstCrossing == -1)
                    {
                        iFirstCrossing = i;
                    }
                    else
                    {
                        rChilds.AddChromosome(m_aChromosomes[iFirstCrossing].Crossbreeding
                                                  (m_aChromosomes[i]));
                        iFirstCrossing = -1;
                    }
                }
            }
            return(rChilds);
        }
Beispiel #6
0
 public void InitializeGroup()
 {
     m_rPopulation = new CGroup(m_rUpdater, m_rLaw);
     m_rPopulation.GenerateChromosomes(m_rLaw.PopulationSize);
     m_fLastBestGrade = m_rPopulation.GetBestGrade();
 }