遗传算法总结
遺傳算法總結(jié)
遺傳算法是一種最優(yōu)化算法,或者說遺傳算法可以應(yīng)用于求解搜索問題或者最優(yōu)化問題。百度對遺傳算法的定義為:遺傳算法(Genetic Algorithm)是模擬達(dá)爾文生物進(jìn)化論的自然選擇和遺傳學(xué)機(jī)理的生物進(jìn)化過程的計(jì)算模型,是一種通過模擬自然進(jìn)化過程搜索最優(yōu)解的方法遺傳算法在工業(yè)界有著比較廣泛的應(yīng)用。我也是實(shí)習(xí)的時(shí)候才真正用到遺傳算法,下面是我的一些總結(jié)。
1:傳統(tǒng)優(yōu)化算法
遺傳算法可以用于求解最優(yōu)化問題,那么和傳統(tǒng)的優(yōu)化算法相比,遺傳算法有什么不一樣呢?https://blog.csdn.net/m0_37622530/article/details/81951597比較詳細(xì)的介紹了一些最優(yōu)化算法。
傳統(tǒng)的最優(yōu)化算法可以分為calculus-methods(精確計(jì)算方法):
1:對于一些無約束的最優(yōu)化問題,可以直接根據(jù)求偏導(dǎo)等于0,然后求得最優(yōu)點(diǎn)的坐標(biāo),但是這類算法只能對于凸函數(shù)和凹函數(shù)能夠得到全局最優(yōu)解。
2:對于帶有約束的最優(yōu)化問題,如果只有等值約束的話,使用拉格朗日乘子法可以求解,拉格朗日乘子法可以查看https://www.jiqizhixin.com/articles/2019-02-12-10,對于一般的約束(既有等值約束,也有不等式約束)的問題,使用拉格朗日乘子法以及KKT條件可以求解。例如SVM就是使用KKT條件加上拉格朗日乘子法使用對偶優(yōu)化方法進(jìn)行求解的。
上面的最優(yōu)化算法屬于calculus-methods(精確計(jì)算方法),除此之外,該方法還有一種enumerative scheme(迭代形式),比如說最速下降算法(梯度下降算法),牛頓法,共軛梯度法,動(dòng)態(tài)規(guī)劃等等。其中梯度下降算法衍生出了很多變種,如Adagrad,Adam,Momentum等等,都是為了解決陷入局部最優(yōu)問題而產(chǎn)生的改進(jìn)。
2:隨機(jī)優(yōu)化算法
傳統(tǒng)算法有著很多限制,比如說都需要求偏導(dǎo),連續(xù)(還有可能陷入局部最優(yōu)的問題),因此不是很魯棒(robust)。隨機(jī)優(yōu)化算法不需要這些限制(連續(xù)可求導(dǎo)),缺點(diǎn)就是找到的是一個(gè)近似的最優(yōu)解。
隨機(jī)優(yōu)化算法包含simulated anealing(模擬退火算法),詳情查看https://blog.csdn.net/google19890102/article/details/45395257,模擬退火算法的算法流程圖如下:
模擬退火算法通過隨機(jī)接受不產(chǎn)生下降的解的形式,有可能跳出局部最優(yōu)解到達(dá)全局最優(yōu)。
除了模擬退火算法外,遺傳算法也在算法中使用隨機(jī)的方法,如交叉,變異,繼承等操作。遺傳算法的一個(gè)應(yīng)用實(shí)例可以查看https://blog.csdn.net/saltriver/article/details/63679701,具體就是求解一個(gè)簡單的函數(shù)在給定區(qū)間的最大值:?
求解上面函數(shù)在[-10,10]之間的最大值,實(shí)際上,上面的函數(shù)可以使用數(shù)值計(jì)算的方法進(jìn)行求解,因?yàn)樵摵瘮?shù)是連續(xù)可微的,求得函數(shù)的增區(qū)間,就能求[-10,10]的最大值。
如果使用遺傳算法求解這個(gè)問題的話,最重要的一步就是如何code我們需要求解的值x,為什么需要對x進(jìn)行編碼,因?yàn)槲覀冊谶z傳,變異,交叉的時(shí)候,是對編碼進(jìn)行操作,如果x=2如何進(jìn)行這些操作?因此我們需要對x進(jìn)行編碼,例如,如果我們假設(shè)x精確度為小數(shù)點(diǎn)后面4位的話,那么1可以分成10000個(gè)數(shù),-10到10之間存在20個(gè)數(shù),因此我們需要20*10000種編碼,也就是200000,如果我們使用二進(jìn)制(0,1)編碼的話,我們需要18位進(jìn)行編碼,因此2的18次方是262144,而2的17次方是131072,因此只有使用18位才能最小編碼200000個(gè)數(shù)。https://www.jianshu.com/p/971c5f76f88e里面包含一個(gè)例子。
上面是遺傳算法最簡單的例子,遺傳算法包含很多有意思的應(yīng)用,如羅比清掃機(jī)器人https://blog.csdn.net/lynn0085/article/details/79016012,可以看到,進(jìn)化很多代之后,羅比機(jī)器人對于任意出現(xiàn)的垃圾,都能很好的清理。
除此之外,遺傳算法還可以對圖像進(jìn)行擬合,如https://songshuhui.net/archives/10462,得到的結(jié)果大概如下:
其中,每個(gè)個(gè)體就是一系列三角形的組合,每個(gè)三角形又包含位置,顏色,透明度等等屬性,最后使用MSE(mean square error)用組成的圖像和原始圖像進(jìn)行對比,使用mse衡量fitness?,最后得到的結(jié)果已經(jīng)非常相像。
遺傳算法除了這些應(yīng)用外,在工業(yè)界也有很多應(yīng)用,比如說論文"sapienz: multi-objective automated testing for android applications"使用GA(遺傳算法)解決多目標(biāo)(code coverage,sequence length,crash)優(yōu)化問題,facebook現(xiàn)在使用的自動(dòng)測試系統(tǒng)就是基于Sapienz開發(fā)的。
總結(jié)
- 上一篇: hdu 4899 Hero meet d
- 下一篇: The Devil is in the