什麼是遺傳演算法 Genetic Algorithm?
數學是達成目的的工具, 理解才是達成目的橋樑, 所以這篇文章用淺顯易懂的動畫闡述了複雜的機器學習概念.
強烈推薦通過動畫的形式了解.
所以首先放視頻鏈接: Youtube 或者 優酷.更多通熟易懂的知識請訪問: 莫煩 Python
什麼是遺傳演算法? Genetic Algorithm http://v.youku.com/v_show/id_XMjk0NzE0MjgxNg==.html
這次我們嘗試踏足機器學習中的另外一個領域, 用進化理論來解決複雜的問題. 遺傳演算法是進化演算法的一個分支. 它將達爾文的進化理論搬進了計算機.
進化演算法
所以你會發現在程序中, 我們還時不時出現什麼染色體, DNA, 遺傳, DNA交叉, 變異 這些東西. 不過想想也能明白, 在自然界中, 優勝劣汰, 我們人類也是靠著這些手段一步步從猴子
~變成會敲鍵盤, 會唱歌, 會讀書, 會幹壞事的猴子了. 哈哈. 重點不是這些. 我們應該正兒八經地想想, 我們是怎麼樣一步一步變成後面這些猴子的.
猴子的進化
想像我們的祖先是這麼一群一直在樹上的猴子. 某一天他們誕下了一隻可能是因為某種變異而總喜歡呆在地上的猴子. 因為總喜歡在地上, 地上又有很多石頭, 他開始用石頭作為自己的工具, 比如砸開堅硬的果實或者做武器. 會使用石頭的猴子變的比其他猴子更容易吃到東西, 也更有能力抵禦外人. 所以這樣的猴子活得越久, 繁衍得越多. 所以我們的祖先慢慢地變成了地上的猴子. 離變成人類也進了一步. 我們看到上面的線路, 可以總結一下這整套流程.
種群的進化
首先有一整個種族, 然後種族裡不斷的繁衍後代, 有時候會突然間產生一些變異, 這些變異中有一些天生畸形, 一些有了新的能力, 不適應環境的人們, (包括畸形)被當下的環境淘汰掉了, 適應環境的人們, (包括哪些變異出新能力的人)被保留, 並且還能繁衍出更多這種新能力的人. 這就變成了我們下一代的種族. 接著繼續這個循環. 其實計算機也能套用這一套體系, 這就有了我們的遺傳演算法.
電腦里的 DNA
每個人都會有他獨有的遺傳信息比如 DNA, 種群的繁衍也就是這些 DNA 的傳承, 所以遺傳演算法把握住了這一條定律. 我們就嘗試著在電腦中用某些途徑來代替這些生物形式的 DNA. 我們如果仔細看看這些 DNA, 就會發現, 他們其實是由一組組固定的結構構成, 如果你還沒有忘記初高中學的生物, 這種小的結構就叫做鹼基對. 在程序中, 我們也可以模擬這些結構, 將這些結構遺傳給下一代或者變異一下. 最常用的一種替換方式是: 我們直接使用0和1來代替, 因為在電腦中, 所有東西都是01, 01 就是電腦的語言. 我們的手腳都是從這些最基本的 DNA 信息里翻譯出來的, 那麼我們也能用一定的規則將01這類信息用電腦翻譯成其他的信息.
有了這些電腦能懂的 DNA 形式, 我們就能模擬生物中的繁衍後代了, 假設我們有兩個來自父母的 DNA 信息. 我們只需要選取他們各自一段信息就能組成新的寶寶的DNA信息. 生物繁衍中, 還會存在時不時的變異, 我們也能從這套01 的系統中體現出來, 只要將某些地方將0變成1, 1變成0就好了. 有了這些遺傳變異, 加上那一套適者生存,不適者淘汰的理論, 你的電腦里就能有一群漸漸成長壯大的小生物了.
別人的實驗
我們來看看別人都在拿電腦里餵養了哪些生物吧. 比如進化出會自己闖關的馬里奧, 自動駕駛的汽車, 還能模擬微生物的行為. 看上去是不是真有那麼一回事. 我會將這些視頻的鏈接附在我」莫煩Python」的網頁中, 有興趣的朋友們可以觀看一下.
視頻里別人的實驗: 馬里奧 , 自動駕駛, 微生物進化.
莫煩 Python 里還有很多精彩, 通俗易懂的機器學習介紹和 Python 演算法實踐.
推薦閱讀:
※MATLAB神經網路(三):遺傳演算法優化BP
※遺傳演算法和深度強化學習的結合會是新的方向嗎?
※使用流行的遺傳演算法python庫是哪個?
※蒙特卡洛演算法與遺傳演算法的區別是什麼?
※數學建模中的規劃問題怎麼求解?