Esempio n. 1
0
        private void Mutation()//добавляет новй геном изменяя один из существующих
        {
            Genom tmp = new Genom
            {
                age       = 0,
                del       = false,
                genomList = new List <int>(),
                t         = 'm'
            };

            int coutn = poolLIst.Count / 10;

            int begin    = coutn * 9;
            int numGenom = begin + random.Next(coutn);

            tmp.genomList = poolLIst[numGenom].genomList.GetRange(0, genomCount);

            int changGen = random.Next(genomCount);
            int genValue = random.Next(genCount);

            tmp.genomList[changGen] = genValue;

            tmp.Raiting(genCount, inputData, MO);
            poolLIst.Add(tmp);
        }
Esempio n. 2
0
        private void AddChildren()//создание дочернего генома из двух родительских
        {
            Genom tmp = new Genom
            {
                age       = 0,
                del       = false,
                genomList = new List <int>(),
                t         = 'c'
            };
            int   mid = poolLIst.Count / 2;
            Genom p1  = poolLIst[random.Next(mid)];
            Genom p2  = poolLIst[mid + random.Next(mid)];


            for (int i = 0; i < p1.genomList.Count; i++)
            {
                if (random.Next(2) == 0)
                {
                    tmp.genomList.Add(p1.genomList[i]);
                }
                else
                {
                    tmp.genomList.Add(p2.genomList[i]);
                }
            }
            tmp.Raiting(genCount, inputData, MO);
            poolLIst.Add(tmp);
        }
Esempio n. 3
0
        private void SoWeak()
        {
            int deathCount = poolLIst.Count * mortality / 100;

            for (int i = 0; i < deathCount; i++)
            {
                //if (poolLIst[i].age > maxAge / 10)
                {
                    Genom tmp = poolLIst[i];
                    tmp.del     = true;
                    tmp.dt      = 'w';
                    poolLIst[i] = tmp;
                }
            }
        }
Esempio n. 4
0
 private void SoAld()
 {
     if (maxAge != 0 && poolLIst.Count != 0)
     {
         for (int i = 0; i < poolLIst.Count; i++)
         {
             if (poolLIst[i].age > maxAge)
             {
                 Genom tmp = poolLIst[i];
                 tmp.del     = true;
                 tmp.dt      = 'a';
                 poolLIst[i] = tmp;
             }
         }
     }
 }
Esempio n. 5
0
 private void NotDouble()
 {
     for (int i = 0; i < poolLIst.Count - 1; i++)
     {
         for (int j = i + 1; j < poolLIst.Count; j++)
         {
             if (poolLIst[i].genomList.SequenceEqual(poolLIst[j].genomList))
             {
                 Genom tmp = poolLIst[i];
                 tmp.del     = true;
                 tmp.dt      = 'd';
                 poolLIst[i] = tmp;
             }
         }
     }
 }
Esempio n. 6
0
        private void AddRandom()//создание рандомнго генома !!!!!!!!!!!!
        {
            Genom tmp = new Genom
            {
                age       = 0,
                del       = false,
                genomList = new List <int>(),
                t         = 'r'
            };


            for (int i = 0; i < genomCount; i++)
            {
                tmp.genomList.Add(random.Next(genCount));
            }
            tmp.Raiting(genCount, inputData, MO);
            poolLIst.Add(tmp);
        }
Esempio n. 7
0
        private void Selection()
        {
//            Console.WriteLine("selection");

            for (int i = 0; i < poolLIst.Count; i++)//костыль
            {
                Genom tmp = poolLIst[i];
                tmp.age++;
                poolLIst[i] = tmp;
            }



            poolLIst.Sort(delegate(Genom g1, Genom g2)
            {
                return(g2.rate.CompareTo(g1.rate));
            });

            if (poolLIst.Last().rate <= best.rate)
            {
                best = poolLIst.Last();
            }
            if (best.genomList == null)
            {
                best.rate = 1000;
            }

            SoAld();
            SoWeak();
            NotDouble();

            poolLIst.RemoveAll(delegate(Genom x)
            {
                if (x.del && x.age > 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            });


            int curPoolSize = poolLIst.Count;
            int need        = poolSize - curPoolSize;
            int burn        = need * childCount / foolCount;
            int mut         = need * muttionCout / foolCount;

            //проодим скрещивания
            for (int i = 0; i < burn; i++)
            {
                AddChildren();
            }

            //проодим мутаации
            for (int i = 0; i < mut; i++)
            {
                Mutation();
            }

            while (poolLIst.Count < poolSize)
            {
                AddRandom();                              //дополняем пул случайными геномами
            }
        }