智慧型優化演算法 遺傳演算法小實踐

2021-09-25 07:10:29 字數 3007 閱讀 7185

實驗3 遺傳演算法

一、實驗目的與要求

目的:熟悉遺產演算法過程,掌握標準遺傳演算法原理、基本流程和引數設定。

要求:上機**,除錯通過。

二、 實驗裝置:

計算機、python語言軟體

三、實驗內容

旅行商問題(tsp)。假設有乙個旅行商人要遊覽全國31個省會城市,他需要選擇所要走過的路徑,路徑的限制是每個城市只能遊覽一次,而且最後要回到原來出發的城市。路徑的選擇要求是:所選擇路徑的路程為所有路徑之中的最小值。

全國31個省會城市的座標為【1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;3238 1229;4196 1004;4312 790;4386 570;3007 1970;2562 1756;2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2367;3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;2370 2975】

四、實驗原理

(1)遺傳演算法原理

遺傳演算法(ga)起源於對生物系統所進行的計算機模擬研究。它是模仿自然界生物進化機制發展起來的隨機全域性搜尋和優化方法,借鑑了達爾文的演化論和孟德爾的遺傳學說。其本質是一種高效、並行、全域性搜尋的方法,能在搜尋過程中自動獲取和積累有關搜尋空間的知識,並自適應地控制搜尋過程以求得最佳解。

(2)遺傳演算法流程或步驟

1.初始化:設定進化代數計數器g=0,設定最大進化代數g,隨機生成np個個體作為初始群體p(0)。

2.個體評價:計算群體p(t)中各個個體的適應度。

3.選擇運算:將選擇運算元作用於群體。選擇的目的是把優化的個體直接遺傳到下一代或通過配對交叉產生新的個體再遺傳到下一代。

4.交叉運算:將交叉運算元作用於群體,對選中的成對個體,以某一概率交換他們的之間部分的染色體,選擇一些優良的個體遺傳到下一代群體。

5.變異運算:將變異運算元作用於群體,對選中的成對個體,以某一概率改變某些基因為其他的等位基因,群體p(t)經過選擇、交叉、變異運算之後得到下一代群體p(t+1)。計算其適應度值,並根據適應度進行排序。

6.終止條件判斷:若g>g,則以進化過程中所得到的具有最大適應度個體作為最優解輸出,終止計算。

(3)輪盤賭選擇

基本思想:各個個體被選中的概率與其適應度大小成正比。

具體操作如下:

(1)計算出群體中每個個體的適應度f(i=1,2,…,m),m為群體大小

(2)計算出每個個體被遺傳到下一代群體中的概率

(3)計算出每個個體的累積概率

(4)在[0,1]區間內產生乙個均勻分布的偽隨機數r

(5)若q[k-1]由上述通過上述實驗結果可以看出,遺傳演算法中的tsp問題的影象距離的下降速度同樣是先快後慢,在迭代60次左右收斂到最優解。但是在時間上表現不是很好,相對於相同迭代次數的模擬退火演算法的時間多出了4倍左右的時間。

六、思考遺傳演算法關鍵引數設定對實驗結果的影響。

(1)群體規模:群體規模會影響遺傳優化的最終結果和遺傳演算法的執行效率,np太小時,演算法效能一般較差,採用較大的群體規模可以減小遺傳演算法陷入區域性最優解的機會,但較大的群體規模意味著計算複雜度較高。圖8,圖9分別為np取20和100時的實驗結果,可以看出不僅在效能上差異較大,且在執行時間上np取值小時執行較快。

圖9.np=20時實驗結果

圖10.np=20時實驗結果

(2)交叉規律pc:交叉概率控制著交叉操作被使用的頻率。較大的交叉概率可以增加演算法搜尋新的區域的能力,但高效能的模式遭到破壞的可能性增大,但交叉規律太低,演算法會陷入遲鈍狀態。

圖10,11分別是pc取值0.25和0.85時的實驗結果,通過對比可以看出:pc取值較小時影象收斂速度較慢,效能較差,但執行時間可觀。pc取值較大時影象收斂速度較快,效能較好,但執行時間較長。

圖11.

圖12.

(3)變異概率pm:變異操作在演算法中重要目的是保持群體的多樣性。一般低頻度的變異可以防止群體中重要的基因丟失,高頻度的變異概率會使演算法趨於純粹的隨機搜尋。圖12,13取值分別為0.01和0。1時的實驗結果,可以看出在影象上和執行時間上沒有太大的區別,在實驗中的變異概率並不是取值越大越好,相反,本次實驗中取值為0.01反而得到了較好的輸出。

圖13.

圖14.

(4)遺傳運算的終止進化代數g:終止進化代數表示演算法執行結束的條件,在結束時將當前群體中最佳個體作為最優解輸出。在實驗結果中分析可得,問題的迭代總會在一定次數後收斂到最優解,所以在實驗中可以將取值在反覆比對後取到比收斂最大次數較大值即可。

遺傳演算法 智慧型鳥群

一 遺傳演算法概述 1.1 群體 1.2 基因型和表現型 1.3 突變 1.4 選擇 1.5 遺傳 二 智慧型鳥群的實現 2.1 小鳥的基因型和表現型 2.2 小鳥的基因如何影響小鳥的飛行路線 2.3 小鳥的適應性 2.4 選擇 選擇適應度更高的小鳥 2.5 突變 增加基因的豐富性 2.6 繁殖 產...

遺傳演算法優化例子

遺傳演算法的手工模擬計算示例 為更好地理解遺傳演算法的運算過程,下面用手工計算來簡單地模擬遺傳演算法的各個主要執行步驟。例 求下述二元函式的最大值 1 個體編碼 遺傳演算法的運算物件是表示個體的符號串,所以必須把變數 x1,x2 編碼為一種 符號串。本題中,用無符號二進位制整數來表示。因 x1,x2...

python遺傳演算法 Python 遺傳演算法實現

關於遺傳演算法 遺傳演算法是仿照自然界中生物進化而產生的一類優化演算法。個人感覺遺傳演算法簡單粗暴,適應性廣。關於遺傳演算法的介紹網上有很多了,這裡按照我自己的理解簡單概括一下。編碼解碼,將待優化的引數編碼為dna序列,最簡單直接的為二進位制編碼 即有兩種鹼基的dna鏈 生成隨機初代 選擇,適應度 ...