劉光亞
應用研究
MATLAB遺傳算法在函數優化問題中的應用
劉光亞
(武漢東湖學院機電學院,武漢 430212)
本文介紹了遺傳算法理論及運算流程,運用MATLAB語言進行了程序設計。結合典型的三角測試函數,在MATLAB 環境下有效地解決了用遺傳算法求解函數優化問題,驗證了 MATLAB 遺傳算法在函數優化中應用的有效性和靈活性。
遺傳算法 MATLAB 函數優化 有效性
20世紀70年代,美國密執安大學的 Holland 教授[1]提出了遺傳算法,它包含了進化和自然選擇原理,它借鑒了達爾文的進化論和孟爾德的遺傳學,模仿了自然界的生物進化機制,并發展成為一種隨機全局搜索和優化方法,是一種全局、并行、高效的搜索方法[2]。它能在搜索過程中自主獲取和積累有關搜索空間的信息,并自適應地控制搜索過程以求得最優解。遺傳算法提供了一種求解非線性、多模型、多目標等復雜系統優化問題的通用框架,它不依賴于問題所屬的具體領域,已廣泛應用于函數優化、自動控制、圖像處理、機器學習、人工生命與智能等領域[3]。
MATLAB是一種用于算法開發、數據可視化、數據分析及數值計算的高級技術計算語言和交互式環境,具有計算功能強大、圖形展示功能強大、工具箱功能強大和幫助功能完整等特點。MATLAB遺傳算法提供了對各種優化問題的一個完整的解決方案[4]。它具有函數表達簡潔、遺傳操作靈活、可任意選擇多種編碼方式和優化算子、算法參數設置自由等特點而受到用戶的青睞,并為應用和研究遺傳算法提供了穩定可靠、結構靈活、可擴展的開發平臺。
函數優化問題是遺傳算法的經典應用領域,也是對遺傳算法進行性能評價的常用算例[5]。
在自然進化的過程中,生物通過遺傳與變異來適應外部環境。這就意味著,只有那些擁有更加優良特性和更適應自然環境的生物才能生存與繁衍;同時,那些沒有優良特性的生物體最終將會消亡。這也就是所謂的“適者生存”。遺傳算法模擬了上述的自然進化現象,它將搜索空間映射到遺傳空間,也就是說將每個有可能的解經基因編碼成一個染色體。
遺傳算法模擬了自然選擇和遺傳中發生的復制、交叉和變異等現象,隨機產生一初始種群,通過復制、交叉、變異等操作,產生適應度更高的個體,使群體進行到搜索空間中越來越好的區域,如此一代代進化,最后收斂到一群適應度最好的個體中,進而求得問題的最優解。
遺傳算法流程可用圖1來描述:

