• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            winlinglin

            遺傳算法(轉)

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

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

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

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

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

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

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

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

            隨機數(shù)為0.67落在了個體4的端內(nèi).本次選擇了個體4. 

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

            8)變異
            變異操作時按照基因座來的.比如說沒計算2萬個基因座就發(fā)生一個變異(我們現(xiàn)在的每個個體有5個基因座.也就是說要進化1000代后才會在其中的某個基因座發(fā)生一次變異.)變異的結果是基因座上的等位基因發(fā)生了變化.我們這里的例子就是把0變成1或則1變成0.
            至此,我們已經(jīng)產(chǎn)生了一個新的(下一代)集團.然后回到第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)是根據(jù)隨機數(shù)落在段落計算選取哪個個體的函數(shù)
                      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();
                    }

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

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

            這篇文章是原來學習的一些回憶的整理,因為最近要實用了.不正確的地方還希望大家多多指出~

            posted on 2009-03-08 20:13 wil 閱讀(354) 評論(0)  編輯 收藏 引用 所屬分類: 算法

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章分類

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲精品乱码久久久久久久久久久久 | 思思久久99热只有频精品66| 国产视频久久| 欧洲性大片xxxxx久久久| 18岁日韩内射颜射午夜久久成人 | 99re久久精品国产首页2020| 国内精品久久久久久麻豆| 伊人久久久AV老熟妇色| 66精品综合久久久久久久| 亚洲精品tv久久久久| 国产精品一久久香蕉国产线看观看| 四虎国产永久免费久久| 国产亚洲精久久久久久无码77777| 2021久久国自产拍精品| 亚洲国产成人久久笫一页| 99久久人妻无码精品系列蜜桃| 香蕉久久AⅤ一区二区三区| 97精品伊人久久大香线蕉app | 色综合久久久久久久久五月 | 久久久精品国产亚洲成人满18免费网站 | 99久久国产免费福利| 亚洲中文久久精品无码ww16| 香蕉久久一区二区不卡无毒影院| 99精品久久久久久久婷婷| 亚洲欧美日韩精品久久亚洲区| 91久久九九无码成人网站| avtt天堂网久久精品| 精品久久久噜噜噜久久久| 久久精品www人人爽人人| 无码八A片人妻少妇久久| 亚洲欧美成人久久综合中文网| 国产亚洲美女精品久久久| 国产亚州精品女人久久久久久| 国产精品久久久久久久久免费| 久久亚洲精品无码AV红樱桃| 囯产极品美女高潮无套久久久| 久久无码高潮喷水| 亚洲精品乱码久久久久久自慰 | 精品国产婷婷久久久| 久久99亚洲综合精品首页| 久久久综合香蕉尹人综合网|