Beispiel #1
0
 //Функция рождения поколения
 public void Born(int N)
 {
     for (int i = 0; i < N; i++)
     {
         Perseptron persi = new Perseptron(Neurons);
         persi.Initialization();
         PersiList.Add(persi);
     }
     n += N;
 }
Beispiel #2
0
        //Функция скрещивания, скрещивает всех особей по принципу:
        //слабый-><-сильный = новый
        //В результате популяция уменьшается в два раза, или увеличивается в 1 раз, (upPopulation = true)
        public void Crossbreeding(bool upPopulation)
        {
            //Новое поколение
            List<Perseptron> NewPersiList = new List<Perseptron>();
            //Скрещиваем
            for (int i = 0; i < n/2; i++)
            {
                Perseptron persi = new Perseptron(Neurons);
                //Скрещиваем скрытые нейроны
                for (int j = 0; j < Neurons; j++)
                {
                    for (int l = 0; l < 9; l++)
                        persi.InvisibleNeurons_1[j].weights[l] = PersiList[Change(i, n - i - 1)].InvisibleNeurons_1[j].weights[l];
                    for (int l = 0; l < Neurons; l++)
                    {
                        persi.InvisibleNeurons_2[j].weights[l] = PersiList[Change(i, n - i - 1)].InvisibleNeurons_2[j].weights[l];
                        persi.InvisibleNeurons_3[j].weights[l] = PersiList[Change(i, n - i - 1)].InvisibleNeurons_3[j].weights[l];
                    }

                }
                //Скрещиваем выходные нейроны
                for (int j = 0; j < Neurons; j++)
                    persi.on.weights[j] = PersiList[Change(i, n - i - 1)].on.weights[j];
                //Добавляем новую особь в список
                NewPersiList.Add(persi);
            }
            //Тут два варианта, либо добавлять особей
            if (upPopulation)
            {
                for (int i = 0; i < n/2; i++)
                    PersiList.Add(NewPersiList[i]);
                n += n/2;
            }
            else
            //либо замещать популяцию
            {
                PersiList.Clear();
                for (int i = 0; i < n/2; i++)
                    PersiList.Add(NewPersiList[i]);
                n = n / 2;
            }
        }
Beispiel #3
0
 //Функция игры
 public int Game(Perseptron persi_1, Perseptron persi_2, int f1, int f2)
 {
     int winner = 0;
     persi_1.game++;
     persi_2.game++;
     //Выбираем стороны
     persi_1.Fraction = f1;
     persi_2.Fraction = f2;
     if (persi_1.Fraction == -1)
     {
         for (int i = 0; i < 9; i++)
         {
             X = persi_1.GameStep(X);
             winner = WinController(X);
             if (winner != 0)
                 break;
             X = persi_2.GameStep(X);
             winner = WinController(X);
             if (winner != 0)
                 break;
         }
     }
     else if (persi_2.Fraction == -1)
     {
         for (int i = 0; i < 9; i++)
         {
             X = persi_2.GameStep(X);
             winner = WinController(X);
             if (winner != 0)
                 break;
             X = persi_1.GameStep(X);
             winner = WinController(X);
             if (winner != 0)
                 break;
         }
     }
     if (winner == persi_1.Fraction) persi_1.WinCounter++;
     else if (winner == persi_2.Fraction) persi_2.WinCounter++;
     //else if (winner == 0) { persi_1.WinCounter += 0.5; persi_2.WinCounter += 0.5; }
         //Обнуляем фракции
         persi_1.Fraction = 0;
     persi_2.Fraction = 0;
     return winner;
 }