圖1 遺傳算法流程圖
示例函數采用典型的如下三角測試函數:
求其函數于自變量x在定義域中的最大值,遺傳算法優化程序[6]如下:
Function optvalue=opt(n, maxgen, xmin, xmax, pc_min, pc_max,pm_min, pm_max, l) % n-染色體規模;maxgen-最大進化代數;xmin-自變量最小值;xmax-自變量最大值;pc_min-最小交叉概率;pc_max-最大交叉概率;pm_min-最小突變概率; pm_max-最大突變概率;l-二進制碼串長度;
gen=1;group=round(rand(n,l));
while gen<=maxgen % 判斷終止條件
x=decode(group,xmin,xmax,l);
fit=x.^2.*sin(2*x)+2*cos(5*x)+x; % 求適應度值
for i=1:n % 適應度值預處理
if fit(i)<0
fit(i)=0;
end
end
prob1=fit/sum(fit);prob1=cumsum(prob1);
prob2=sort(rand(n,1)); i=1;j=1;
while i<=n %利用輪盤賭選擇法來進行選擇操作
if prob2(i) newgroup(i,:)=group(j,:); i=i+1; else j=j+1; end end group=newgroup; x=decode(group,xmin,xmax,l); fit=x.^2.*sin(2*x)+2*cos(5*x)+x; avgfit=mean(fit); for i=1:2:n-1 %隨機生成交叉點,并進行交叉操作 a=[fit(i) fit(i+1)]; if max(a)>avgfit pc=pc_max-(pc_max-pc_min)*gen/maxgen; else pc=pc_max; end if rand cross=round(rand*l)+1; if cross>l cross=cross-1; end newgroup(i,:)=[group(i,1:cross) ; group(i+1,cross+1:end)]; newgroup(i+1,:)=[group(i+1,1:cross); group(i,cross+1:end)]; x2=decode(newgroup(i:i+1,:),xmin,xmax,l); fit2=x2.^2.*sin(2*x2)+2*cos(5*x2)+x2; for j=0:1 if fit(i+j)>=fit2(j+1) newgroup(i+j,:)=group(i+j,:); end end else newgroup(i,:)=group(i,:); newgroup(i+1,:)=group(i+1,:); end end group=newgroup; for i=1:n % 隨機生成變異點,并進行變異操作 x3=decode(group,xmin,xmax,l); fit3=x3.^2.*sin(2*x3)+2*cos(5*x3)+x3; avgfit3=mean(fit3); if fit3(i)>avgfit3 pm=pm_max-(pm_max-pm_min)*gen/maxgen; else pm=pm_min; end if rand mutation=round(rand*l)+1; if mutation>l mutation=mutation-1; end newgroup(i,:)=group(i,:); if newgroup(i,mutation)==0 newgroup(i,mutation)=1; else newgroup(i,mutation)=0; end x4=decode(newgroup(i,:),xmin,xmax,l); fit4=x4.^2.*sin(2*x4)+2*cos(5*x4)+x4; if fit3(i)>fit4 newgroup(i,:)=group(i,:); end else newgroup(i,:)=group(i,:); end end x=decode(newgroup,xmin,xmax,l); fit=x.^2.*sin(2*x)+2*cos(5*x)+x; [gmax(gen) index]=max(fit);r(gen)=x(index); meanvalue=mean(fit);meanfit(gen)=meanvalue; group=newgroup;gen=gen+1; end figure(1);fplot('x.^2.*sin(2*x)+2*cos(5*x)+x',[xmin,xmax]); hold on; plot(r,gmax,'r*');xlabel('x');ylabel('f(x)') figure(2); plot(gmax); hold on; plot(meanfit,'r:'); xlabel('generations');ylabel('f(x)');hold off; [gmax index]=max(gmax); optvalue=[r(index) gmax]; Function x=decode(group, xmin, xmax, l) %子函數實現二進制-十進制的解碼操作 group=fliplr(group);s=size(group); a=0:1:l-1;a=ones(s(1),1)*a; x1=sum((group.*2.^a)'); x=xmin+(xmax-xmin)*x1./2^l-1; 按照上述算法,令n=50,maxgen=80,x_min=0,x_max=9,pc_min=0.1,pc_max=0.9,pm_min=0.01,pm_max=0.4,l=22;圖2代表了初始種群的位置分布;圖3指出了經過80次迭代后的最終尋優結果;圖4說明了隨著代數的增長,最優值與平均函數值的變化趨勢;輸出結果為: X=7.1928,y=57.0137. 遺傳算法作為一種快速、簡單、容錯性強的算法,是一類可應用于復雜系統優化計算的魯棒搜索算法,相較于傳統優化算法,它有如下特點: 1)遺傳算法不是從一點出發沿一條直線尋優,而是同時在整個解空間進行尋優操作,具備全局尋優能力。 2)遺傳算法直接作用于變量的編碼上,而非變量本身。通過編碼操作,可以直接對結構對象進行操作。 3)遺傳算法對搜索空間沒有任何特殊要求,只以變量的編碼作為操作對象,無需導數等其它輔助信息,可處理無數值概念或者很難有數值概念的優化問題。 圖2 染色體的初始位置 4)本文實驗結果驗證了 MATLAB 遺傳算法能有效、靈活地求解復雜函數的優化問題,而且所求解能達到或以相當高的精度逼近最優解。 圖3 染色體的最終位置 圖4 最優、平均函數值變化趨勢 [1] Holland J H. Adaptation in natural and artificial systems: an introductory analysis with applications to biology, control, and artificial intelligence[M]. Ann Arbor: University of Michigan Press, 1975. [2] Rodés J P, Pérez-Gracia V, Martínez-Reguero A.Evaluation of the GPR frequency spectra in asphalt pavement assessment[J]. Constr Build Mater, 2015, 96: 181-188. [3] 周勇, 胡中功. 改進的快速遺傳算法在函數優化中的應用[J]. 現代電子技術, 2018, 41(17): 153-157. [4] 殷銘, 張興華, 戴先中. 基于MATLAB的遺傳算法實現[J]. 電子技術應用, 2000, 26(1): 9-11. [5] 曹巖. MATLAB R2008數學和控制實例教程[M]. 北京: 化學工業出版社, 2009. [6] 由睿鵬.計算機網絡優化設計中遺傳算法的原理及應用[J]. 電子技術與軟件工程, 2020(20): 14-15. [7] 李曉葉, 張京麗, 于妍. 動態圖表展現遺傳算法基本原理[J]. 電腦編程技巧與維護, 2017(12): 80-81, 94. [8] 萬勇, 萬莉, 戴永壽. 基于C與MATLAB混合編程的管道缺陷類型識別實驗系統軟件開發[J]. 實驗技術與管理, 2020, 37(5): 52-57. Application of MATLAB genetic algorithm in the function optimization problem Liu Yaguang (School of Mechanical and Electronic, Wuhan Donghu University, Wuhan 430212, China) TP18 A 1003-4862(2022)12-0050-04 2022-08-09 國家自然科學基金資助項目(12101468、61573002) 劉光亞(1959-),男,工學博士,研究員級高工、教授(二級)。研究方向:檢測技術及自動化系統,動力(核)與電氣工程。E-mail:648069538@qq.com3 仿真結果
4 結語


