呂德文
(大連大學(xué)機(jī)械工程學(xué)院,遼寧 大連 116622)
遺傳算法(Genetic Algorithm)是一類借鑒生物界的進(jìn)化規(guī)律(適者生存,優(yōu)勝劣汰遺傳機(jī)制)演化而來的隨機(jī)化搜索方法。它是由美國的J.Holland教授1975年首先提出,其主要特點(diǎn)是直接對結(jié)構(gòu)對象進(jìn)行操作,不存在求導(dǎo)和函數(shù)連續(xù)性的限定;具有內(nèi)在的隱并行性和更好的全局尋優(yōu)能力;采用概率化的尋優(yōu)方法,能自動獲取和指導(dǎo)優(yōu)化的搜索空間,自動適應(yīng)地調(diào)整搜索方向,不需要確定的規(guī)則。遺傳算法的這些性質(zhì),已被人們廣泛地應(yīng)用于組合優(yōu)化、機(jī)器學(xué)習(xí)、信號處理、自適應(yīng)控制和人工生命等領(lǐng)域,是現(xiàn)代有關(guān)智能計(jì)算中的關(guān)鍵技術(shù)。
MATLAB語言是一種面向科學(xué)與工程的高效率高級語言,它的語法規(guī)則簡單、更貼近人的思維方式、通俗易懂。MATLAB語言有著豐富的各種工具箱,MATLAB的優(yōu)化工具箱提供對各種優(yōu)化問題的一個(gè)完整的解決方案,遺傳算法優(yōu)化工具箱就是其中之一。采用MATLAB遺傳算法優(yōu)化工具箱,不僅具有簡單、易用、易于修改的特點(diǎn),且為解決許多傳統(tǒng)的優(yōu)化方法難以解決的參數(shù)優(yōu)化、非線性、多峰值之類的復(fù)雜問題提供有效的途徑,為遺傳算法的研究和應(yīng)用提供很好的應(yīng)用前景。
遺傳算法模擬從低級到高級的演化過程,即從初始群體出發(fā),采用優(yōu)勝劣汰、適者生存的自然法則選擇個(gè)體,通過交叉編譯來產(chǎn)生下一代群體,逐代演化,知道產(chǎn)生滿足條件的個(gè)體為止,其流程圖如圖1。①確定待優(yōu)化的參數(shù)范圍,并對搜索空間進(jìn)行編碼;②隨機(jī)產(chǎn)生包含各個(gè)個(gè)體的初始種群;③將種群中各個(gè)個(gè)體解碼成對應(yīng)的參數(shù)值,用解碼后的參數(shù)求解適應(yīng)度函數(shù),運(yùn)用適應(yīng)度函數(shù)評估各個(gè)個(gè)體的適應(yīng)度;④對收斂條件進(jìn)行判斷,如果已經(jīng)找到最佳個(gè)體,則停止,否則繼續(xù)進(jìn)行遺傳操作;⑤按適應(yīng)度進(jìn)行選擇操作,讓適應(yīng)度大的個(gè)體在種群中占有較大的比例,一些適應(yīng)度較小的個(gè)體將會被淘汰;⑥隨機(jī)交叉,兩個(gè)個(gè)體按一定的交叉概率進(jìn)行交叉操作,并產(chǎn)生兩個(gè)新的子個(gè)體;⑦按照一定的變異概率變異,使個(gè)體的某個(gè)或某些位的性質(zhì)發(fā)生改變;⑧重復(fù)步驟③至⑦,直至滿足終止條件。
圖1 遺傳算法流程圖
遺傳算法工具箱(GAOT)包括許多實(shí)用的函數(shù),這些函數(shù)按照功能可分為以下幾類:主界面函數(shù)、選擇函數(shù)、演化函數(shù)、其它的終止函數(shù)、二進(jìn)制表示函數(shù)、演示程序等。
MATLAB的遺傳算法工具箱核心函數(shù)GAOTV5其主程序ga.m提供遺傳算法工具箱與外部的接口。在MATLAB環(huán)境下,執(zhí)行g(shù)a.m并設(shè)定相應(yīng)的參數(shù),就可完成優(yōu)化。
工具箱中遺傳算法的主函數(shù)為:
[x fval]=ga(@fitnes s fcn,nvars,options)
其中,輸出參數(shù):①x:返回的最終點(diǎn);②fval:適應(yīng)度函數(shù)在x點(diǎn)的值。
輸入?yún)?shù):①@fitnessfun:計(jì)算適應(yīng)度函數(shù)的M文件的函數(shù)句柄;②nvars:適應(yīng)度函數(shù)中變量個(gè)數(shù);③options:參數(shù)結(jié)構(gòu)體。
輸入?yún)?shù)結(jié)構(gòu)體options具有缺省值,可以利用缺省參數(shù)運(yùn)行遺傳算法,調(diào)用語句如下:
[x fval]=ga(@fitnes s fcn,nvars)
每一個(gè)參數(shù)的值都存放在參數(shù)結(jié)構(gòu)體options中,例如options.Populationsize在結(jié)構(gòu)體中的缺省值為20,如果需要設(shè)置Populationsize的值等于100,可以通過下面的語句進(jìn)行修改:
options=gaoptimset(‘pulationSize’,00)
這樣,參數(shù)Populationsize的值為100,其他參數(shù)的值為缺省值或當(dāng)前值。這時(shí),再輸入:
ga(@fitnessfun,nvars,options)
函數(shù)ga種群中個(gè)體為100運(yùn)行遺傳算法。
為了得到遺傳算法更多的輸出結(jié)果,可以使用下面的語句調(diào)用ga:
[x fval reason output population scores]=ga(@fitnessfcn,nvars)
除了x和fval之外增加了四個(gè)輸出變量:①reason:法停止的原因;②output:算法每一代的性能;③population:最后種群;④scores:最后得分值[6]。
求具有兩個(gè)獨(dú)立變量的Rastrigin函數(shù)的最小值。參數(shù)設(shè)置:種群大小為25,交叉率為0.85,變異率為0.15,最大迭代次數(shù)為50。
經(jīng)過計(jì)算,其返回結(jié)果為X=[0.00809,0.00155],F(xiàn)val=0.0134472869。由實(shí)驗(yàn)結(jié)果可以看出,使用MATLAB遺傳算法工具箱求解函數(shù)優(yōu)化問題,函數(shù)可以有效地收斂到全局最優(yōu)點(diǎn),并且具有收斂速度快和結(jié)果直觀的特點(diǎn)。
MATLAB具有強(qiáng)大的矩陣運(yùn)算能力,利用MATLAB遺傳算法工具箱可以對傳統(tǒng)優(yōu)化算法難以實(shí)現(xiàn)全局優(yōu)化的函數(shù)進(jìn)行優(yōu)化。本文的實(shí)驗(yàn)結(jié)果驗(yàn)證了MATLAB遺傳算法優(yōu)化工具箱能高效、靈活地求解復(fù)雜函數(shù)的優(yōu)化問題,并且收斂速度快,求解的精度高。