Exemplo n.º 1
0
        public CChromosome Crossbreeding(CChromosome rChromosomePartner)
        {
            CChromosome rChild        = new CChromosome(m_rLaw);
            IList <int> aGensToChange = new List <int>();

            for (int i = 0; i < m_aGens.Length; i++)
            {
                double fDecision = SCRandom.Random;
                if ((0.5 * m_rLaw.CrossbreedingChance) > fDecision)
                {
                    aGensToChange.Add(m_aGens[i]);
                }
            }
            int[] aSelectedLocuses = FindLocusesWithValues(aGensToChange.ToArray()),
            aSelectedLocusesPartner    = rChromosomePartner.FindLocusesWithValues(aGensToChange.ToArray()),
            aNotSelectedLocuses        = NotSelectedLocuses(aSelectedLocuses),
            aNotSelectedLocusesPartner = rChromosomePartner.NotSelectedLocuses(aSelectedLocusesPartner),
            aChildGens = new int[m_rLaw.GensCount];
            int iNonSelectedIndex = 0;

            for (int i = 0; i < aChildGens.Length; i++)
            {
                if (IsNotPresentInSequence(i, aNotSelectedLocusesPartner))
                {
                    aChildGens[i] = rChromosomePartner.m_aGens[i];
                }
                else
                {
                    aChildGens[i] = m_aGens[aNotSelectedLocuses[iNonSelectedIndex]];
                    iNonSelectedIndex++;
                }
            }
            rChild.Gens = aChildGens;
            return(rChild);
        }
Exemplo n.º 2
0
        public void TestCrossBreeding()
        {
            CChromosome rFirst  = new CChromosome(m_rLaw),
                        rSecond = new CChromosome(m_rLaw),
                        rChild  = null;

            Console.WriteLine(rFirst.ToString());
            Console.WriteLine(rSecond.ToString());
            rChild = rFirst.Crossbreeding(rSecond);
            Console.WriteLine(rChild.ToString());
            rChild = rSecond.Crossbreeding(rFirst);
            Console.WriteLine(rChild.ToString());
        }
Exemplo n.º 3
0
        public double UpdateGrade(CChromosome rChromosome)
        {
            double fPathDistance = 0;

            int[] aGens      = rChromosome.Gens;
            int   iLastIndex = aGens.Length - 1;

            for (int i = 0; i < iLastIndex; i++)
            {
                fPathDistance += aDistancesGraph[aGens[i]][aGens[i + 1]];
            }
            fPathDistance += aDistancesGraph[aGens[iLastIndex]][aGens[0]];
            return(fPathDistance);
        }
Exemplo n.º 4
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);
         }
     }
 }
Exemplo n.º 5
0
 private void AddChromosome(CChromosome rChromosome)
 {
     m_aChromosomes.Add(rChromosome);
     GroupSize++;
 }