Esempio n. 1
0
        /// <summary>
        /// Редактирование популяции.
        /// </summary>
        /// <remarks>Для разнообразия пытаемся добавить случайное антитело, если его аффинность лучше чем у худшего антитела в популяции - заменяем.</remarks>
        private void Edit()
        {
            Antibody someAb = new Antibody();

            someAb.SetAffinnity(this.currentAg);
            if (someAb.Affinnity > abPopulation[PopulationAbSize - 1].Affinnity)
            {
                abPopulation[PopulationAbSize - 1] = someAb;
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Конструктор.
 /// </summary>
 /// <param name="ab">Антитело, взятое за основу при создании клетки памяти.</param>
 /// <param name="RecognizedNumber">Число, распознавать которое приспособлено антитело.</param>
 public MemoryCell(Antibody ab, int?RecognizedNumber)
 {
     this.RecognizedNumber = RecognizedNumber;
     this.Ag        = ab.Ag;
     this.Affinnity = ab.Affinnity;
     this.Pixels    = new bool[DemensionX, DemensionY];
     for (int i = 0; i < DemensionX; i++)
     {
         for (int j = 0; j < DemensionY; j++)
         {
             Pixels[i, j] = ab.Pixels[i, j];
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Клонирование антител с лучшей аффинностью.
        /// </summary>
        /// <param name="amount"></param>
        private void CloneBest(int amount)
        {
            List <Antibody> clones = new List <Antibody>();

            for (int i = 0; i < amount; i++)
            {
                int cloneAmount = abPopulation.Length / (i + 1);
                for (int j = 0; j < cloneAmount; j++)
                {
                    Antibody someClone = abPopulation[i].Clone();
                    clones.Add(someClone);
                }
            }
            clonePopulation = clones.ToArray();
        }
Esempio n. 4
0
        /// <summary>
        /// Оператор клонирования и замены.
        /// </summary>
        private void CloneReplace()
        {
            for (int i = 0; i < clonePopulation.Count(); i++)
            {
                clonePopulation[i].SetAffinnity(this.currentAg);
            }
            clonePopulation = BubbleSort(clonePopulation);
            Antibody bestAb = clonePopulation[0].Affinnity > abPopulation[0].Affinnity ? clonePopulation[0] : abPopulation[0];

            if (memCellsPopulation[this.currentAgNumber] != null)
            {
                if (bestAb.Affinnity > memCellsPopulation[this.currentAgNumber].Affinnity)
                {
                    memCellsPopulation[this.currentAgNumber] = new MemoryCell(bestAb, this.currentAg.RecognizedNumber);
                }
            }
            else
            {
                memCellsPopulation[this.currentAgNumber] = new MemoryCell(bestAb, this.currentAg.RecognizedNumber);
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Копирующий конструктор для антитела.
 /// </summary>
 /// <param name="ab">Антитело, с которого снимается копия.</param>
 public Antibody(Antibody ab)
 {
     this.Pixels    = (bool[, ])ab.Pixels.Clone();
     this.Ag        = ab.Ag;
     this.Affinnity = ab.Affinnity;
 }