Ejemplo n.º 1
0
        /// <summary>
        /// Метод простой не умной генерации на основе случайных чисел
        /// </summary>
        /// <param name="nextgeneration">номер следующего поколения</param>
        public void CreateNextGenerationSimple(int nextgeneration, List <int> NoizeList)
        {
            //ИТАК НАЧНЕМ
            Random myRandomizer = new Random();
            int    startId;

            startId = 1000 * nextgeneration + 1;
            int   f, m;
            float myaver = new float();

            // цикл по кол-ву элементов в этом НОВОМ поколении
            for (int i = 0; i < MyConst.FILTERINGENERATION; i++)
            {
                OneFilter myNewfilter    = new OneFilter();
                OneFilter myFatherFilter = new OneFilter();
                OneFilter myMotherFilter = new OneFilter();
                f = 0;
                m = 0;
                while (f == m)
                {
                    f = myRandomizer.Next(MyConst.FILTERINGENERATION);
                    m = myRandomizer.Next(MyConst.FILTERINGENERATION);
                }
                myNewfilter.ID = startId;
                startId++;
                myFatherFilter = this.getMyOneFilterByGenerByIndex(nextgeneration - 1, f);
                myMotherFilter = this.getMyOneFilterByGenerByIndex(nextgeneration - 1, m);
                //пока механизм генерации очень прост
                for (int j = 0; j < myFatherFilter.countOfFilterData; j++)
                {
                    myaver = (myFatherFilter.data[j] + myMotherFilter.data[j]) / 2;
                    myNewfilter.data.Add(myaver);
                }
                myNewfilter.countOfFilterData = myFatherFilter.countOfFilterData;
                myNewfilter.fatherID          = myFatherFilter.ID;
                myNewfilter.motherID          = myMotherFilter.ID;
                myNewfilter.Normalize();
                //  myNewfilter.CalcFurier();
                this.generationList[nextgeneration].Add(myNewfilter); // и самая главная на сегодня строчка
            } //цикл по кол-ву новых фильтров в поколении

            int popitka = 0;

            while ((MyConst.isNessMutation(this._generationList[nextgeneration])) && (popitka < 1))
            {
                this._generationList[nextgeneration].AddRandomNoize(NoizeList);
                popitka++;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Основная функция генерация
        /// </summary>
        /// <param name="nextgeneration"> номер будующего поколения </param>
        /// <param name="rate_skolko_ost_starih">Сколько процентов оставить старых от полного числа фильтра в этих поколениях</param>
        public void CreateNextGeneration(int nextgeneration, float rate_skolko_ost_starih, List <int> myNoize, int kolvovpokolenii)
        {
            //тут предполагаем что в в элементе
            //generationlist[nextgeneration-1] уже сидят фильтры
            // и они упорядочены по убыванитю нужного нам критерия
            // добавим их сначала в наше новое поколение
            OneFilter tempFilter = new OneFilter();

            //for (int i = 0; i < rate_skolko_ost_starih * MyConst.FILTERINGENERATION[nextgeneration - 1]; i++)
            for (int i = 0; i < rate_skolko_ost_starih * kolvovpokolenii; i++)
            {
                tempFilter = this.getMyOneFilterByGenerByIndex(nextgeneration - 1, i);
                this.generationList[nextgeneration].Add(tempFilter);
            }
            Random myRandomizer = new Random();
            int    startId;

            startId = 1000 * nextgeneration + 1;
            int   f, m;
            float myaver = new float();

            //for (int i = 0; i < (1 - rate_skolko_ost_starih) * MyConst.FILTERINGENERATION[nextgeneration]; i++)
            for (int i = 0; i < (1 - rate_skolko_ost_starih) * kolvovpokolenii; i++)

            {
                OneFilter myNewfilter    = new OneFilter();
                OneFilter myFatherFilter = new OneFilter();
                OneFilter myMotherFilter = new OneFilter();

                f = 0;
                m = 0;

                while (f == m)
                {
                    //f = myRandomizer.Next(MyConst.FILTERINGENERATION[nextgeneration - 1] / 2); //наполовину потому что фильтры отсортированы по крутизне в порядке убывания и нужно только от лучших потомки
                    //m = myRandomizer.Next(MyConst.FILTERINGENERATION[nextgeneration - 1] / 2);
                    f = myRandomizer.Next((int)Math.Round(kolvovpokolenii * rate_skolko_ost_starih)); //наполовину потому что фильтры отсортированы по крутизне в порядке убывания и нужно только от лучших потомки
                    m = myRandomizer.Next((int)Math.Round(kolvovpokolenii * rate_skolko_ost_starih));
                }
                myNewfilter.ID = startId;
                startId++;
                myFatherFilter = this.getMyOneFilterByGenerByIndex(nextgeneration - 1, f);
                myMotherFilter = this.getMyOneFilterByGenerByIndex(nextgeneration - 1, m);
                //пока механизм генерации очень прост
                for (int j = 0; j < myFatherFilter.countOfFilterData; j++)
                {
                    myaver = (myFatherFilter.data[j] + myMotherFilter.data[j]) / 2;
                    myNewfilter.data.Add(myaver);
                }
                myNewfilter.countOfFilterData = myFatherFilter.countOfFilterData;
                myNewfilter.fatherID          = myFatherFilter.ID;
                myNewfilter.motherID          = myMotherFilter.ID;
                myNewfilter.Normalize();
                //   myNewfilter.CalcFurier();
                this.generationList[nextgeneration].Add(myNewfilter); // и самая главная на сегодня строчка
            }
            //на этом этапе новое поколение сформировано полностью
            //теперь проверим его и при необходимости запустим мутацию


            int popitka = 0;

            while ((MyConst.isNessMutation(this._generationList[nextgeneration])) && (popitka < 1))
            {
                this._generationList[nextgeneration].AddRandomNoize(myNoize);
                popitka++;
            }
        }  //CreateNextGeneration