<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      編程 & 生活 -- 西西吹雪

      開心工作,快樂生活 (原創文章,轉載請注明出處)

      導航

      采用浮點數編碼的遺傳算法的問題

        最近學習了一下遺傳算法,于是參考了一篇論文,采用浮點數編碼寫了一個算法,運行了一下,發布收斂很慢,遺傳了幾百代與幾十代相比,只是略顯穩定,隨機性比較強。而且容易限入局部極值中。例如,我以求函數xsin(10PI*x)+2.0為例,最大值大約在x=1.85附近,在x=1.65附近有一個局部極值。我寫的算法大約70%的機會取得1.85附近的值,30%機會取得1.65附近的值。總之效果不理想。不知有沒有朋友有興趣幫我看一下。


        初始化種群

              public List<PopUnit> InitPop()
              {
                  
      if (CalculateFitnessHanler == null)
                      
      throw new Exception("未設置計算表達式的事件CalculateHanler");
                  
      if (m_Parameters.PopSize<=10)
                      
      throw new Exception("種群數太小");

                  List
      <PopUnit> pool = new List<PopUnit>();
                   
                  
      for (int i = 0; i <= m_Parameters.PopSize-1; i++)
                  {
                      
      double d = m_Random.NextDouble();
                      d 
      = m_Parameters.L + (m_Parameters.R - m_Parameters.L) * d;
                      
      double val= CalculateFitnessHanler(new double[] { d });
                      PopUnit unit 
      = new PopUnit(d, val);
                      pool.Add(unit);
                  }
                  
      return pool;
              }


        選擇操作

      public List<PopUnit> Select(List<PopUnit> data)
              {
                  
      int dropoutCount = (int)(m_Parameters.DropoutRate * data.Count);

                  List
      <PopUnit> newpool = new List<PopUnit>();
                  
      for (int i = 0; i <= dropoutCount - 1; i++)
                  {
                      newpool.Add(data[i].Clone() 
      as PopUnit);
                      newpool.Add(data[i].Clone() 
      as PopUnit);
                  }
                  
      int tmpCount = data.Count - newpool.Count;
                  
      for (int i = dropoutCount; i <= dropoutCount + tmpCount - 1; i++)
                  {
                      newpool.Add(data[i].Clone() 
      as PopUnit);
                  }
                  
      return newpool;
              }


        交叉操作:

       

      public void CrossOver(double a,double b,out double a1,out double b1)
              {
                  
      if (m_Random.NextDouble() > m_Parameters.CrossOverRate)
                  {
                      a1 
      = a;
                      b1 
      = b;
                      
      return;
                  }
                   

                  
      double r = 0.1;
                  
      double a2 = m_Random.NextDouble() * r;
                  
      double b2 = m_Random.NextDouble() * r;

                  a1 
      = (1 - a2) * a + b2 * b;
                  b1 
      = (1 - b2) * b + a2 * a;
                 
                  
                  
      if (a1 < m_Parameters.L)
                      a1 
      = m_Parameters.L;
                  
      if (b1 < m_Parameters.L)
                      b1 
      = m_Parameters.L;
                  
      if (a1 > m_Parameters.R)
                      a1 
      = m_Parameters.R;
                  
      if (b1 > m_Parameters.R)
                      b1 
      = m_Parameters.R;
                  
      //Console.WriteLine("crossover a1={0},b1={1}  ->  a2={2},b2={3}", a, b, a1, b1); 
              }


        變異操作:

       

      public double Mutation(double c)
              {
                  
      double tmpd = m_Random.NextDouble();
                  
      if (tmpd > m_Parameters.MutateRate)
                  {
                      
      return c;
                  }
                              
                  
      double k = 0.2;
                  
      //k = (m_Parameters.MaxGenerations-T)/ (m_Parameters.MaxGenerations + 2D) * 0.4D;
                  double res;
                  
      if (m_Random.Next(2== 1)
                  {
                      res 
      = c + k * (m_Parameters.R - c) *m_Random.NextDouble();
                  }
                  
      else
                  {
                      res 
      = c - k * (c - m_Parameters.L) *m_Random.NextDouble();
                  }
                  
      //Console.WriteLine("mutation: {0} -> {1}", c, res); 

                  
      return res;
              }


       種群大小=100,交叉概率=0.7,變異概率=0.1

       

      posted on 2010-10-13 14:59  西西吹雪  閱讀(2264)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国产精品亚洲二区在线播放| 亚洲精品宾馆在线精品酒店| 97欧美精品系列一区二区| 亚洲香蕉av一区二区蜜桃| 欧美和黑人xxxx猛交视频| 亚洲春色在线视频| 无码成人精品区在线观看| 水蜜桃av无码| 国内精品久久人妻无码不卡| 欧美韩中文精品有码视频在线 | 色秀网在线观看视频免费| 亚洲中文字幕精品第三区| 国产精品一区中文字幕| 看免费的无码区特aa毛片| 国产午夜福利精品视频| 性色av无码久久一区二区三区| 无码中文字幕人妻在线一区| 国产精品伦人一久二久三久| 亚洲av无码片在线播放| 综合色一色综合久久网| 长腿校花无力呻吟娇喘| 午夜成人鲁丝片午夜精品| 熟妇的味道hd中文字幕| 亚洲色大成网站WWW永久麻豆 | 色综合 图片区 小说区| 大香网伊人久久综合网2020| 亚洲精品无码成人A片九色播放| 99热久久这里只有精品| 久久香蕉国产线看观看猫咪av| 大屁股国产白浆一二区| 亚洲精品美女一区二区| 无码天堂va亚洲va在线va| 99久久亚洲综合精品成人| 日韩中文字幕V亚洲中文字幕| 亚洲天堂av日韩精品| 国产成人精品性色av麻豆| 国产伦码精品一区二区| 津南区| 麻豆精品久久精品色综合| 亚洲AV国产福利精品在现观看| 亚洲色大成网站www久久九九|