遺傳演算法讀書筆記
-讀《人工智慧導論》(王萬良)有感在近代的幾百年間,我們從大自然的現象中學習到了無數富有價值的推理,像是飛機的飛行,由螢火4102蟲發明了人工冷光,根據魚的來潛浮方法發明的潛水艇......數不勝數 ,而今天在我閱讀人工智慧導論時我發現了一種神奇的演算法,一種根據以達爾文的演化論思想為核心,依託自然選擇而改良出的演算法在如今有著相當廣泛的應用。
中學時大家都學過生物中的自然選擇,生物進化是通過繁殖,變異,競爭和選擇實現的,而進化演算法則主要通過選擇,種族和變異這三種操作來實現優化問題的求解,書中讓我印象深刻的一句話是「適應程度高的並不一定進入種群,只是進入種群的可能性比較大,而適應程度低的並不一定淘汰,只是進入種群的可能性比較小」,因為這種的特性可以保證種群的多樣性。
遺傳演算法中最重要的基本要素是引數編碼,初始種群的設定,適應度函式的設計,遺傳操作設計和控制引數設定。
這其中相當重要的是適應度函式,因為這是進行自然選擇的唯一依據,但是又因為一般種群的規模大小在20-100之間,遠遠小於真正大自然界的生物物種規模,所以必須限制適應度高的個體出現,因為一旦出現,這個個體在群體中的比例會急速上公升,從而導致演算法較早的收斂到乙個區域性最優點,在這基礎上,我們可以用線性變換來降低適應度之間的差距,保持種群多樣性。甚至用非線性變換也能達到這一要求。 而當選擇的時候,判斷個體優良與否的準則是各個個體的適應度值,適應度越高,被選擇的概率越大,但是不是適應度高就一定能被選上繁殖後代。並且我們需要注意的是,並不能總是挑選適應度高的個體,那樣很快會達到區域性最優解,如果只用隨機演算法,那麼甚至都不會收斂,所以我們要選乙個折中的演算法,既要使得種群較快的收斂,也要維持種群的多樣性,我們可以通過排序或者適應度比例的方法來調整選取的個體,使得適應值不至於快速上公升或乾脆不上公升。
而自然選擇最著名的就是大名鼎鼎的染色體交叉,正是因為有了交叉,我們作為人的個體才會如此獨一無二,因為我們的染色體在世界上只要不是雙胞胎,那麼兩個人幾乎不可能擁有完全相同的基因。而遺傳演算法中的交叉運算元正是用於基因重組的,能夠讓子串部分或者全部的繼承父串的結構特徵與有效基因。現在遺傳演算法可以說是獨當一面,能夠有效解決我們目前工業上遇到的許多問題,比如流水車間排程問題,城市不對成問題等等,而現在的大牛們也在前人的基礎上不斷地改進,或許有一天,我們也會成為大牛,成為人類前進中的一顆小小齒輪,推動著人類社會朝著遙遠的未來前進。
遺傳演算法 筆記
1.個體編碼 一般用二進位制編碼表示乙個個體 二進位制編碼就是 基因型 個體就是 表現型 例子 乙個表現型為 1,2 的向量的 基因型為 這裡用3位二進位制表示乙個數 001 010 2.初始化群體 包括群體規模 包含的個體 3.適應度計算 適應度決定了每個個體的存活機率 或者說遺傳機率 4.選擇運...
python遺傳演算法 Python 遺傳演算法實現
關於遺傳演算法 遺傳演算法是仿照自然界中生物進化而產生的一類優化演算法。個人感覺遺傳演算法簡單粗暴,適應性廣。關於遺傳演算法的介紹網上有很多了,這裡按照我自己的理解簡單概括一下。編碼解碼,將待優化的引數編碼為dna序列,最簡單直接的為二進位制編碼 即有兩種鹼基的dna鏈 生成隨機初代 選擇,適應度 ...
遺傳演算法 python 簡書 遺傳演算法
優化的演算法有很多種,從最基本的梯度下降法到現在的一些啟發式演算法,如遺傳演算法 ga 差分演化演算法 de 粒子群演算法 pso 和人工蜂群演算法 abc 舉乙個例子,遺傳演算法和梯度下降 梯度下降和遺傳演算法都是優化演算法,而梯度下降只是其中最基礎的那乙個,它依靠梯度與方向導數的關係計算出最優值...