<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Coundy

       漫步風中,傾聽自己的腳步,在自我沉浸中,找尋逝去的靈魂

    posts - 27,comments - 2,trackbacks - 0

    (轉自)http://www.cnblogs.com/waterflier/archive/2006/12/04/153545.html

    現代生物遺傳學中描述的生物進化理論:
    遺傳物質的主要載體是染色體(chromsome),染色體主要由DNA和蛋白質組成。其中DNA為最主要的遺傳物質。
    基因(gene)是有遺傳效應的片斷,它存儲著遺傳信息,可以準確地復制,也能發生突變,并可通過控制蛋白質的合成而控制生物的狀態.生物自身通過對基因的復制(reproduction)和交叉(crossover,即基因分離,基因組合和基因連鎖互換)的操作時其性狀的遺傳得到選擇和控制。生物的遺傳特性,使生物界的物種能保持相對的穩定;生物的變異特性,使生物個體產生新的性狀,以至于形成了新的物種(量變積累為質變),推動了生物的進化和發展。

    遺傳學算法和遺傳學中的基礎術語比較

    染色體(chromosome)    數據,數組,序列
    基因(gene) 單個元素,位
    等位基因(allele) 數據值,屬性,值
    基因座(locus)  位置,iterator位置
    表現型(phenotype)  參數集,解碼結構,候選解
    遺傳隱匿(epistasis)  非線性

    染色體又可以叫做基因型個體(individuals),一定數量的個體組成了群體(population),群體中個體的數量叫做群體大小。各個個體對環境的適應程度叫做適應度(fitness)

    遺傳算法的準備工作:
    1)數據轉換操作,包括表現型到基因型的轉換和基因型到表現型的轉換。前者是把求解空間中的參數轉化成遺傳空間中的染色體或者個體(encoding),后者是它的逆操作(decoding)
    2)確定適應度計算函數,可以將個體值經過該函數轉換為該個體的適應度,該適應度的高低要能充分反映該個體對于解得優秀程度。非常重要的過程!

    遺傳算法的基本步驟
    遺傳算法是具有"生成+檢測"(generate-and-test)的迭代過程的搜索算法。
    基本過程為:
    1)編碼,創建初始集團
    2)集團中個體適應度計算
    3)評估適應度
    4)根據適應度選擇個體
    5)被選擇個體進行交叉繁殖,
    6)在繁殖的過程中引入變異機制
    7)繁殖出新的集團,回到第二步

    一個簡單的遺傳算法的例子:求 [0,31]范圍內的y=(x-10)^2的最小值
    1)編碼算法選擇為"將x轉化為2進制的串",串的長度為5位。(等位基因的值為0 or 1)
    2)計算適應度的方法是:先將個體串進行解碼,轉化為int型的x值,然后使用y=(x-10)^2作為其適應度計算合適(由于是最小值,所以結果越小,適應度也越好)
    3)正式開始,先設置群體大小為4,然后初始化群體 => (在[0,31]范圍內隨機選取4個整數就可以,編碼)
    4)計算適應度Fi(由于是最小值,可以選取一個大的基準線1000,Fi = 1000 - (x-10)^2)
    5)計算每個個體的選擇概率.選擇概率要能夠反映個體的優秀程度.這里用一個很簡單的方法來確定選擇概率
    P=Fi / TOTAL(Fi).
    6)選擇.
    根據所有個體的選擇概率進行淘汰選擇.這里使用的是一個賭輪的方式進行淘汰選擇.先按照每個個體的選擇概率創建一個賭輪,然后選取4次,每次先產生一個0-1的隨機小數,然后判斷該隨機數落在那個段內就選取相對應的個體.這個過程中,選取概率P高的個體將可能被多次選擇,而概率低的就可能被淘汰.

    下面是一個簡單的賭輪的例子
       13%               35%                    15%                 37%       
    ----------|----------------------------|------------|-*-------------------------|
       個體1              個體2                  個體3    ^0.67    個體4

    隨機數為0.67落在了個體4的端內.本次選擇了個體4. 

    被選中的個體將進入配對庫(mating pool,配對集團)準備開始繁殖.
    7)簡單交叉
    先對配對庫中的個體進行隨機配對.然后在配對的2個個體中設置交叉點,交換2個個體的信息后產生下一代.
    比如( | 代表簡單串的交叉位置)
     ( 0110|1, 1100|0 ) --交叉--> (01100,11001)
     ( 01|000, 11|011 ) --交叉--> (01011,11000)
    2個父代的個體在交叉后繁殖出了下一代的同樣數量的個體.
    復雜的交叉在交叉的位置,交叉的方法,雙親的數量上都可以選擇.其目的都在于盡可能的培育出更優秀的后

    8)變異
    變異操作時按照基因座來的.比如說沒計算2萬個基因座就發生一個變異(我們現在的每個個體有5個基因座.也就是說要進化1000代后才會在其中的某個基因座發生一次變異.)變異的結果是基因座上的等位基因發生了變化.我們這里的例子就是把0變成1或則1變成0.
    至此,我們已經產生了一個新的(下一代)集團.然后回到第4步,周而復始,生生不息下去:)

    偽代碼實例(適合愛看代碼的朋友~):

    //Init population
    foreach individual in population
    {
         individual = Encode(Random(0,31));
    }

    while (App.IsRun)

         //計算個體適應度
         int TotalF = 0;
         foreach individual in population
         {
          individual.F = 1000 - (Decode(individual)-10)^2;
          TotalF += individual.F;
         }

         //------選擇過程,計算個體選擇概率-----------
         foreach individual in population
         {
              individual.P = individual.F / TotalF;
         }
         //選擇
         for(int i=0;i<4;i++)
         {
              //SelectIndividual(float p)是根據隨機數落在段落計算選取哪個個體的函數
              MatingPool[i] = population[SelectIndividual(Random(0,1))];
         }
         //-------簡單交叉---------------------------
         //由于只有4個個體,配對2次
         for(int i=0;i<2;i++)
         {
              MatingPool.Parents[i].Mother = MatingPool.RandomPop();
              MatingPool.Parents[i].Father = MatingPool.RandomPop();
            }

         //交叉后創建新的集團
         population.Clean();
         foreach Parent in MatingPool.Parents
         {
              //注意在copy 雙親的染色體時在某個基因座上發生的變異未表現.
              child1 = Parent.Mother.DivHeader + Parent.Father.DivEnd;
              child2 = Parent.Father.DivHeader + Parent.Mother.DivEnd;
              population.push(child1);
              population.push(child2);
         }

    小結:
    遺傳算法中最重要的過程就是選擇和交叉。
    選擇要能夠合理的反映"適者生存"的自然法則,而交叉必須將由利的基因盡量遺傳給下一代(這個算法很關鍵!)
    還有就是編碼的過程要能夠使編碼后的染色體能充分反映個體的特征并且能夠方便計算。

    posted on 2007-04-10 13:57 Coundy 閱讀(349) 評論(0)  編輯  收藏 所屬分類: Algorithm

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲成a∨人片在无码2023| 亚洲狠狠狠一区二区三区| 免费一级特黄特色大片 | 丁香花免费完整高清观看| 久久久亚洲精品国产| 国产精品99久久免费观看| 久久综合图区亚洲综合图区| 在线观看免费视频一区| 亚洲AV无码专区亚洲AV伊甸园| 三年片在线观看免费西瓜视频| 亚洲AV综合色区无码一区| 精品熟女少妇av免费久久| 亚洲免费在线视频播放| 女人18毛片a级毛片免费视频| 精品国产亚洲一区二区三区在线观看 | 亚洲娇小性xxxx| 成年女人视频网站免费m| 亚洲国产精品成人午夜在线观看| 在线A级毛片无码免费真人| 久久久久亚洲AV无码去区首| 亚洲成AV人在线观看网址| 国产久爱免费精品视频| 亚洲男人天堂2017| 好吊妞788免费视频播放| 美女视频黄频a免费| 中文字幕人成人乱码亚洲电影| 黄页免费在线观看| 亚洲偷自精品三十六区| 全部免费国产潢色一级| a国产成人免费视频| 亚洲人成人77777在线播放| 在线日韩av永久免费观看| 黄色短视频免费看| 亚洲天堂一区二区三区四区| 日韩人妻无码免费视频一区二区三区| 春意影院午夜爽爽爽免费| 久久精品国产96精品亚洲| 在线a级毛片免费视频| 久久www免费人成精品香蕉| 精品亚洲成在人线AV无码| 亚洲无码精品浪潮|