莫烦python进化算法_使用遗传算法解决TSP问题(莫烦python 学习笔记)
相信很多人都了解過遺傳算法,屬于啟發式算法。
遺傳算法的資料很多,這里不多贅述,簡單說一下建模流程:編碼(coding and decoding),將問題的可行解轉換成計算機理解的語言,也就是數字。
建立種群(population),也就是可行解的集合,比喻成一堆螞蟻。
挑選合適的評價函數(fitness),怎么認為一個螞蟻優秀,評價結果為數字y,那y越大越優秀。
進化(evolution),挑選出比較優秀的螞蟻,進行交叉組合和變異,生成新的螞蟻,挑選出新的種群,進化多輪次后找出最優解。
重點與難點有三點:如何建立種群,也就是建構最初始的可行解的集合。
比如我們求 y = sin(10*x)*x 在 [0,1]上的最大值,那我們需要將一堆[0,1]區間內的小數轉換成所謂的“螞蟻”。編碼規則有幾種,編碼方式有很多,一般采用二進制編碼,具體的方式可以參照下面的鏈接進行細致的學習。遺傳算法_百度百科?baike.baidu.com
我們把[0,1]分成1000等份,那就是0,0.001,···到1。1001個點, 2 * 9 < 1001 < 2 ** 10,所以需要10位的編碼,比如0101010101,如何將它與[0,1]的數字一一對應,保證我們的集合包括了所有的可行解呢?由等比數列公式易得:
這樣,我們的編碼解碼過程確立。
2. 挑選合適的評價機制。怎么認為它優秀呢,y = sin(10*x)*x ,y越大越優秀;求郵遞員送信的最短距離,那距離越小越優秀,但適應度(fitness)是單向的,一般我們認為越大越好,所以求解最小化的問題,需要求解倒數變成求解最大化問題。
3. 進化,這里的進化指的是兩個個體拿出各自的基因,進行交叉配對,比如
A —— [0,1,1,0] B——[1,0,0,0] 拿出A的前兩位,B的后兩位,組合成C ——[0,1,0,0]這樣就組成了一個新的個體,當然很多問題需要特殊的進化方法,比如tsp問題。
變異,比如C的某一位變化了,這時采用二進制編碼的好處也出來了,變異操作簡單,0-1轉換,變異概率很低,但有可能達到好的效果,所以變異的操作不能少。
挑選新種群的時候,一般是有放回的拿,誰的適應度高,誰被抽中的概率大,按照這樣的方式建立新的種群,接著進化,直到達到終止條件。
接下來我們介紹tsp問題——TSP問題(Traveling Salesman Problem)又譯為旅行推銷員問題、貨郎擔問題,是數學領域中著名問題之一。假設有一個旅行商人要拜訪n個城市,他必須選擇所要走的路徑,路徑的限制是每個城市只能拜訪一次,而且最后要回到原來出發的城市。路徑的選擇目標是要求得的路徑路程為所有路徑之中的最小值。——百度百科
我們用遺傳算法怎么解決這個問題呢?
按照之前的流程來,如何編碼解碼呢?每一個解法是一條路徑,有起點,終點和途徑的每一個點,二進制編碼很困難,很難表示,這里我們采用直接編碼的方式,用點的順序表示一條路徑,比如共三個點,那[0,1,2],就是從0點出發,途徑1點,最終到達2點。
總解法只有6個,種群個數不重要,那評價函數呢,總路程是我們想評價的指標,那取倒數可以將問題轉化為最大化問題,可是取倒數后,適應度的差異可能很小,可以采用指數,求e的冪次方,來增大適應度的差異。
如何進化,兩個路徑如何交叉配對,莫煩的解法是隨機選取一些下標,把他們作為一個新數組,另外的數字從另一個路徑中取,順序按照此路徑的方法,這樣就使得每一個點都走了一遍。我在想更好的進化操作,應該會有。
變異,隨機交換兩個點。
值得一說的是,這里交叉的概率設置的比較低,只有0.1;變異的概率和一般問題相似,0.003。
具體的講解視頻可見嗶哩嗶哩的莫煩python
具體代碼如下:https://github.com/MorvanZhou/Evolutionary-Algorithm/blob/master/tutorial-contents/Genetic%20Algorithm/Travel%20Sales%20Person.py?github.com
總結
以上是生活随笔為你收集整理的莫烦python进化算法_使用遗传算法解决TSP问题(莫烦python 学习笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伪句柄是什么
- 下一篇: Workflow WF Referenc