1.遺傳算法簡介
遺傳算法是一種基於自然選擇和群體遺傳機理的搜索算法,它模擬了自然選擇和自然遺傳過程中的繁殖、雜交和突變現象.再利用遺傳算法求解問題時,問題的每一個可能解都被編碼成一個“染色體”,即個體,若干個個體構成了群體(所有可能解).在遺傳算法開始時,總是隨機的產生一些個體(即初始解),根據預定的目標函數對每一個個體進行評估,給出一個適應度值,基於此適應度值,選擇一些個體用來產生下一代,選擇操作體現了“適者生存”的原理,“好”的個體被用來產生下一代,“壞”的個體則被淘汰,然后選擇出來的個體,經過交叉和變異算子進行再組合生成新的一代,這一代的個體由於繼承了上一代的一些優良性狀,因而在性能上要優於上一代,這樣逐步朝着最優解的方向進化.因此,遺傳算法可以看成是一個由可行解組成的群體初步進化的過程.
2.遺傳算法原理簡析
2.1.GA算法是一種元啟發式自然選擇的過程 ,遺傳算法通常是利用生物啟發算子,如變異、交叉和選擇來生成高質量的優化和搜索問題的解決方案。
借鑒生物進化理論,遺傳算法將問題模擬成一個生物進化過程,通過遺傳、交叉、突變、自然選擇等操作產生下一代的解,並逐步淘汰適應度函數值低的解,增加適應度函數高的解。這樣進化N代后就很有 可能會進化出適應度函數值很高的個體。
2.2.遺傳算法的基本術語
個體:可行解
種群:可行解集
染色體:可行解的編碼
基因:可行解的分量
基因形式:遺傳編碼
適應度:適應度函數(評價的值)
選擇:選擇操作
交叉:編碼的交叉操作
變異:可行解碼的變異
3.遺傳算法的基本操作
遺傳算法的操作即模擬生物基因操作:優選適應性強的個體的“選擇”;個體間交換基因產生新個體的“交叉”;個體間的基因突變而產生新個體的“變異”。
3.1選擇
選擇是指從群體中選擇優良個體並淘汰劣質個體的操作.它建立在適應度評估的基礎上.適應度越大的個體,被選中上的可能性就越大,他的“子孫”在下一代中的個數就越多,選擇出來的個體就被放入配對庫中.目前常用的選擇方法有輪賭盤方法、最佳個體保留法、期望值法、排序選擇法、競爭法、線性標准化法.
3.2交叉
交叉就是指把兩個父代個體的部分結構加以替換重組而生成新的個體的操作,交叉的目的是為了在下一代產生新的個體,通過交叉操作,遺傳算法的搜索能力得到了飛躍性的提高.交叉是遺傳算法獲取優良個體的重要手段.交叉操作是按照一定的交叉概率在匹配庫中隨機的選取兩個個體進行的,交叉位置也是隨機的,交叉概率一般取得很大,為0.6~0.9.
3.3變異
變異就是以很小的變異概率Pm隨機地改變種群中個體的某些基因的值,變異操作的基本過程是:產生一個[0,1]之間的隨機數rand,如果rand<Pm,則進行變異操作.變異操作本身是一種局部隨機搜索,與選擇、交叉算子結合在一起,能夠避免由於選擇和交叉算子而引起的某些信息永久性丟失,保證了遺傳算法的有效性,使遺傳算法具有了局部隨機搜索能力,同時使得遺傳算法能夠保持群體的多樣性,以防出現未成熟收斂.在變異操作中,變異概率不宜取得過大,如果Pm>0.5,遺傳算法就退化為了隨機搜索.
https://blog.csdn.net/jzp1083462154/article/details/80032987
4.遺傳算法的操作步驟
開始循環直至找到滿意的解。
1.評估每條染色體所對應個體的適應度。
2.遵照適應度越高,選擇概率越大的原則,從種群中選擇兩個個體作為父方和母方。
3.抽取父母雙方的染色體,進行交叉,產生子代。
4.對子代的染色體進行變異。
5.重復2,3,4步驟,直到新種群的產生
結束循環
流程圖參照老師上課PPT講解過的內容,這里就不再貼出。
5.遺傳算法的實現
遺傳算法優化方法:
(1)精英主義(Elitist Strategy)選擇:是基本遺傳算法的一種優化。為了防止進化過程中產生的最優解被交叉和變異所破壞,可以將每一代中的最優解原封不動的復制到下一代中。
(2)插入操作:可在3個基本操作的基礎上增加一個插入操作。插入操作將染色體中的某個隨機的片段移位到另一個隨機的位置。
求解一個目標函數y=sin(10 *Π *x)/x
部分代碼:
運行結果
6.遺傳算法的特點
①遺傳算法是對參數的編碼進行操作,而非對參數本身。
②遺傳算法是從許多點開始並行操作,並非局限於一點,從而可有效防止搜索過程收斂於局部最優解。
③遺傳算法通過目標函數計算適值,並不需要其它推導和附加信息,因而對問題的依賴性較小。
④遺傳算法的尋優規則是由概率決定的,而非確定性的。
⑤遺傳算法在解空間進行高效啟發式搜索,而非盲目地窮舉或完全隨機搜索。
⑥遺傳算法對所求解的優化問題沒有太多的數學要求。
7.總結
由於對算法的運用掌握的不是很熟練,多目標求解代碼還沒運行出來,給大家提供一個概念理解的參考鏈接:https://www.cnblogs.com/lomper/p/3831428.html
計算智能這門課還需要多多熟悉matlab軟件,發現這位博主講解的挺仔細:https://blog.csdn.net/zhazhazl/article/details/52192595?tdsourcetag=s_pctim_aiomsg
另外這位博主講解的算法分析很不錯:https://blog.csdn.net/u010451580/article/details/51178225
本文參考:
https://blog.csdn.net/sinat_38321889/article/details/79001599?tdsourcetag=s_pctim_aiomsg