/// <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++;
            }
        }
示例#2
0
        //public int CompareTo(object obj)
        //{
        //    if (obj == null) return 1;
        //    OneFilter otherFilter= obj as OneFilter;
        //    if (otherFilter != null)
        //        return this._averOfDiffAver_for_rating.CompareTo(otherFilter._averOfDiffAver_for_rating);
        //    else
        //        throw new ArgumentException("Object is not a Temperature");
        //}

        //public int CompareTo(object obj)
        //{
        //    if (obj == null) return 1;
        //    OneFilter otherFilter = obj as OneFilter;
        //    if (otherFilter != null)
        //        return this._averOfDiffAver_for_rating.CompareTo(otherFilter._averOfDiffAver_for_rating);
        //    else
        //        throw new ArgumentException("Object is not a Temperature");
        //}

        public int CompareTo(object obj)
        {
            if (obj == null)
            {
                return(1);
            }
            OneFilter otherFilter = obj as OneFilter;

            if (otherFilter != null)
            {
                switch ((int)MyConst.whatIsFitness)
                {
                case (int)1:
                    return(this._averOfDiffAver_for_rating.CompareTo(otherFilter._averOfDiffAver_for_rating));

                    break;

                case (int)2:
                    return(this._averOfMaxDiff_for_rating.CompareTo(otherFilter._averOfMaxDiff_for_rating));

                    break;

                case (int)3:
                    return(this._averOfABSMAX12_for_rating.CompareTo(otherFilter._averOfABSMAX12_for_rating));

                    break;

                default:
                    return(this._averOfMaxDiff_for_rating.CompareTo(otherFilter._averOfMaxDiff_for_rating));

                    break;
                }
            }

            //case  MyConst.whatIsFitness:
            //    return this._averOfMaxDiff_for_rating.CompareTo(otherFilter._averOfMaxDiff_for_rating);


            else
            {
                throw new ArgumentException("Object is not a Temperature");
            }
        }
        /// <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