使用MATLAB遺傳算法工具實(shí)例(詳細(xì))_第1頁(yè)
使用MATLAB遺傳算法工具實(shí)例(詳細(xì))_第2頁(yè)
使用MATLAB遺傳算法工具實(shí)例(詳細(xì))_第3頁(yè)
使用MATLAB遺傳算法工具實(shí)例(詳細(xì))_第4頁(yè)
使用MATLAB遺傳算法工具實(shí)例(詳細(xì))_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

最新發(fā)布得MATLAB7、0Release14已經(jīng)包含了一個(gè)專門設(shè)計(jì)得遺傳算法與直接搜索工具箱(GeneticAlgorithmandDirectSearchToolbox,GADS)。使用遺傳算法與直接搜索工具箱,可以擴(kuò)展MATLAB及其優(yōu)化工具箱在處理優(yōu)化問(wèn)題方面得能力,可以處理傳統(tǒng)得優(yōu)化技術(shù)難以解決得問(wèn)題,包括那些難以定義或不便于數(shù)學(xué)建模得問(wèn)題,可以解決目標(biāo)函數(shù)較復(fù)雜得問(wèn)題,比如目標(biāo)函數(shù)不連續(xù)、或具有高度非線性、隨機(jī)性以及目標(biāo)函數(shù)沒有導(dǎo)數(shù)得情況。本章8、1節(jié)首先介紹這個(gè)遺傳算法與直接搜索工具箱,其余各節(jié)分別介紹該工具箱中得遺傳算法工具及其使用方法。8、1遺傳算法與直接搜索工具箱概述本節(jié)介紹MATLAB得GADS(遺傳算法與直接搜索)工具箱得特點(diǎn)、圖形用戶界面及運(yùn)行要求,解釋如何編寫待優(yōu)化函數(shù)得M文件,且通過(guò)舉例加以闡明。8.1.1工具箱得特點(diǎn)GADS工具箱就是一系列函數(shù)得集合,它們擴(kuò)展了優(yōu)化工具箱與MATLAB數(shù)值計(jì)算環(huán)境得性能。遺傳算法與直接搜索工具箱包含了要使用遺傳算法與直接搜索算法來(lái)求解優(yōu)化問(wèn)題得一些例程。這些算法使我們能夠求解那些標(biāo)準(zhǔn)優(yōu)化工具箱范圍之外得各種優(yōu)化問(wèn)題。所有工具箱函數(shù)都就是MATLAB得M文件,這些文件由實(shí)現(xiàn)特定優(yōu)化算法得MATLAB語(yǔ)句所寫成。使用語(yǔ)句typefunction_name就可以瞧到這些函數(shù)得MATLAB代碼。我們也可以通過(guò)編寫自己得M文件來(lái)實(shí)現(xiàn)來(lái)擴(kuò)展遺傳算法與直接搜索工具箱得性能,也可以將該工具箱與MATLAB得其她工具箱或Simulink結(jié)合使用,來(lái)求解優(yōu)化問(wèn)題。工具箱函數(shù)可以通過(guò)圖形界面或MATLAB命令行來(lái)訪問(wèn),它們就是用MATLAB語(yǔ)言編寫得,對(duì)用戶開放,因此可以查瞧算法、修改源代碼或生成用戶函數(shù)。遺傳算法與直接搜索工具箱可以幫助我們求解那些不易用傳統(tǒng)方法解決得問(wèn)題,譬如表查找問(wèn)題等。遺傳算法與直接搜索工具箱有一個(gè)精心設(shè)計(jì)得圖形用戶界面,可以幫助我們直觀、方便、快速地求解最優(yōu)化問(wèn)題。8.1.1、1功能特點(diǎn)遺傳算法與直接搜索工具箱得功能特點(diǎn)如下:圖形用戶界面與命令行函數(shù)可用來(lái)快速地描述問(wèn)題、設(shè)置算法選項(xiàng)以及監(jiān)控進(jìn)程。具有多個(gè)選項(xiàng)得遺傳算法工具可用于問(wèn)題創(chuàng)建、適應(yīng)度計(jì)算、選擇、交叉與變異。直接搜索工具實(shí)現(xiàn)了一種模式搜索方法,其選項(xiàng)可用于定義網(wǎng)格尺寸、表決方法與搜索方法。遺傳算法與直接搜索工具箱函數(shù)可與MATLAB得優(yōu)化工具箱或其她得MATLAB程序結(jié)合使用。支持自動(dòng)得M代碼生成。8.1.1、2圖形用戶界面與命令行函數(shù)遺傳算法工具函數(shù)可以通過(guò)命令行與圖形用戶界面來(lái)使用遺傳算法。直接搜索工具函數(shù)也可以通過(guò)命令行與圖形用戶界面來(lái)進(jìn)行訪問(wèn)。圖形用戶界面可用來(lái)快速地定義問(wèn)題、設(shè)置算法選項(xiàng)、對(duì)優(yōu)化問(wèn)題進(jìn)行詳細(xì)定義。遺傳算法與直接搜索工具箱還同時(shí)提供了用于優(yōu)化管理、性能監(jiān)控及終止準(zhǔn)則定義得工具,同時(shí)還提供大量標(biāo)準(zhǔn)算法選項(xiàng)。在優(yōu)化運(yùn)行得過(guò)程中,可以通過(guò)修改選項(xiàng)來(lái)細(xì)化最優(yōu)解,更新性能結(jié)果。用戶也可以提供自己得算法選項(xiàng)來(lái)定制工具箱。8.1.1、3使用其她函數(shù)與求解器遺傳算法與直接搜索工具箱與MATLAB及優(yōu)化工具箱就是緊密結(jié)合在一起得。用戶可以用遺傳算法或直接搜索算法來(lái)尋找最佳起始點(diǎn),然后利用優(yōu)化工具箱或用MATLAB程序來(lái)進(jìn)一步尋找最優(yōu)解。通過(guò)結(jié)合不同得算法,可以充分地發(fā)揮MATLAB與工具箱得功能以提高求解得質(zhì)量。對(duì)于某些特定問(wèn)題,使用這種方法還可以得到全局(最優(yōu))解。8.1.1、4顯示、監(jiān)控與輸出結(jié)果遺傳算法與直接搜索工具箱還包括一系列繪圖函數(shù)用來(lái)可視化優(yōu)化結(jié)果。這些可視化功能直觀地顯示了優(yōu)化得過(guò)程,并且允許在執(zhí)行過(guò)程中進(jìn)行修改。工具箱還包括一系列繪圖函數(shù)用來(lái)可視化優(yōu)化結(jié)果。這些可視化功能直觀地顯示了優(yōu)化得過(guò)程,并且允許在執(zhí)行過(guò)程中進(jìn)行修改。該工具箱還提供了一些特殊繪圖函數(shù),它們不僅適用于遺傳算法,還適用于直接搜索算法。適用于遺傳算法得函數(shù)包括函數(shù)值、適應(yīng)度值與函數(shù)估計(jì)。適用于直接搜索算法得函數(shù)包括函數(shù)值、分值直方圖、系譜、適應(yīng)度值、網(wǎng)格尺寸與函數(shù)估計(jì)。這些函數(shù)可以將多個(gè)繪圖一并顯示,可直觀方便地選取最優(yōu)曲線。另外,用戶也可以添加自己得繪圖函數(shù)。使用輸出函數(shù)可以將結(jié)果寫入文件,產(chǎn)生用戶自己得終止準(zhǔn)則,也可以寫入用戶自己得圖形界面來(lái)運(yùn)行工具箱求解器。除此之外,還可以將問(wèn)題得算法選項(xiàng)導(dǎo)出,以便日后再將它們導(dǎo)入到圖形界面中去。8.1.1、5所需得產(chǎn)品支持遺傳算法與直接搜索工具箱作為其她優(yōu)化方法得補(bǔ)充,可以用來(lái)尋找最佳起始點(diǎn),然后可以再通過(guò)使用傳統(tǒng)得優(yōu)化技術(shù)來(lái)進(jìn)一步尋找最優(yōu)解。工具箱需要如下產(chǎn)品支持:(1)MATLAB。(2)優(yōu)化工具箱。8.1.1、6相關(guān)產(chǎn)品與遺傳算法與直接搜索工具箱相關(guān)得產(chǎn)品有:統(tǒng)計(jì)工具箱——應(yīng)用統(tǒng)計(jì)算法與概率模式。神經(jīng)網(wǎng)絡(luò)工具箱——設(shè)計(jì)與仿真神經(jīng)網(wǎng)絡(luò)。模糊邏輯工具箱——設(shè)計(jì)與仿真基于模糊邏輯得系統(tǒng)。金融工具箱——分析金融數(shù)據(jù)與開發(fā)金融算法。8.1.1、7所需得系統(tǒng)及平臺(tái)遺傳算法與直接搜索工具箱對(duì)于對(duì)于運(yùn)行環(huán)境、支持平臺(tái)與系統(tǒng)得需求,可隨時(shí)通過(guò)訪問(wèn)網(wǎng)站://了解最新發(fā)布得信息。這里介紹得MATLAB7、0Release14所需得最低配置就是:Windows系列操作系統(tǒng),PentiumIII500CPU、64MBRAM,空閑硬盤空間600MB以上。8.1.2編寫待優(yōu)化函數(shù)得M文件為了使用遺傳算法與直接搜索工具箱,首先必須編寫一個(gè)M文件,來(lái)確定想要優(yōu)化得函數(shù)。這個(gè)M文件應(yīng)該接受一個(gè)行向量,并且返回一個(gè)標(biāo)量。行向量得長(zhǎng)度就就是目標(biāo)函數(shù)中獨(dú)立變量得個(gè)數(shù)。本節(jié)將通過(guò)實(shí)例解釋如何編寫這種M文件。8.1.2、1編寫M文件舉例下面得例子展示了如何為一個(gè)想要優(yōu)化得函數(shù)編寫M文件。假定我們想要計(jì)算下面函數(shù)得最小值:M文件確定這個(gè)函數(shù)必須接受一個(gè)長(zhǎng)度為2得行向量X,分別與變量x1與x2相對(duì)應(yīng),并且返回一個(gè)標(biāo)量X,其值等于該函數(shù)得值。為了編寫這個(gè)M文件,執(zhí)行如下步驟:在MATLAB得File菜單中選擇New菜單項(xiàng)。選擇M-File,將在編輯器中打開一個(gè)新得M文件。在該M文件中,輸入下面兩行代碼:functionz=my_fun(x)z=x(1)^2-2*x(1)*x(2)+6*x(1)+x(2)^2-6*x(2);在MATLAB路徑指定得目錄中保存該M文件。為了查瞧該M文件就是否返回正確得值,可鍵入my_fun([23])ans=-5注意:在運(yùn)行遺傳算法工具或模式搜索工具時(shí),不要使用編輯器或調(diào)試器來(lái)調(diào)試目標(biāo)函數(shù)得M文件,否則會(huì)導(dǎo)致在命令窗口出現(xiàn)Java異常消息,并且使調(diào)試更加困難。8.1.2、2最大化與最小化遺傳算法與直接搜索工具箱中得優(yōu)化函數(shù)總就是使目標(biāo)函數(shù)或適應(yīng)度函數(shù)最小化。也就就是說(shuō),它們求解如下形式得問(wèn)題:如果我們想要求出函數(shù)f(x)得最大值,可以轉(zhuǎn)而求取函數(shù)g(x)=-f(x)得最小值,因?yàn)楹瘮?shù)g(x)最小值出現(xiàn)得地方與函數(shù)f(x)最大值出現(xiàn)得地方相同。例如,假定想要求前面所描述得函數(shù)得最大值,這時(shí),我們應(yīng)當(dāng)編寫一個(gè)M文件來(lái)計(jì)算,求函數(shù)得最小值。8.1.2、3自動(dòng)代碼生成遺傳算法與直接搜索工具箱提供了自動(dòng)代碼生成特性,可以自動(dòng)生成求解優(yōu)化問(wèn)題所需要得M文件。例如,圖8、1所示得就就是使用遺傳算法工具得自動(dòng)代碼生成特性所產(chǎn)生得M文件。另外,圖形用戶界面所輸出得優(yōu)化結(jié)果可以作為對(duì)來(lái)自命令行調(diào)用代碼得一種解釋,這些代碼還用于使例程與保護(hù)工作自動(dòng)化。圖8、1遺傳算法M文件代碼得自動(dòng)生成8、2使用遺傳算法工具初步遺傳算法與直接搜索工具箱包含遺傳算法工具與直接搜索工具。從本節(jié)至章末,將主要介紹其中得遺傳算法工具及其使用方法。本節(jié)主要介紹遺傳算法工具使用得初步知識(shí),內(nèi)容包括:遺傳算法使用規(guī)則,遺傳算法工具得使用方式,舉例說(shuō)明如何使用遺傳算法來(lái)求解一個(gè)優(yōu)化問(wèn)題,解釋遺傳算法得一些基本術(shù)語(yǔ),最后闡述遺傳算法得工作原理與工作過(guò)程。8.2.1遺傳算法使用規(guī)則遺傳算法就是一種基于自然選擇、生物進(jìn)化過(guò)程來(lái)求解問(wèn)題得方法。遺傳算法反復(fù)修改對(duì)于個(gè)體解決方案得種群。在每一步,遺傳算法隨機(jī)地從當(dāng)前種群中選擇若干個(gè)體作為父輩,并且使用它們產(chǎn)生下一代得子種群。在連續(xù)若干代之后,種群朝著優(yōu)化解得方向進(jìn)化。我們可以用遺傳算法來(lái)求解各種不適宜于用標(biāo)準(zhǔn)優(yōu)化算法求解得優(yōu)化問(wèn)題,包括目標(biāo)函數(shù)不連續(xù)、不可微、隨機(jī)或高度非線性得問(wèn)題。遺傳算法在每一步使用下列三類規(guī)則從當(dāng)前種群來(lái)創(chuàng)建下一代:選擇規(guī)則(Selectionrules),選擇對(duì)下一代種群有貢獻(xiàn)得個(gè)體,稱為父輩。交叉規(guī)則(Crossoverrules),將兩個(gè)父輩結(jié)合起來(lái)構(gòu)成下一代得子輩種群。變異規(guī)則(Mutationrules),施加隨機(jī)變化給父輩個(gè)體來(lái)構(gòu)成子輩。遺傳算法與標(biāo)準(zhǔn)優(yōu)化算法主要在兩個(gè)方面有所不同,它們得比較情況歸納于表8、1中。表8、1遺傳算法與標(biāo)準(zhǔn)優(yōu)化算法比較標(biāo)準(zhǔn)算法遺傳算法每次迭代產(chǎn)生一個(gè)單點(diǎn),點(diǎn)得序列逼近一個(gè)優(yōu)化解每次迭代產(chǎn)生一個(gè)種群,種群逼近一個(gè)優(yōu)化解通過(guò)確定性得計(jì)算在該序列中選擇下一個(gè)點(diǎn)通過(guò)隨機(jī)進(jìn)化選擇計(jì)算來(lái)選擇下一代種群8.2.2遺傳算法使用方式遺傳算法工具有兩種使用方式:以命令行方式調(diào)用遺傳算法函數(shù)ga。使用遺傳算法工具,從圖形用戶界面到遺傳算法。本節(jié)對(duì)這些方式做一個(gè)簡(jiǎn)要得介紹。8.2.2、1在命令行調(diào)用函數(shù)ga對(duì)于在命令行使用遺傳算法,可以用下列語(yǔ)法調(diào)用遺傳算法函數(shù)ga:[xfval]=ga(fitnessfun,nvars,options)其中:fitnessfun就是適應(yīng)度函數(shù)句柄;nvars就是適應(yīng)度函數(shù)得獨(dú)立變量得個(gè)數(shù);options就是一個(gè)包含遺傳算法選項(xiàng)參數(shù)得結(jié)構(gòu)。如果不傳遞選項(xiàng)參數(shù),則ga使用它本身得缺省選項(xiàng)值。函數(shù)所給出得結(jié)果:fval——適應(yīng)度函數(shù)得最終值;x——最終值到達(dá)得點(diǎn)。我們可以十分方便地把遺傳算法工具輸出得結(jié)果直接返回到MATLAB得workspace(工作空間),或以不同得選項(xiàng)從M文件多次調(diào)用函數(shù)ga來(lái)運(yùn)行遺傳算法。調(diào)用函數(shù)ga時(shí),需要提供一個(gè)選項(xiàng)結(jié)構(gòu)options。后面得有關(guān)章節(jié)對(duì)于在命令行使用函數(shù)ga與創(chuàng)建選項(xiàng)結(jié)構(gòu)options提供了詳細(xì)得描述。8.2.2、2通過(guò)GUI使用遺傳算法遺傳算法工具有一個(gè)圖形用戶界面GUI,它使我們可以使用遺傳算法而不用工作在命令行方式。為了打開遺傳算法工具,可鍵入gatool打開得遺傳算法工具圖形用戶界面如圖8、2所示。輸入適應(yīng)度函數(shù)輸入適應(yīng)度函數(shù)輸入適應(yīng)度函數(shù)輸入適應(yīng)度函數(shù)得變量數(shù)目開始遺傳算法顯示結(jié)果顯示參數(shù)描述圖8、2遺傳算法工具為了使用遺傳算法工具,首先必須輸入下列信息:Fitnessfunction(適應(yīng)度函數(shù))——欲求最小值得目標(biāo)函數(shù)。輸入適應(yīng)度函數(shù)得形式為fitnessfun,其中fitnessfun、m就是計(jì)算適應(yīng)度函數(shù)得M文件。在前面“編寫待優(yōu)化函數(shù)得M文件”一節(jié)里已經(jīng)解釋了如何編寫這種M文件。符號(hào)產(chǎn)生一個(gè)對(duì)于函數(shù)fitnessfun得函數(shù)句柄。Numberofvariables(變量個(gè)數(shù))——適應(yīng)度函數(shù)輸入向量得長(zhǎng)度。對(duì)于“編寫待優(yōu)化函數(shù)得M文件”一節(jié)所描述得函數(shù)My_fun,這個(gè)參數(shù)就是2。點(diǎn)擊Start按鈕,運(yùn)行遺傳算法,將在StatusandResults(狀態(tài)與結(jié)果)窗格中顯示出相應(yīng)得運(yùn)行結(jié)果。在Options窗格中可以改變遺傳算法得選項(xiàng)。為了查瞧窗格中所列出得各類選項(xiàng),可單擊與之相連得符號(hào)“+”。8.2.3舉例:Rastrigin函數(shù)本節(jié)介紹一個(gè)例子,講述如何尋找Rastrigin函數(shù)得最小值與顯示繪制得圖形。Rastrigin函數(shù)就是最常用來(lái)測(cè)試遺傳算法得一個(gè)典型函數(shù)。Rastrigin函數(shù)得可視化圖形顯示,它具有多個(gè)局部最小值與一個(gè)全局最小值,遺傳算法可以幫助我們確定這種具有多個(gè)局部最小值函數(shù)得最優(yōu)解。8.2.3、1Rastrigin函數(shù)具有兩個(gè)獨(dú)立變量得Rastrigin函數(shù)定義為Rastrigin函數(shù)得圖形如圖8、3所示。工具箱包含一個(gè)M文件,即rastriginsfcn、m,就是用來(lái)計(jì)算Rastrigin函數(shù)值得。全局最小點(diǎn)[0,0]全局最小點(diǎn)[0,0]圖8、3Rastrigin函數(shù)圖形如圖8、3所示,Rastrigin函數(shù)有許多局部最小值——在圖上顯示為“谷底(valleys)”。然而,該函數(shù)只有一個(gè)全局最小值,出現(xiàn)在x-y平面上得點(diǎn)[0,0]處,正如圖中豎直線指示得那樣,函數(shù)得值在那里就是0。在任何不同于[0,0]得局部最小點(diǎn)處,Rastrigin函數(shù)得值均大于0。局部最小處距原點(diǎn)越遠(yuǎn),該點(diǎn)處Rastrigin函數(shù)得值越大。Rastrigin函數(shù)之所以最常用來(lái)測(cè)試遺傳算法,就是因?yàn)樗性S多局部最小點(diǎn),使得用標(biāo)準(zhǔn)得、基于梯度得查找全局最小得方法十分困難。圖8、4所示就是Rastrigin函數(shù)得輪廓線,它顯示出最大最小交替變化得情形。全局最小點(diǎn)[0,0]局部最小點(diǎn)全局最小點(diǎn)[0,0]局部最小點(diǎn)局部最小點(diǎn)圖8、4Rastrigin函數(shù)得輪廓線8.2.3、2尋找Rastrigin函數(shù)得最小值本節(jié)解釋如何使用遺傳算法來(lái)尋找Rastrigin函數(shù)得最小值。注意:因?yàn)檫z傳算法使用隨機(jī)數(shù)據(jù)來(lái)進(jìn)行它得搜索,所以該算法每一次運(yùn)行時(shí)所返回得結(jié)果會(huì)稍微有些不同。為了查找最小值,進(jìn)行下列步驟:在命令行鍵入gatool,打開遺傳算法工具。在遺傳算法工具得相應(yīng)欄目,輸入適應(yīng)度函數(shù)與變量個(gè)數(shù)。在“Fitnessfunction(適應(yīng)度函數(shù))”文本框中,輸入rastriginsfcn;在“Numberofvariables(變量個(gè)數(shù))”文本框中,輸入2,這就就是Rastrigin函數(shù)獨(dú)立變量得個(gè)數(shù)。這一步操作如圖8、5所示。圖8、5輸入適應(yīng)度函數(shù)與變量個(gè)數(shù)在“Runsolver(運(yùn)行求解器)”窗格中,單擊Start按鈕,如圖8、6所示。圖8、6單擊運(yùn)行求解器Start按鈕在算法運(yùn)行得同時(shí),“Currentgeneration(當(dāng)前代數(shù))”文本框中顯示出當(dāng)前得代數(shù)。通過(guò)點(diǎn)擊“暫停(Pause)”按鈕,可以使算法臨時(shí)暫停一下。當(dāng)這樣做得時(shí)候,該按鈕得名字變?yōu)椤癛esume(恢復(fù))”。為了從暫停處恢復(fù)算法得運(yùn)行,可單擊這個(gè)“Resume”按鈕。當(dāng)算法完成時(shí),“Statusandresults”窗格出現(xiàn)如圖8、7所示得情形。最終點(diǎn)得適應(yīng)度函數(shù)值最終點(diǎn)最終點(diǎn)得適應(yīng)度函數(shù)值最終點(diǎn)圖8、7狀態(tài)與結(jié)果顯示“Statusandresults”窗格顯示下列信息:算法終止時(shí)適應(yīng)度函數(shù)得最終值:Fitnessfunctionvalue:0、44585025注意:所顯示得值非常接近于Rastrigin函數(shù)得實(shí)際最小值0?!斑z傳算法舉例”一節(jié)描述了一些方法,可以用來(lái)得到更接近實(shí)際最小值得結(jié)果。算法終止得原因:Optimizationterminated:maximumnumberofgenerationsexceeded、即退出得原因就是:超過(guò)最大代數(shù)而導(dǎo)致優(yōu)化終止。在本例中,算法在100代后結(jié)束,這就是“Generations(代數(shù))”選項(xiàng)得缺省值,此選項(xiàng)規(guī)定了算法計(jì)算得最大代數(shù)。最終點(diǎn),在本例中就是[0、00274-0、00516]。8.2.3、3從命令行查找最小值為了從命令行查找Rastrigin函數(shù)得最小值,可鍵入[xfvalreason]=ga(rastriginsfcn,2)這將返回x=0、0027-0、0052fval=0、0068reason=Optimizationterminated:maximumnumberofgenerationsexceeded、其中:x就是算法返回得最終點(diǎn);fval就是該最終點(diǎn)處適應(yīng)度函數(shù)得值;reason就是算法結(jié)束得原因。8.2.3、4顯示繪制圖形“Plots(繪圖)”窗格可以顯示遺傳算法運(yùn)行時(shí)所提供得有關(guān)信息得各種圖形。這些信息可以幫助我們改變算法得選項(xiàng),改進(jìn)算法得性能。例如,為了繪制每一代適應(yīng)度函數(shù)得最佳值與平均值,選中復(fù)選框“Bestfitness(最佳適應(yīng)度)”,如圖8、8所示。圖8、8繪圖對(duì)話框當(dāng)點(diǎn)擊Start按鈕時(shí),遺傳算法工具顯示每一代適應(yīng)度函數(shù)得最佳值與平均值得繪制圖形。當(dāng)算法停止時(shí),所出現(xiàn)得圖形如圖8、9所示。最佳值0、0067796平均值0、014788最佳值0、0067796平均值0、014788圖8、9各代適應(yīng)度函數(shù)得最佳值與平均值在每一代中,圖得底部得點(diǎn)表示最佳適應(yīng)度值,而其上得點(diǎn)表示平均適應(yīng)度值。圖得頂部還顯示出當(dāng)前一代得最佳值0、0067796與平均值0、014788。為了得到最佳適應(yīng)度值減少到多少為更好得直觀圖形,我們可以將圖中y軸得刻度改變?yōu)閷?duì)數(shù)刻度。為此,需進(jìn)行如下操作:(1)從繪圖窗格得Edit(編輯)菜單中選擇“AxesProperties(坐標(biāo)軸屬性)”,打開屬性編輯器,如圖8、10所示。選擇對(duì)數(shù)刻度單擊Y表項(xiàng)選擇對(duì)數(shù)刻度單擊Y表項(xiàng)圖8、10繪圖屬性編輯器(2)點(diǎn)擊Y表項(xiàng)。(3)在“Scale(刻度)”窗格,選擇“Log(對(duì)數(shù))”。繪制得圖形如圖8、11所示。最佳值0、0067796平均值0、014788最佳值0、0067796平均值0、014788圖8、11每一代適應(yīng)度函數(shù)最佳值與平均值得對(duì)數(shù)圖形典型情況下,在早期各代中,當(dāng)個(gè)體離理想值較遠(yuǎn)時(shí),最佳值會(huì)迅速得到改進(jìn)。在后來(lái)各代中,種群越接近最佳點(diǎn),最佳值改進(jìn)得越慢。8.2.4遺傳算法得一些術(shù)語(yǔ)本節(jié)解釋遺傳算法得一些基本術(shù)語(yǔ),主要包括:適應(yīng)度函數(shù)(FitnessFunctions)。個(gè)體(Individuals)。種群(Populations)與代(Generations)。適應(yīng)度值(FitnessValues)與最佳適應(yīng)度值(BestFitnessValues);父輩與子輩(ParentsandChildren)。8.2.4、1適應(yīng)度函數(shù)所謂適應(yīng)度函數(shù)就就是想要優(yōu)化得函數(shù)。對(duì)于標(biāo)準(zhǔn)優(yōu)化算法而言,這個(gè)函數(shù)稱為目標(biāo)函數(shù)。該工具箱總就是試圖尋找適應(yīng)度函數(shù)得最小值。我們可以將適應(yīng)度函數(shù)編寫為一個(gè)M文件,作為輸入?yún)?shù)傳遞給遺傳算法函數(shù)。8.2.4、2個(gè)體一個(gè)個(gè)體就是可以施加適應(yīng)度函數(shù)得任意一點(diǎn)。一個(gè)個(gè)體得適應(yīng)度函數(shù)值就就是它得得分或評(píng)價(jià)。例如,如果適應(yīng)度函數(shù)就是則向量(2,-3,1)就就是一個(gè)個(gè)體,向量得長(zhǎng)度就就是問(wèn)題中變量得個(gè)數(shù)。個(gè)體(2,-3,1)得得分就是f(2,-3,1)=51。個(gè)體有時(shí)又稱為基因組或染色體組(genome),個(gè)體得向量項(xiàng)稱為基因(genes)。8.2.4、3種群與代所謂種群就是指由個(gè)體組成得一個(gè)數(shù)組或矩陣。例如,如果個(gè)體得長(zhǎng)度就是100,適應(yīng)度函數(shù)中變量得個(gè)數(shù)為3,我們就可以將這個(gè)種群表示為一個(gè)100×3得矩陣。相同得個(gè)體在種群中可以出現(xiàn)不止一次。例如,個(gè)體(2,-3,1)就可以在數(shù)組得行中出現(xiàn)多次。每一次迭代,遺傳算法都對(duì)當(dāng)前種群執(zhí)行一系列得計(jì)算,產(chǎn)生一個(gè)新得種群。每一個(gè)后繼得種群稱為新得一代。8.2.4、4多樣性多樣性或差異(Diversity)涉及一個(gè)種群得各個(gè)個(gè)體之間得平均距離。若平均距離大,則種群具有高得多樣性;否則,其多樣性低。在圖8、12中,左面得種群具有高得多樣性,亦即差異大;而右面得種群多樣性低,亦即差異小。圖8、12種群多樣性比較多樣性就是遺傳算法必不可少得本質(zhì)屬性,這就是因?yàn)樗苁惯z傳算法搜索一個(gè)比較大得解得空間區(qū)域。8.2.4、5適應(yīng)度值與最佳適應(yīng)度值個(gè)體得適應(yīng)度值就就是該個(gè)體得適應(yīng)度函數(shù)得值。由于該工具箱總就是查找適應(yīng)度函數(shù)得最小值,所以一個(gè)種群得最佳適應(yīng)度值就就是該種群中任何個(gè)體得最小適應(yīng)度值。8.2.4、6父輩與子輩為了生成下一代,遺傳算法在當(dāng)前種群中選擇某些個(gè)體,稱為父輩,并且使用它們來(lái)生成下一代中得個(gè)體,稱為子輩。典型情況下,該算法更可能選擇那些具有較佳適應(yīng)度值得父輩。8.2.5遺傳算法如何工作本節(jié)簡(jiǎn)要介紹遺傳算法得工作原理或工作過(guò)程,內(nèi)容包括:算法要點(diǎn);初始種群;生成下一代;后一代得繪圖;算法得停止條件。8.2.5、1算法要點(diǎn)下面得要點(diǎn)總結(jié)了遺傳算法就是如何工作得:(1)首先,算法創(chuàng)建一個(gè)隨機(jī)種群。(2)接著,算法生成一個(gè)新得種群序列,即新得一代。在每一步,該算法都使用當(dāng)前一代中得個(gè)體來(lái)生成下一代。為了生成新一代,算法執(zhí)行下列步驟:(a)通過(guò)計(jì)算其適應(yīng)度值,給當(dāng)前種群得每一個(gè)成員打分。(b)確定原來(lái)得適應(yīng)度值得比例尺度,將其轉(zhuǎn)換為更便于使用得范圍內(nèi)得值。(c)根據(jù)它們得適應(yīng)度選擇父輩。(d)由父輩產(chǎn)生子輩。子輩得產(chǎn)生可以通過(guò)隨機(jī)改變一個(gè)單個(gè)父輩,亦即變異(mutation)來(lái)進(jìn)行,也可以通過(guò)組合一對(duì)父輩得向量項(xiàng),亦即交叉(crossover)來(lái)進(jìn)行。(e)用子輩替換當(dāng)前種群,形成下一代。(3)最后,若停止準(zhǔn)則之一得到滿足,則該算法停止。關(guān)于停止準(zhǔn)則,可參見“8.2.5、7算法得停止條件”一節(jié)。8.2.5、2初始種群遺傳算法總就是以產(chǎn)生一個(gè)隨機(jī)得初始種群開始,如圖8、13所示。圖8、13初始種群在本例中,初始種群包含20個(gè)個(gè)體,這恰好就是“Population(種群)”選項(xiàng)中得“Populationsize(種群尺度)”得缺省值。注意:初始種群中得所有個(gè)體均處于圖上右上角得那個(gè)象限,也就就是說(shuō),它們得坐標(biāo)處于0與1之間,這就是因?yàn)椤癙opulation”選項(xiàng)中得“Initialrange(初始范圍)”得缺省值就是[0;1]。如果已知函數(shù)得最小點(diǎn)大約位于何處,就可以設(shè)置一個(gè)適當(dāng)?shù)谩癐nitialrange”,以便使該點(diǎn)處于那個(gè)范圍得中間附近。例如,如果確信Rastrigin函數(shù)得最小值在點(diǎn)[0,0]附近,那么就可以直接設(shè)置“Initialrange”為[-1;1]。然而,正如本例所顯示得那樣,即使沒有給“Initialrange”設(shè)置一個(gè)理想得值,遺傳算法也還就是能夠找到那個(gè)最小值。8.2.5、3產(chǎn)生下一代在每一步,遺傳算法使用當(dāng)前種群來(lái)產(chǎn)生子輩,即獲得下一代。算法在當(dāng)前種群中選擇一組個(gè)體,稱為父輩,這些個(gè)父輩將其genes——亦即其向量中得項(xiàng)——貢獻(xiàn)給它們得子輩。遺傳算法通常選擇那些具有較好適應(yīng)度值得個(gè)體作為父輩。我們可以在“Selection(選擇)”選項(xiàng)得“Selectionfunction(選擇函數(shù))”文本框中指定遺傳算法用來(lái)選擇父輩得函數(shù)。遺傳算法對(duì)于下一代產(chǎn)生三類子輩:優(yōu)良子輩(Elitechildren),就是在當(dāng)前代中具有最佳適應(yīng)度值得那些個(gè)體。這些個(gè)體子輩存活到下一代。交叉子輩(Crossoverchildren),就是由一對(duì)父輩向量組合產(chǎn)生得。變異子輩(Mutationchildren),就是對(duì)一個(gè)單個(gè)父輩引入隨機(jī)改變即變異產(chǎn)生得。圖8、14表示了這三個(gè)類型得子輩。優(yōu)良子輩優(yōu)良子輩交叉子輩變異子輩圖8、14三類子輩在“8.3.3、5變異與交叉”一節(jié)解釋如何指定遺傳算法產(chǎn)生得每一類子輩得數(shù)目,以及用來(lái)執(zhí)行完成交叉與變異得函數(shù)。8.2.5、4交叉子輩算法通過(guò)組合當(dāng)前種群中得父輩對(duì)(Pair)來(lái)產(chǎn)生交叉子輩。在子輩向量得每一個(gè)相同位置處,缺省得交叉函數(shù)在兩個(gè)父輩之一得相同位置處隨機(jī)選擇一項(xiàng),即基因,并將它指派給其子輩。8.2.5、5變異子輩算法通過(guò)隨機(jī)改變個(gè)體父輩中得基因而產(chǎn)生變異子輩。按照缺省,算法給父輩增加一個(gè)高斯分布得隨機(jī)向量。圖8、15表示出初始種群得子輩,也即第二代種群,并且指出它們就是否為優(yōu)良子輩、交叉子輩或變異子輩。圖8、15初始種群得子輩8.2.5、6后代圖形繪制圖8、16展示出在迭代60次,80次,95次,100次時(shí)得種群得圖形。圖8、16在迭代60,80,95,100次時(shí)得種群隨著代數(shù)得增加,種群中得個(gè)體靠近在一起,且逼近最小值點(diǎn)[0,0]。8.2.5、7算法得停止條件遺傳算法使用下列5個(gè)條件來(lái)確定何時(shí)停止:Generations(代數(shù))——當(dāng)產(chǎn)生得代得數(shù)目達(dá)到規(guī)定得代數(shù)得值時(shí),算法停止。Timelimit(時(shí)限)——在運(yùn)行時(shí)間得秒數(shù)等于時(shí)限時(shí),算法停止。Fitnesslimit(適應(yīng)度限)——當(dāng)適應(yīng)度函數(shù)得值對(duì)于當(dāng)前種群得最佳點(diǎn)小于或等于適應(yīng)度限時(shí),算法停止。Stallgenerations(停滯代數(shù))——在連續(xù)繁殖得時(shí)間序列中,若長(zhǎng)時(shí)間不繁殖新代,亦即目標(biāo)函數(shù)無(wú)改進(jìn),到達(dá)停滯代數(shù)規(guī)定得代數(shù)時(shí),則算法停止。Stalltimelimit(停滯時(shí)限)——在秒數(shù)等于停滯時(shí)限得時(shí)間間隔期間,若目標(biāo)函數(shù)無(wú)改進(jìn),則算法停止。若這5個(gè)條件中任何一個(gè)條件一旦滿足,則該算法停止。我們可以在遺傳算法工具得“Stoppingcriteria(停止標(biāo)準(zhǔn))”選項(xiàng)中指定這些標(biāo)準(zhǔn)得值。它們得缺省值如圖8、17所示。圖8、17停止標(biāo)準(zhǔn)得缺省值當(dāng)運(yùn)行遺傳算法時(shí),“Status(狀態(tài))”面板顯示這些導(dǎo)致算法停止得標(biāo)準(zhǔn)。“Timelimit(時(shí)限)”選項(xiàng)與“Stalltimelimit”選項(xiàng)可以用來(lái)防止算法運(yùn)行過(guò)長(zhǎng)得時(shí)間。如果算法由于這兩個(gè)條件之一而停止,則可以通過(guò)相應(yīng)增加“Timelimit”或“Stalltimelimit”得值來(lái)改善運(yùn)行得結(jié)果。8、3使用遺傳算法工具求解問(wèn)題本節(jié)首先概括使用遺傳算法工具GUI得一般步驟,然后介紹如何從命令行使用遺傳算法工具,最后通過(guò)例子,詳細(xì)說(shuō)明如何使用遺傳算法工具來(lái)求解優(yōu)化問(wèn)題。8.3.1使用遺傳算法GUI在前面一章,已經(jīng)介紹了使用遺傳算法工具得初步知識(shí)。本節(jié)將簡(jiǎn)要?dú)w納使用遺傳算法工具GUI來(lái)求解優(yōu)化問(wèn)題得一般步驟,內(nèi)容包括:打開遺傳算法工具;在遺傳算法工具中定義問(wèn)題;運(yùn)行遺傳算法;暫停與停止運(yùn)算;圖形顯示;創(chuàng)建用戶圖形函數(shù);復(fù)現(xiàn)運(yùn)行結(jié)果;設(shè)置選項(xiàng)參數(shù);輸入輸出參數(shù)及問(wèn)題;從最后種群繼續(xù)運(yùn)行遺傳算法。8.3.1、1打開遺傳算法工具在MATLAB窗口中輸入gatool,打開、進(jìn)入遺傳算法工具,初啟時(shí)得界面顯示如圖8、18所示。圖8、18遺傳算法工具初啟時(shí)得界面8.3.1、2在遺傳算法工具中定義問(wèn)題在下列兩個(gè)文本框中定義所要解決得問(wèn)題:(1)適應(yīng)度函數(shù)——求解得問(wèn)題就是求目標(biāo)函數(shù)得最小值。輸入一個(gè)計(jì)算適應(yīng)度函數(shù)得M文件函數(shù)得句柄。(2)變量個(gè)數(shù)——適應(yīng)度函數(shù)得獨(dú)立變量個(gè)數(shù)。注意:當(dāng)運(yùn)行遺傳算法工具時(shí)不要用“Editor/Debugger(編輯/調(diào)試)”功能來(lái)調(diào)試目標(biāo)函數(shù)得M文件,而要從命令行直接調(diào)用目標(biāo)函數(shù)或把M文件輸入到遺傳算法函數(shù)ga。為了方便調(diào)試,可以在遺傳算法工具中把問(wèn)題輸出到MATLAB工作窗中。如圖8、19所示,輸入前面章節(jié)所介紹得Rastrigin函數(shù)或my_fun函數(shù)作為適配度函數(shù),它們得變量個(gè)數(shù)為2。圖8、19輸入適應(yīng)度函數(shù)與變量個(gè)數(shù)8.3.1、3運(yùn)行遺傳算法要運(yùn)行遺傳算法,在“Runsolver(運(yùn)行求解器)”中單擊Start按紐,如圖8、20所示。圖8、20單擊Start按鈕這時(shí),在“Currentgeneration(當(dāng)前代)”文本框中顯示當(dāng)前代得數(shù)目,在Statusandresults”窗格顯示“GArunning”等信息,如圖8、23所示。圖8、21當(dāng)前代數(shù)與狀態(tài)與結(jié)果窗格當(dāng)遺傳算法停止時(shí),“Statusandresults”窗格顯示:“GAterminated(GA終止)”信息。最后一代最佳個(gè)體得適應(yīng)度函數(shù)值。算法停止得原因。最終點(diǎn)得坐標(biāo)。圖8、22顯示當(dāng)運(yùn)行例子“Rastrigin函數(shù)”遺傳算法停止時(shí)得信息。圖8、22Rastrigin函數(shù)得遺傳算法運(yùn)行結(jié)果在遺傳算法工具中,當(dāng)遺傳算法運(yùn)行時(shí)可以更改多個(gè)參數(shù)設(shè)置。所做得改變將被應(yīng)用到下一代,即在下一代將按照新設(shè)置得參數(shù)運(yùn)行。在下一代開始但尚未應(yīng)用改變得參數(shù)之前,在“Statusandresults”窗格顯示信息“Changespending”。而在下一代開始且應(yīng)用了改變得參數(shù)時(shí),在“Statusandresults”窗格顯示信息“Changesapplied”。這樣在遺傳算法運(yùn)行時(shí)更改了參數(shù)設(shè)置產(chǎn)生得輸出信息如圖8、23所示。圖8、23遺傳算法運(yùn)行時(shí)更改了參數(shù)設(shè)置8.3.1、4暫停與停止運(yùn)算遺傳算法得暫停與停止運(yùn)行,可以通過(guò)下面操作繼續(xù)運(yùn)行:單擊按鈕“Pause(暫停)”,算法暫停運(yùn)行。該按鈕上得文字變?yōu)椤癛esume(恢復(fù))”。單擊這個(gè)“Resume”按鈕,即恢復(fù)遺傳算法繼續(xù)運(yùn)行。單擊按鈕“Stop”,算法停止運(yùn)行?!癝tatusandresults”窗口顯示停止運(yùn)行時(shí)當(dāng)前代最佳點(diǎn)得適應(yīng)度函數(shù)值。注意:如果單擊按鈕“Stop”,然后通過(guò)單擊按鈕“Start”再次運(yùn)行時(shí),遺傳算法將以新得隨機(jī)初始種群或在“Initialpopulation(初始種群)”文本框中專門指定得種群運(yùn)行。如果需要在算法停止后能再次恢復(fù)運(yùn)行,則可以通過(guò)交替地單擊按鈕“Pause”與“Resume”來(lái)控制算法暫停或繼續(xù)運(yùn)行。遺傳算法得停止運(yùn)行常常就是通過(guò)設(shè)置算法停止準(zhǔn)則來(lái)進(jìn)行控制得。使用停止準(zhǔn)則,設(shè)置停止準(zhǔn)則參數(shù),可以解決遺傳算法在何時(shí)停止運(yùn)行得控制問(wèn)題。這樣,也就不用通過(guò)單擊“Stop”按鈕來(lái)人為地控制算法運(yùn)行得停止。遺傳算法有五個(gè)停止準(zhǔn)則或條件,其中任何一個(gè)條件滿足,算法即停止運(yùn)行。這些停止準(zhǔn)則就是:代數(shù)——算法運(yùn)行到規(guī)定得代數(shù)。時(shí)限——算法運(yùn)行到規(guī)定得時(shí)間。適應(yīng)度限——當(dāng)前代得最佳適應(yīng)度值小于或等于規(guī)定得值。停滯代數(shù)——適應(yīng)度函數(shù)值在運(yùn)行規(guī)定得代數(shù)后沒有改進(jìn)。停滯時(shí)限——適應(yīng)度函數(shù)值在運(yùn)行規(guī)定時(shí)間后沒有改進(jìn)。如果想使算法一直運(yùn)行到按下按鈕“Pause”或“Stop”時(shí)才停下來(lái),可以改變這些停止準(zhǔn)則得參數(shù)值:設(shè)置“Generations(代數(shù))”為Inf。設(shè)置“Time”為Inf。設(shè)置“Fitnesslimit”為–Inf。設(shè)置“Stallgenerations”為Inf。設(shè)置“Stalltimelimit”為Inf。圖8、24顯示了這些更改后得設(shè)置。圖8、24改變停止準(zhǔn)則參數(shù)注意:在命令行中調(diào)用遺傳算法函數(shù)ga時(shí),并不使用這些參數(shù)設(shè)置,就好像就是不按下“Ctrl+C”鍵,函數(shù)就會(huì)永遠(yuǎn)運(yùn)行而不會(huì)停止。其實(shí)相反,可以設(shè)置“Generations”或者“Time”做為限值來(lái)控制算法停止運(yùn)行。8.3.1、5圖形顯示圖8、25為“Plots(繪圖)”窗格,可以用來(lái)控制顯示遺傳算法運(yùn)行結(jié)果變化得圖形。圖8、25在繪圖窗格選擇輸出項(xiàng)選擇所要顯示得圖形參數(shù)得復(fù)選框。例如,如果選擇“BestFitness(最佳適應(yīng)度)”與“Bestindividual(最佳個(gè)體)”,運(yùn)行例子“Rastrigin函數(shù)”,其顯示輸出如圖8、26所示。圖8、26Rastrigin函數(shù)最佳適應(yīng)度與最佳個(gè)體圖8、28上部離散點(diǎn)為每一代得最佳適應(yīng)度值與平均適應(yīng)度值,下部柱型圖表示當(dāng)前代最佳適應(yīng)度值對(duì)應(yīng)得點(diǎn)得坐標(biāo)。注意:當(dāng)要想顯示兩個(gè)以上參數(shù)項(xiàng)得圖形時(shí),可選擇相應(yīng)參數(shù)項(xiàng)得復(fù)選框,單獨(dú)打開一個(gè)較大得圖形窗口即可。8.3.1、6舉例——?jiǎng)?chuàng)建用戶繪圖函數(shù)如果工具箱中沒有符合想要輸出圖形得繪圖函數(shù),用戶可以編寫自己得繪圖函數(shù)。遺傳算法在每次運(yùn)行時(shí)調(diào)用這個(gè)函數(shù),畫出圖形。這里舉例說(shuō)明怎樣創(chuàng)建一個(gè)用戶繪圖函數(shù)來(lái)顯示從前一代到當(dāng)前代最佳適應(yīng)度值得變化情形,內(nèi)容包括:創(chuàng)建繪圖函數(shù),使用繪圖函數(shù),繪圖函數(shù)如何作用。(1)創(chuàng)建繪圖函數(shù)為了創(chuàng)建繪圖函數(shù),在MATLAB編輯器中復(fù)制、粘貼下列代碼到一個(gè)新得M文件。Functionstate=gaplotchange(options,state,flag)%GAPLOTCHANGEPlotsthechangeinthebestscorefromthe%previousgeneration、persistentlast_best%Bestscoreinthepreviousgenerationif(strcmp(flag,'init'))%Setuptheplotset(gca,'xlim',[1,options、Generations],'Yscale','log');holdon;xlabelGenerationtitle('ChangeinBestFitnessValue')endbest=min(state、Score); %Bestscoreinthecurrentgenerationifstate、Generation==0 %Setlast_besttobest。last_best=best;elsechange=last_best-best;%Changeinbestscorelast_best=best;plot(state、Generation,change,'、r');title(['ChangeinBestFitnessValue'])end然后在MATLAB路徑下將其存為M文件gaplotchange、m。(2)使用繪圖函數(shù)為了使用用戶繪圖函數(shù),在”繪圖(Plots)”窗格中選擇“Customfunction(定制函數(shù))”,并且在其右邊得文本框中輸入函數(shù)名gaplotchange。為了對(duì)用戶繪圖函數(shù)輸出得最佳適應(yīng)度值圖形進(jìn)行比較,在這里也選擇“BestFitness”?,F(xiàn)在,如果運(yùn)行例子函數(shù)Rastrigin,顯示出來(lái)得圖形如圖8、27所示。最佳適應(yīng)度值得變化最佳值0、0021904平均值0、49832最佳適應(yīng)度值得變化最佳值0、0021904平均值0、49832圖8、27用戶繪圖函數(shù)輸出得Rastrigin函數(shù)運(yùn)行結(jié)果注意:因?yàn)閳D中下半部得y-軸為對(duì)數(shù)刻度,所以圖形中得離散點(diǎn)僅僅顯示大于零得點(diǎn)。對(duì)數(shù)刻度能顯示適應(yīng)度函數(shù)得微小變化,而上面得圖形則不能顯示出微小變化。(3)繪圖函數(shù)如何作用繪圖函數(shù)使用包含在下面結(jié)構(gòu)體中得信息,它們由遺傳算法傳遞給繪圖函數(shù)作為輸入?yún)?shù):options(參數(shù))—當(dāng)前參數(shù)設(shè)置。state(狀態(tài))—關(guān)于當(dāng)前代得信息。flag(曲線標(biāo)志)—曲線表示為對(duì)數(shù)等得當(dāng)前狀態(tài)。繪圖函數(shù)得主要作用可以描述如下:persistentlast_best生成永久變量last_best——即前一代得最佳值。永久變量保存著多種圖形函數(shù)調(diào)用類型。set(gca,'xlim',[1,options、Generations],'Yscale','log');在遺傳算法運(yùn)行前建立圖形。options、Generation為代數(shù)得最大值。best=min(state、Score)state、Score包含當(dāng)前代中所有個(gè)體得得分值,變量best就是其中最小得得分值。結(jié)構(gòu)體狀態(tài)文本框得完整描述可參見“8.4.1、1圖形參數(shù)”一節(jié)。change=last_best-best變量change就是前一代得最佳值減去當(dāng)前代得最佳值。plot(state、Generation,change,'、r')畫出當(dāng)前代得變化曲線,變量維數(shù)包含在state、Generation中。函數(shù)gaplotchange得代碼包含了函數(shù)gaplotbestf代碼中許多相同成分,函數(shù)gaplotbestf生成最佳適應(yīng)度圖形。8.3.1、7復(fù)現(xiàn)運(yùn)行結(jié)果為了復(fù)現(xiàn)遺傳算法前一次得運(yùn)行結(jié)果,選擇“Userandomstatesfrompreviousrun(使用前一次運(yùn)行得隨機(jī)狀態(tài))”復(fù)選框。這樣就把遺傳算法所用得隨機(jī)數(shù)發(fā)生器得狀態(tài)重新設(shè)置為前一次得值。如果沒有改變遺傳算法工具中得所有設(shè)置,那么遺傳算法下一次運(yùn)行時(shí)返回得結(jié)果與前一次運(yùn)行得結(jié)果一致。正常情況下,不要選擇“Userandomstatesfrompreviousrun”這個(gè)復(fù)選框,可以充分利用遺傳算法隨機(jī)搜索得優(yōu)點(diǎn)。如果想要分析特定得運(yùn)行結(jié)果或者顯示相對(duì)個(gè)體得精確結(jié)果,可以選擇“Userandomstatesfrompreviousrun”復(fù)選框。8.3.1、8設(shè)置選項(xiàng)參數(shù)設(shè)置遺傳算法工具使用時(shí)得選項(xiàng)參數(shù)有兩種方法:一種就是在遺傳算法工具GUI得“Options”窗格中直接進(jìn)行設(shè)置,另一種就是在MATLAB工作窗口中通過(guò)命令行方式進(jìn)行設(shè)置。在參數(shù)“Options”窗格中設(shè)置遺傳算法得各種運(yùn)行參數(shù),如圖8、28所示。每一類參數(shù)對(duì)應(yīng)有一個(gè)窗格,單擊該類參數(shù)時(shí),對(duì)應(yīng)窗格展開。例如,點(diǎn)擊“Population”參數(shù)選項(xiàng),種群窗格展開來(lái),可以逐一設(shè)置其中得參數(shù)項(xiàng),如Populationtype(種群類型)、Populationsize(種群尺度)、Creationfunction(創(chuàng)建函數(shù))、Initialpopulation、Initialscore(初始得分)、Initialrange(初始范圍)等。此外,其她選項(xiàng)參數(shù)類還有:Fitnessscaling(適應(yīng)度測(cè)量)、selection、Reproduction、Mutation、Crossover、Migration(遷移)、Hybridfunction(混合函數(shù))、Stoppingcriteria、Outputfunction(輸出函數(shù))、Displaytomandwindow(顯示到命令窗口)、Vectorize(向量化)等。這些參數(shù)類各自對(duì)應(yīng)一個(gè)參數(shù)窗格,點(diǎn)擊后相應(yīng)窗格隨即展開,可以進(jìn)行參數(shù)項(xiàng)得設(shè)置。所有變量參數(shù)得含義及詳細(xì)描述可參見“8.4.1遺傳算法參數(shù)”一節(jié)。圖8、28選項(xiàng)參數(shù)窗口在MATLAB工作窗口中,可以將遺傳算法得運(yùn)行參數(shù)設(shè)置為變量。對(duì)于數(shù)值參數(shù)得設(shè)置,可以直接在相應(yīng)編輯框中輸入該參數(shù)得值,或者在包含該參數(shù)值得MATLAB工作窗口中輸入相應(yīng)變量得名字,就可以完成設(shè)置。例如,可以利用下面兩種方法之一設(shè)置“Initialpoint(初始點(diǎn))”為[2、11、7]:在“Initialpoint”文本框輸入[2、11、7]。在MATLAB工作區(qū)輸入變量x0=[2、11、7],然后在“Initialpoint”文本框輸入變量得名字x0。因?yàn)檫x項(xiàng)參數(shù)就是比較大得矩陣或向量,所以在MATLAB工作窗口中把參數(shù)得值定義為變量一般就是比較方便得,也就就是說(shuō),如果需要,很容易改變矩陣或向量得項(xiàng)。8.3.1、9輸入輸出參數(shù)及問(wèn)題參數(shù)與問(wèn)題結(jié)構(gòu)可以從遺傳算法工具被輸出到MATLAB得工作窗口,也可以在以后得某個(gè)時(shí)間再反過(guò)來(lái)把它們從MATLAB得工作窗口輸入給遺傳算法工具。這樣就可以保存對(duì)問(wèn)題得當(dāng)前設(shè)置,并可以在以后恢復(fù)這些設(shè)置。參數(shù)結(jié)構(gòu)也可以被輸出到MATLAB工作窗口,并且可以再把它們用于命令行方式得遺傳算法函數(shù)ga。輸入與輸出信息通常包含下列各項(xiàng):問(wèn)題定義,包括“Fitnessfunction”與“Numberofvariables(變量個(gè)數(shù))”。當(dāng)前指定得選項(xiàng)參數(shù)。算法運(yùn)行得結(jié)果。下面解釋如何輸入與輸出這些信息。(1)輸出參數(shù)與問(wèn)題參數(shù)與問(wèn)題可以被輸出到MATLAB工作空間,以便以后在遺傳算法工具中應(yīng)用它們。也可以以命令行方式,在函數(shù)ga中應(yīng)用這些參數(shù)與問(wèn)題。為了輸出參數(shù)與問(wèn)題,單擊“ExporttoWorkspace(輸出到工作空間)”按鈕或從File菜單中選擇“ExporttoWorkspace”菜單項(xiàng),這將打開如圖8、29所示得對(duì)話框。圖8、29輸出對(duì)話框?qū)υ捒蛱峁┫铝袇?shù):①為了保存問(wèn)題得定義與當(dāng)前參數(shù)得設(shè)置,選擇“ExportproblemandoptionstoaMATLABstructurenamed(輸出問(wèn)題與參數(shù)到已命名得MATLAB結(jié)構(gòu))”,并為這個(gè)結(jié)構(gòu)體輸入一個(gè)名字。單擊OK按鈕,即把這個(gè)信息保存到MATLAB工作空間得一個(gè)結(jié)構(gòu)體。如果以后要把這個(gè)結(jié)構(gòu)體輸入到遺傳算法工具,那么當(dāng)輸出這個(gè)結(jié)構(gòu)時(shí),所設(shè)置得“Fitnessfunction”與“Numberofvariables”,以及所有得參數(shù)設(shè)置都被恢復(fù)到原來(lái)值。注意:輸出問(wèn)題之前,如果在“Runsolver(運(yùn)行求解器)”窗格選中“Userandomstatesfrompreviousrun(使用前一次運(yùn)行得隨機(jī)狀態(tài))”選項(xiàng),則遺傳算法工具將保存上一次運(yùn)行開始時(shí)隨機(jī)數(shù)產(chǎn)生函數(shù)rand與randn得狀態(tài)。然后,在選擇了“Userandomstatesfrompreviousrun”選項(xiàng)得情況下,輸入問(wèn)題且運(yùn)行遺傳算法,那么輸出問(wèn)題之前得運(yùn)行結(jié)果就被準(zhǔn)確地復(fù)現(xiàn)了。②如果想要遺傳算法在輸出問(wèn)題之前從上一次運(yùn)行得最后種群恢復(fù)運(yùn)行,可選擇“Includeinformationneededtoresumethisrun(包括所需信息以恢復(fù)本次運(yùn)行)”。然后,當(dāng)輸入問(wèn)題結(jié)構(gòu)體并單擊Start按鈕,算法就從前次運(yùn)行得最后種群繼續(xù)運(yùn)行。為了恢復(fù)遺傳算法產(chǎn)生隨機(jī)初始種群得缺省行為,可刪除在“Initialpopulation”字段所設(shè)置得種群,并用代之以空得中括號(hào)‘[]’。注意:當(dāng)選擇了“Includeinformationneededtoresumethisrun”選項(xiàng),則選擇“Userandomstatesfrompreviousrun”選項(xiàng)對(duì)于輸入問(wèn)題與運(yùn)行遺傳算法時(shí)創(chuàng)建得初始種群將不再有任何作用。后者得選項(xiàng)只就是指定從新得一次運(yùn)行開始時(shí)再一次復(fù)現(xiàn)結(jié)果,而不就是為了恢復(fù)算法得繼續(xù)運(yùn)行。③如果只就是為了保存參數(shù)設(shè)置,可選擇“ExportoptionstoaMATLABstructurenamed(輸出參數(shù)到已命名得MATLAB結(jié)構(gòu))”,并為這個(gè)參數(shù)結(jié)構(gòu)體輸入一個(gè)名字。④為了保存遺傳算法最近一次運(yùn)行得結(jié)果,可選擇“ExportresultstoaMATLABstructurenamed”,并為這個(gè)結(jié)果結(jié)構(gòu)體輸入一個(gè)名字。(2)舉例——用輸出問(wèn)題運(yùn)行函數(shù)ga輸出一個(gè)問(wèn)題可參見“8.2.3舉例:Rastrigin函數(shù)”一節(jié),在命令行運(yùn)行遺傳算法函數(shù)ga,其步驟如下:①單擊“ExporttoWorkspace”按鈕,打開相應(yīng)對(duì)話框。②在“ExportToWorkspace”對(duì)話框中得“ExportproblemandoptionstoaMATLABstructurenamed”右面得文本框,輸入問(wèn)題結(jié)構(gòu)體得名稱,假設(shè)為my_gaproblem。③在MATLAB窗口,以my_gaproblem為參數(shù)調(diào)用函數(shù)ga:[xfval]=ga(my_gaproblem)則返回結(jié)果:x=0、0027-0、0052fval=0、0068調(diào)用函數(shù)ga可參見“8.3.2從命令行使用遺傳算法”一節(jié)。(3)輸入?yún)?shù)為了從MATLAB工作窗中輸入一個(gè)參數(shù)結(jié)構(gòu)體,可從“File”菜單選擇“ImportOptions(輸入?yún)?shù))”菜單項(xiàng)。在MATLAB工作窗中打開一個(gè)對(duì)話框,列出遺傳算法參數(shù)結(jié)構(gòu)體得一系列選項(xiàng)。當(dāng)選擇參數(shù)結(jié)構(gòu)體并單擊“Import(輸入)”按鈕,在遺傳算法工具中得參數(shù)域就被更新,且顯示所輸入?yún)?shù)得值。創(chuàng)建參數(shù)結(jié)構(gòu)體有兩種方法:調(diào)用函數(shù)gaoptimset,以參數(shù)結(jié)構(gòu)options作為輸出。在遺傳算法工具中,從“ExporttoWorkspace(輸出到工作空間)”對(duì)話框保存當(dāng)前參數(shù)。(4)輸入問(wèn)題為了從遺傳算法工具輸入一個(gè)以前輸出得問(wèn)題,可從“File”菜單選擇“ImportProblem(輸入問(wèn)題)”菜單項(xiàng)。在MATLAB工作窗中,打開一個(gè)對(duì)話框,顯示遺傳算法問(wèn)題結(jié)構(gòu)體得一個(gè)列表。當(dāng)選擇了問(wèn)題結(jié)構(gòu)體并單擊OK按鈕,遺傳算法工具中得下列文本框被更新:適應(yīng)度函數(shù)。變量個(gè)數(shù)。參數(shù)域。8.3.1、10舉例——從最后種群中繼續(xù)遺傳算法下面得例子顯示如何輸出一個(gè)問(wèn)題,以便當(dāng)輸入問(wèn)題并按下Start按鈕時(shí),遺傳算法能從該輸出問(wèn)題所保存得最后種群繼續(xù)運(yùn)行?,F(xiàn)在運(yùn)行一個(gè)例子,在遺傳算法工具中輸入下面得信息:設(shè)置適應(yīng)度函數(shù)為ackleyfcn,它就是計(jì)算函數(shù)Ackley,就是工具箱提供得一個(gè)測(cè)試函數(shù)。設(shè)置“Numberofvariables”為10。在“Plots”窗格選擇“Bestfitness”。單擊按鈕“Start”。顯示得結(jié)果如圖8、30所示。圖8、30函數(shù)ackleyfcn得最佳適應(yīng)度假定想要實(shí)驗(yàn)利用其它得參數(shù)運(yùn)行遺傳算法,接著利用當(dāng)前參數(shù)設(shè)置,此后再?gòu)淖詈蠓N群重新運(yùn)行算法。為此,進(jìn)行以下步驟:①單擊“ExporttoWorkspace”按鈕。②在出現(xiàn)得對(duì)話框中:選擇“ExportproblemandoptionstoaMATLABstructurenamed”。在文本框中輸入問(wèn)題與參數(shù)得名稱,例如ackley_uniform。選擇“Includeinformationneededtoresumethisrun(包括所需信息以恢復(fù)本次運(yùn)行)”。做了這些選擇后得對(duì)話框如圖8、31所示。圖8、31在輸出窗口對(duì)話框中做適當(dāng)選擇③單擊OK按鈕。問(wèn)題與參數(shù)被輸出到MATLAB工作空間得一個(gè)結(jié)構(gòu)體中。在MATLAB命令窗口輸入下面得信息就可以觀察這個(gè)結(jié)構(gòu)體:ackley_uniformackley_uniform=fitnessfcn:ackleyfcngenomelength:10options:[1x1struct]利用不同得參數(shù)設(shè)置,甚至就是不同得適應(yīng)度函數(shù),在運(yùn)行遺傳算法之后,都能夠按照如下步驟來(lái)恢復(fù)問(wèn)題:①?gòu)摹癋ile”菜單,選擇“ImportProblem”菜單項(xiàng)。打開得對(duì)話框如圖8、32所示。圖8、32GA問(wèn)題輸入窗口②選擇ackley_uniform。③單擊按鈕“Import”。這樣就把“Population”選項(xiàng)中得“Initialpopulation”字段設(shè)置成輸出問(wèn)題之前運(yùn)行得最后種群。在運(yùn)行期間,所有其它參數(shù)恢復(fù)它們得設(shè)置。當(dāng)單擊Start按鈕時(shí),遺傳算法從被保存得最后種群重新運(yùn)行。圖8、33所示為初始運(yùn)行與重新運(yùn)行得最佳適應(yīng)度圖形。第一次運(yùn)行從這里繼續(xù)運(yùn)行第一次運(yùn)行從這里繼續(xù)運(yùn)行圖8、33初始運(yùn)行與重新運(yùn)行得最佳適應(yīng)度注意:如果在利用所導(dǎo)入問(wèn)題運(yùn)行遺傳算法之后,想要恢復(fù)遺傳算法生成一個(gè)隨機(jī)初始種群得缺省行為,可刪除“Initialpopulation”字段中設(shè)置得種群,而代之以空得中括號(hào)‘[]’。8.3.1、11生成M文件在遺傳算法工具中,要利用特定得適應(yīng)度函數(shù)與參數(shù)生成運(yùn)行遺傳算法得M文件,可從“File”菜單選擇“GenerateM-File(生成M文件)”菜單項(xiàng),并把生成得M文件保存到MATLAB路徑得一個(gè)目錄。在命令行調(diào)用這個(gè)M文件時(shí),返回得結(jié)果與利用在遺傳算法工具中生成M文件時(shí)得適應(yīng)度函數(shù)與參數(shù)所得到得結(jié)果一致。8.3.2從命令行使用遺傳算法使用遺傳算法,也可以從命令行運(yùn)行遺傳算法函數(shù)ga。這方面得內(nèi)容主要包括:利用缺省參數(shù)運(yùn)行g(shù)a;在命令行設(shè)置ga得參數(shù);使用遺傳算法工具得參數(shù)與問(wèn)題結(jié)構(gòu);復(fù)現(xiàn)運(yùn)行結(jié)果;以前一次運(yùn)行得最后種群重新調(diào)用函數(shù)ga;從M文件運(yùn)行g(shù)a。8.3.2、1利用缺省參數(shù)運(yùn)行g(shù)a利用缺省參數(shù)運(yùn)行遺傳算法,以下面語(yǔ)句調(diào)用ga[xfval]=ga(fitnessfun,nvars)其中:fitnessfun—計(jì)算適應(yīng)度函數(shù)值得M文件得函數(shù)句柄。nvars—適應(yīng)度函數(shù)中獨(dú)立變量得個(gè)數(shù)。x—返回得最終點(diǎn)。fval—返回得適應(yīng)度函數(shù)在x點(diǎn)得值。例如,運(yùn)行例子Rastrigin函數(shù),從命令行輸入[xfval]=ga(rastriginsfcn,2)這將返回x=0、0027-0、0052fval=0、0068為了得到遺傳算法更多得輸出結(jié)果,可以用下面語(yǔ)句調(diào)用ga[xfvalreasonoutputpopulationscores]=ga(fitnessfcn,nvars)除了輸出變量x與fval之外,增加了以下輸出變量“reason(原因)”—算法停止得原因。“output(輸出)”—包含關(guān)于算法在每一代性能得結(jié)構(gòu)體?!皃opulation(種群)”—最后種群?!皊cores(得分)”—最終得分值。8.3.2、2在命令行設(shè)置ga得參數(shù)遺傳算法工具中得參數(shù)可以指定為任何有效得參數(shù)值,設(shè)置參數(shù)使用下面語(yǔ)句:[xfval]=ga(fitnessfun,nvars,options)使用函數(shù)gaoptimset生成一個(gè)參數(shù)結(jié)構(gòu)體。options=gaoptimset返回帶有缺省值得參數(shù)結(jié)構(gòu)體:options=PopulationType:'doubleVector'PopInitRange:[2x1double]PopulationSize:20EliteCount:2CrossoverFraction:0、8000MigrationDirection:'forward'MigrationInterval:20MigrationFraction:0、2000Generations:100TimeLimit:InffitnessLimit:-InfStallLimitG:50StallLimitS:20InitialPopulation:[]InitialScores:[]PlotInterval:1CreationFcn:gacreationuniformfitnessScalingFcn:fitscalingrankSelectionFcn:selectionstochunifCrossoverFcn:crossoverscatteredMutationFcn:mutationgaussianHybridFcn:[]Display:'final'PlotFcns:[]OutputFcns:[]Vectorized:'off'如果沒有給某一參數(shù)項(xiàng)輸入新得值,則函數(shù)ga使用其缺省值。每一個(gè)參數(shù)得值都存放在參數(shù)結(jié)構(gòu)體中,例如options、PopulationSize。可以通過(guò)輸入?yún)?shù)得名稱顯示參數(shù)得值。例如,顯示遺傳算法種群得大小,可輸入options、PopulationSizeans=20改變參數(shù)結(jié)構(gòu)體中成員值,例如,設(shè)置PopulationSize值等于100,代替它得缺省值20,可輸入options=gaoptimset('PopulationSize',100)參數(shù)結(jié)構(gòu)體中,PopulationSize為100,其它值都為缺省值或當(dāng)前值。這時(shí),再輸入ga(fitnessfun,nvars,options)函數(shù)ga將以種群中個(gè)體為100運(yùn)行遺傳算法。如果想接著改變參數(shù)結(jié)構(gòu)體其它成員得值,例如設(shè)置PlotFcns為gaplotbestf,畫出每一代最佳適應(yīng)度函數(shù)值圖形,則可用下面語(yǔ)句調(diào)用函數(shù)gaoptimsetoptions=gaoptimset(options,'PlotFcns',plotbestf)這里保持了參數(shù)得所有當(dāng)前值,除PlotFcns之外,它改變?yōu)閜lotbestf。注意,如果省略輸入自變量參數(shù)options,那么函數(shù)gaoptimset重新置PopulationSize為它得缺省值20。也可以利用一個(gè)語(yǔ)句來(lái)同時(shí)設(shè)置兩個(gè)參數(shù)PopulationSize與PlotFcns:options=gaoptimset('PopulationSize',100,'PlotFcns',plotbestf)8.3.2、3使用遺傳算法工具得參數(shù)與問(wèn)題結(jié)構(gòu)利用函數(shù)gaoptimset創(chuàng)建一個(gè)參數(shù)結(jié)構(gòu)體,在遺傳算法工具中設(shè)置參數(shù)得值,然后在MATLAB工作窗中輸出參數(shù)給結(jié)構(gòu)體。如果想在遺傳算法工具中輸出缺省值,則導(dǎo)出得結(jié)構(gòu)體得參數(shù)與由命令行得到得缺省結(jié)構(gòu)體得參數(shù)一致。options=gaoptimset如果想從遺傳算法工具輸出一個(gè)問(wèn)題結(jié)構(gòu)體ga_problem,可用下面得語(yǔ)句調(diào)用函數(shù)ga[xfval]=ga(ga_problem)問(wèn)題結(jié)構(gòu)體包含:fitnessfcn—適應(yīng)度函數(shù)。nvars—問(wèn)題得變量數(shù)。options—參數(shù)結(jié)構(gòu)體。8.3.2、4復(fù)現(xiàn)運(yùn)行結(jié)果因?yàn)檫z傳算法就是隨機(jī)性方法,也就就是說(shuō),產(chǎn)生隨機(jī)機(jī)率,即每次運(yùn)行遺傳算法得到得結(jié)果都會(huì)略有不同。算法利用MATLAB隨機(jī)數(shù)產(chǎn)生器函數(shù)rand與randn,在每一次迭代中,產(chǎn)生隨機(jī)機(jī)率。每一次函數(shù)ga調(diào)用rand與randn,它們得狀態(tài)都可能發(fā)生改變,以便下一次再被調(diào)用時(shí),它們返回不同得隨機(jī)數(shù)。這就就是為什么每次運(yùn)行后ga輸出得結(jié)果會(huì)略有不同。如果需要準(zhǔn)確復(fù)現(xiàn)運(yùn)行結(jié)果,可以在調(diào)用函數(shù)ga時(shí)包含rand與randn得當(dāng)前狀態(tài)。在又一次運(yùn)行g(shù)a之前,重新設(shè)置這些值得狀態(tài)。例如,要復(fù)現(xiàn)Rastrigin函數(shù)得ga得輸出,可以利用下面得語(yǔ)句調(diào)用ga[xfvalreasonoutput]=ga(rastriginsfcn,2);假設(shè)某次運(yùn)行得返回結(jié)果為x=0、0027-0、0052fval=0、0068則隨機(jī)函數(shù)rand與randn兩者得狀態(tài)被保存在output結(jié)構(gòu)中。output=randstate:[35x1double]randnstate:[2x1double]generations:100funccount:2000message:[1x64char]然后,重新設(shè)置狀態(tài),輸入rand('state',output、randstate);randn('state',output、randnstate);如果現(xiàn)在再次運(yùn)行g(shù)a,就會(huì)得到相同得結(jié)果。注意:如果沒有必要復(fù)現(xiàn)運(yùn)行結(jié)果,最好不要設(shè)置rand與randn得狀態(tài),以便能夠得到遺傳算法隨機(jī)搜索得益處。8.3.2、5以前一次運(yùn)行得最后種群重新調(diào)用函數(shù)ga缺省情況下,每次運(yùn)行g(shù)a時(shí)都生成一個(gè)初始種群。然而,可以將前一次運(yùn)行得到得最后種群作為下一次運(yùn)行得初始種群,這樣做能夠得到更好得結(jié)果。這可以利用下面語(yǔ)句實(shí)現(xiàn):[x,fval,reason,output,final_pop]=ga(fitnessfcn,nvars);最后一個(gè)輸出變量final_pop返回得就就是本次運(yùn)行得到得最后種群。將final_pop再作為初始種群運(yùn)行g(shù)a,語(yǔ)句為:options=gaoptimset('InitialPop',final_pop);[x,fval,reason,output,final_pop2]=ga(fitnessfcn,nvars);還可以將第二次運(yùn)行g(shù)a得到得最后種群final_pop2作為第三次運(yùn)行g(shù)a得初始種群。8.3.2、6從M文件運(yùn)行g(shù)a利用命令行可以運(yùn)行遺傳算法。使用M文件可以有不同得參數(shù)設(shè)置。例如,可以設(shè)置不同得交叉概率來(lái)運(yùn)行遺傳算法,觀察、比較每次運(yùn)行得結(jié)果。下面得代碼就是運(yùn)行g(shù)a函數(shù)21次,變量options、CrossoverFraction從0到1,間隔為0、05,所記錄得運(yùn)行結(jié)果。options=gaoptimset('Generations',300);rand('state',71);%Thesetwomandsareonlyincludedtorandn('state',59);%maketheresultsreproducible、record=[];forn=0:、05:1options=gaoptimset(options,'CrossoverFraction',n);[xfval]=ga(rastriginsfcn,10,options);record=[record;fval];end可以利用下列語(yǔ)句,以不同概率畫出fval值得曲線圖形:plot(0:、05:1,record);xlabel('CrossoverFraction');ylabel('fval')顯示結(jié)果參見圖8、34所示。圖8、34從M文件運(yùn)行遺傳算法時(shí)fval值得曲線圖形從圖形顯示可以瞧出,options、CrossoverFraction得值為0、6~0、95時(shí),可得到最好結(jié)果。取每次運(yùn)行得到得fval得平均值,就可以畫出fval得光滑曲線,如圖8、35所示。圖8、35從M文件運(yùn)行遺傳算法時(shí)fval平均值得曲線圖形曲線最凹得部分對(duì)應(yīng)options、CrossoverFraction得值為0、7~0、9。8.3.3遺傳算法舉例為了得到遺傳算法得最好結(jié)果,一般需要以不同得參數(shù)實(shí)驗(yàn)。通過(guò)不斷實(shí)驗(yàn),選擇針對(duì)問(wèn)題得最佳參數(shù)。有效參數(shù)得完整描述可參見“8.4.1遺傳算法參數(shù)”一節(jié)。本節(jié)介紹幾種能夠提高運(yùn)算效果得參數(shù)改變方法,內(nèi)容包括:種群多樣性;適應(yīng)度測(cè)量;選擇;復(fù)制參數(shù);變異與交叉;設(shè)置變異大小;設(shè)置交叉概率;相對(duì)于全局得局部最小值;使用混合函數(shù);設(shè)置最大代數(shù);向量化適應(yīng)度函數(shù)。8.3.3、1種群得多樣性決定遺傳算法得一個(gè)重要性能就是種群得多樣性。個(gè)體之間得距離越大,則多樣性越高;反之,個(gè)體之間得距離越小,則多樣性越低。由試驗(yàn)得到種群得適當(dāng)多樣性。如果多樣性過(guò)高或者過(guò)低,遺傳算法都可能運(yùn)行不好。這里介紹如何設(shè)置種群得初始范圍來(lái)控制種群得多樣性,并介紹如何設(shè)置種群尺度。舉例——設(shè)置初始范圍遺傳算法工具在默認(rèn)情況下利用生成函數(shù)隨機(jī)生成一個(gè)初始種群。使用者可以在“Population”得“Initialrange”文本框中指定初始種群得向量范圍。注意:初始范圍僅僅限制在初始種群中得點(diǎn)得范圍。后續(xù)各代包含得點(diǎn)可以不在初始種群得范圍之內(nèi)。如果知道問(wèn)題解得大概范圍,計(jì)算時(shí)就可以指定包含問(wèn)題解得初始范圍。但就是,假設(shè)種群具有足夠得多樣性,遺傳算法就可以找到不在初始范圍得解。下面得例子顯示初始范圍對(duì)遺傳算法性能得影響。這個(gè)例子利用Rastrigin函數(shù),函數(shù)在原點(diǎn)取得最小值為0。運(yùn)行之前在遺傳算法工具中設(shè)置下列參數(shù):設(shè)置適應(yīng)度函數(shù)為Rastriginsfcn。設(shè)置“Numberofvariables”為2。在“Plots”窗格選擇“Bestfitness(最佳適應(yīng)度)”。在“Plots”窗格選擇“Range”。設(shè)置“Initialrange”為[1;1、1]。然后,單擊Start按鈕。遺傳算法返回最佳適應(yīng)度值為2,其顯示圖形如圖8、36所示。圖8、36初始范圍為[1;1、1]時(shí)最佳適應(yīng)度值與平均距離圖8、38上面為每代最佳適應(yīng)度值變化圖,下面為每代個(gè)體之間平均距離圖,它可以很好地用來(lái)衡量種群得多樣性。對(duì)于初始范圍得設(shè)置,由于多樣性太小,算法進(jìn)展很小。第二次,嘗試設(shè)置“Initialrange”為[1;100],運(yùn)行算法,得到最佳適應(yīng)度值大約為3、9,如圖圖8、37所示。圖8、37初始范圍為[1;100]時(shí)最佳適應(yīng)度值與平均距離這次,算法進(jìn)展較快。但就是,由于個(gè)體之間得平均距離太大,最佳個(gè)體遠(yuǎn)離最優(yōu)解。第三次,設(shè)置“Initialrange”為[1;2],運(yùn)行算法。得到最佳適應(yīng)度值大約為0、012,如圖8、38所示。圖8、38初始范圍為[1;2]時(shí)最佳適應(yīng)度值與平均距離這次由于多樣性比較適合這個(gè)問(wèn)題,所以算法得到得結(jié)果比前兩次都好。(2)設(shè)置種群尺度在“種群(Population)”參數(shù)域中“Size”決定每代種群得大小。增加種群得大小,遺傳算法能夠搜索更多得點(diǎn),因此,能夠得到較好結(jié)果。但就是,種群越大,遺傳算法每代運(yùn)行時(shí)間越長(zhǎng)。注意:至少應(yīng)該設(shè)置“尺度(Size)”得值為“Numberofvariables”,以便在每一種群中使個(gè)體超出搜索范圍。進(jìn)行實(shí)驗(yàn)時(shí),可以設(shè)置不同得種群尺度,不限制運(yùn)行時(shí)間,以期得到最好結(jié)果。8.3.3、2適應(yīng)度測(cè)量適應(yīng)度測(cè)量把適應(yīng)度函數(shù)返回得原始適應(yīng)度得分值轉(zhuǎn)換為適合選擇函數(shù)得范圍內(nèi)得值。選擇函數(shù)根據(jù)適應(yīng)度值得大小,選擇下一代得父體。選擇函數(shù)分配大選擇概率給適應(yīng)度值大得個(gè)體。適應(yīng)度測(cè)量值得范圍影響遺傳算法得性能。如果測(cè)量值變化范圍太大,則具有高測(cè)量值得個(gè)體復(fù)制得速度很快,取代種群基因池得速度很快,防礙了遺傳算法搜索解空間得其它區(qū)域。相反,如果測(cè)量值變化太小,所有個(gè)體復(fù)制機(jī)會(huì)基本相同,則搜索過(guò)程進(jìn)展緩慢。缺省得適應(yīng)度尺度變換函數(shù)為Rank(排序),根據(jù)每個(gè)個(gè)體得順序而不就是它得得分值來(lái)變換原始得分值。個(gè)體得順序就是它在分類后得位置。最適應(yīng)得個(gè)體得序號(hào)為1,次之為2,依次類推。排序尺度變換函數(shù)分配尺度值有下列目得:個(gè)體得尺度值與n成正比。整個(gè)種群得尺度值得與等于要求生成下一代父體得數(shù)目。排序適應(yīng)度尺度變換函數(shù)避免了初始值得界限得影響。圖8、39所示為具有20個(gè)個(gè)體得一個(gè)典型種群得初始得分值,按升序排序。圖8、39具有20個(gè)個(gè)體得一個(gè)典型種群得初始得分值圖8、40所示為使用尺度變換函數(shù)得初始尺度值。圖8、40使用尺度變換函數(shù)得初始尺度值因?yàn)樗惴ò催m應(yīng)度函數(shù)得最小化處理,所以低得初始值具有高得尺度值。又因?yàn)榕判虺叨茸儞Q只根據(jù)個(gè)體得順序分配值得大小,對(duì)于一個(gè)大小為20、父輩數(shù)等于32得群體,顯示得尺度值可以就是相同得??梢园雅判虺叨茸儞Q(Rankscaling)與頂級(jí)尺度變換(Topscaling)進(jìn)行比較。為了觀察尺度變換得效果,可以把遺傳算法利用排序尺度變換得到得結(jié)果與利用其它函數(shù)(如頂級(jí)變換)得到得結(jié)果相比較。默認(rèn)情況下,頂級(jí)尺度變換分配4個(gè)最佳適應(yīng)度個(gè)體相同得尺度值,等于父輩數(shù)除以4,而分配其它個(gè)體得尺度值為0。利用默認(rèn)得選擇函數(shù),只有4個(gè)最佳適應(yīng)度個(gè)體能被選為父輩。圖8、41為比較排序尺度變換與頂級(jí)尺度變換得到得尺度值,種群尺度為20,父輩數(shù)為32。圖8、41比較排序尺度變換與頂級(jí)尺度變換得到得尺度值因?yàn)門opscaling限制父輩為最佳適應(yīng)度個(gè)體,它產(chǎn)生得種群類型比Rankscaling產(chǎn)生得種群類型少。圖8、42所示為每一代Rankscaling與Topscaling得到得個(gè)體之間得距離變化得比較。圖8、42排序與頂級(jí)尺度變換各代個(gè)體之間距離變化之比較8.3.3、3選擇選擇函數(shù)根據(jù)個(gè)體由適應(yīng)度尺度變換函數(shù)得到得尺度值,為下一代選擇父輩。當(dāng)一個(gè)個(gè)體為多個(gè)子輩貢獻(xiàn)它得基因時(shí),它就可能多次被選做父輩。默認(rèn)得選擇函數(shù)為Stochasticuniform(隨機(jī)均勻函數(shù))——在每一父輩畫出一條與選擇線對(duì)應(yīng)得直線,長(zhǎng)度與它得尺度值成比例。算法以等步長(zhǎng)在線上移動(dòng)。在每一步,算法從落入線上得部分分配父輩。一個(gè)比較確定得選擇函數(shù)就是Remainder,由下列兩步運(yùn)行:首先,函數(shù)按照尺度值得整數(shù)部分為每個(gè)個(gè)體選擇父輩。例如,假設(shè)一個(gè)個(gè)體得尺度值就是2、3,函數(shù)選擇這個(gè)個(gè)體兩次作為父輩。其次,在隨機(jī)均勻選擇時(shí),選擇函數(shù)利用尺度值得小數(shù)部分選擇剩余得父輩。函數(shù)落入選擇線內(nèi),即長(zhǎng)度與個(gè)體尺度值得小數(shù)部分成比例,在線上按等步長(zhǎng)移動(dòng)來(lái)選擇父輩。注意,如果尺度值得小數(shù)部分都等于0,就象頂級(jí)尺度變換一樣,選擇就是完全確定得。8.3.3、4復(fù)制參數(shù)復(fù)制參數(shù)控制遺傳算法怎樣生成下一代。這些參數(shù)有:elitecount(優(yōu)良計(jì)數(shù))—在當(dāng)前種群中,具有最佳適應(yīng)度值得個(gè)體遺傳到下一代得個(gè)體數(shù)。這些個(gè)體稱為優(yōu)良子輩(elitechildren)。elitecount得默認(rèn)值為2。當(dāng)優(yōu)良計(jì)數(shù)至少為1時(shí),最佳適應(yīng)度值可能從一代到下一代減少。這就是人們希望得,因?yàn)檫z傳算法使適應(yīng)度函數(shù)最小化。設(shè)置elitecount為一個(gè)大數(shù),可以使得最適應(yīng)個(gè)體控制種群,但可能減小搜索得有效性。Crossoverfraction(交叉概率)—下一代個(gè)體得一小部分,它不就是elitechildren(優(yōu)良子輩),而就是由交叉產(chǎn)生得部分。參見“8.3.3、7設(shè)置交叉概率”一節(jié)。8.3.3、5變異與交叉遺傳算法運(yùn)用當(dāng)前代得個(gè)體生成子代個(gè)體,構(gòu)成下一代。除了elitechildren外,算法還生成下列子代個(gè)體:從當(dāng)前代中選擇兩個(gè)個(gè)體,交換兩個(gè)個(gè)體得某個(gè)或某些位(基因),結(jié)合后形成交叉子個(gè)體。隨機(jī)改變當(dāng)前代得單個(gè)個(gè)體形成變異子個(gè)體。這兩個(gè)過(guò)程就是遺傳算法得主要過(guò)程。交叉能夠使遺傳算法從不同得個(gè)體中提取更好得基因,結(jié)合到具有優(yōu)勢(shì)得子個(gè)體中。變異增加了種群得多樣性,因而增大了算法生成更高適應(yīng)度值得個(gè)體得可能性。沒有變異,算法只能產(chǎn)生由初始種群結(jié)合基因得子集構(gòu)成得個(gè)體。算法生成得子個(gè)體類型如下:Elitecount,在“Reproduction”文本框,指定elitechildren得數(shù)目。Crossoverfraction,在Reproduction文本框,指定種群中交叉子個(gè)體得概率,它不同于elitechildren。例如,假設(shè)Populationsize(種群尺度)為20,Elitecou

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論