国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

這篇具有很好參考價(jià)值的文章主要介紹了(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

????????以下內(nèi)容大部分來(lái)源于《MATLAB智能算法30個(gè)案例分析》,僅為學(xué)習(xí)交流所用。

1理論基礎(chǔ)

1.1遺傳算法概述

????????遺傳算法(genetic algorithm,GA)是一種進(jìn)化算法,其基本原理是仿效生物界中的“物競(jìng)天擇、適者生存”的演化法則。遺傳算法是把問(wèn)題參數(shù)編碼為染色體,再利用迭代的方式進(jìn)行選擇、交叉以及變異等運(yùn)算來(lái)交換種群中染色體的信息,最終生成符合優(yōu)化目標(biāo)的染色體。
????????在遺傳算法中,染色體對(duì)應(yīng)的是數(shù)據(jù)或數(shù)組,通常是由一維的串結(jié)構(gòu)數(shù)據(jù)來(lái)表示,串上各個(gè)位置對(duì)應(yīng)基因的取值?;蚪M成的串就是染色體,或者稱(chēng)為基因型個(gè)體(individuals)。一定數(shù)量的個(gè)體組成了群體(population)。群體中個(gè)體的數(shù)目稱(chēng)為群體大小(population size),也稱(chēng)為群體規(guī)模。而各個(gè)個(gè)體對(duì)環(huán)境的適應(yīng)程度叫做適應(yīng)度(fitness)。
遺傳算法的基本步驟如下:
????????1.編碼
????????GA在進(jìn)行搜索之前先將解空間的解數(shù)據(jù)表示成遺傳空間的基因型串結(jié)構(gòu)數(shù)據(jù),這些串結(jié)構(gòu)數(shù)據(jù)的不同組合便構(gòu)成了不同的點(diǎn)。

????????2.初始群體的生成
????????隨機(jī)產(chǎn)生N個(gè)初始串結(jié)構(gòu)數(shù)據(jù),每個(gè)串結(jié)構(gòu)數(shù)據(jù)稱(chēng)為一個(gè)個(gè)體,N個(gè)個(gè)體構(gòu)成了一個(gè)群體。GA以這N個(gè)串結(jié)構(gòu)數(shù)據(jù)作為初始點(diǎn)開(kāi)始進(jìn)化。
????????3.適應(yīng)度評(píng)估
????????適應(yīng)度表明個(gè)體或解的優(yōu)劣性。不同的問(wèn)題,適應(yīng)性函數(shù)的定義方式也不同。4、選擇
選擇的目的是為了從當(dāng)前群體中選出優(yōu)良的個(gè)體,使它們有機(jī)會(huì)作為父代為下一代繁殖子孫。遺傳算法通過(guò)選擇過(guò)程體現(xiàn)這一思想,進(jìn)行選擇的原則是適應(yīng)性強(qiáng)的個(gè)體為下一代貢獻(xiàn)一個(gè)或多個(gè)后代的概率大。選擇體現(xiàn)了達(dá)爾文的適者生存原則。
????????5.交叉
????????交叉操作是遺傳算法中最主要的遺傳操作。通過(guò)交叉操作可以得到新一代個(gè)體,新個(gè)體組合了其父輩個(gè)體的特性。交叉體現(xiàn)了信息交換的思想。
????????6.變異
????????變異首先在群體中隨機(jī)選擇一個(gè)個(gè)體,對(duì)于選中的個(gè)體以一定的概率隨機(jī)地改變串結(jié)構(gòu)數(shù)據(jù)中某個(gè)串的值。同生物界一樣,GA中變異發(fā)生的概率很低,通常取值很小。

1.2謝菲爾德遺傳算法工具箱

????????1.工具箱簡(jiǎn)介
????????謝菲爾德(Sheffield)遺傳算法工具箱是英國(guó)謝菲爾德大學(xué)開(kāi)發(fā)的遺傳算法工具箱。該工具箱是用MATLAB高級(jí)語(yǔ)言編寫(xiě)的,對(duì)問(wèn)題使用M文件編寫(xiě),可以看見(jiàn)算法的源代碼,與此匹配的是先進(jìn)的MATLAB數(shù)據(jù)分析、可視化工具、特殊目的應(yīng)用領(lǐng)域工具箱和展現(xiàn)給使用者具有研究遺傳算法可能性的一致環(huán)境。該工具箱為遺傳算法研究者和初次實(shí)驗(yàn)遺傳算法的用戶提供了廣泛多樣的實(shí)用函數(shù)。
????????2.工具箱添加
????????用戶可以通過(guò)網(wǎng)絡(luò)下載gatbx工具箱(官方github下載地址:gatbx)。然后把工具箱添加到本機(jī)的MATLAB環(huán)境中,該工具箱的安裝步驟如下:
????????(1)將工具箱文件夾復(fù)制到本地計(jì)算機(jī)中的工具箱目錄下,路徑為matlabroot\ toolbox。其中matlabroot為 MATLAB的安裝根目錄。
????????(2)將工具箱所在的文件夾添加到MATLAB的搜索路徑中,有兩種方式可以實(shí)現(xiàn),即命令行方式和圖形用戶界面方式。
????????①命令行方式:用戶可以調(diào)用addpath命令來(lái)添加,例如:

str = [matlabroot, '\toolbox\gatbx'];
addpath(str)

? ? ? ? ②圖形用戶界面方式:在 MATLAB主窗口上選擇主頁(yè)→設(shè)置路徑菜單項(xiàng),單擊“添加文件夾”按鈕。找到工具箱所在的文件夾( gatbx),單擊“OK”按鈕,則工具箱所在的文件夾出現(xiàn)在“設(shè)置路徑”的最上端。單擊“保存”按鈕保存搜索路徑的設(shè)置,然后單擊“關(guān)閉”按鈕關(guān)閉對(duì)話框。

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????(3)批量修改后綴

????????該工具箱文件后綴為M,即*.M,matlab是區(qū)分大小寫(xiě)的,如果這一步?jīng)]有操作,將會(huì)報(bào)錯(cuò),在該文件路徑下,新建txt,輸入以下命令,并保存修改文件后綴為bat,點(diǎn)擊運(yùn)行:

ren *.M *.m

????????如果文件夾中.M后綴的文件并未修改為.m的后綴,可以通過(guò)一個(gè)中間后綴名進(jìn)行修改,先將其后綴名轉(zhuǎn)為.txt,再轉(zhuǎn)為.m,也就是先輸入下面的命令,并保存修改文件后綴為bat,點(diǎn)擊運(yùn)行:

ren *.M *.txt

? ? ? ? 所有.M后綴的文件都修改為了.txt后綴,然后再輸入下面的命令并保存修改文件后綴為bat,點(diǎn)擊運(yùn)行:

ren *.txt *.m

????????這樣就把所有文件的后綴名都改成了.m文件。如果還是不行的話。。。。。就一個(gè)一個(gè)手動(dòng)改吧。

2案例背景

2.1問(wèn)題描述

????????1.簡(jiǎn)單一元函數(shù)優(yōu)化
????????利用遺傳算法尋找以下函數(shù)的最小值:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?????????2.多元函數(shù)優(yōu)化
????????利用遺傳算法尋找以下函數(shù)的最大值:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

2.2解題思路及步驟

????????將自變量在給定范圍內(nèi)進(jìn)行編碼,得到種群編碼,按照所選擇的適應(yīng)度函數(shù)并通過(guò)遺傳算法中的選擇,交叉和變異對(duì)個(gè)體進(jìn)行篩選和進(jìn)化,使適應(yīng)度值大的個(gè)體被保留,小的個(gè)體被淘汰,新的群體繼承了上一代的信息,又優(yōu)于上一代,這樣反復(fù)循環(huán),直至滿足條件,最后留下來(lái)的個(gè)體集中分布在最優(yōu)解周?chē)?篩選出其中最優(yōu)的個(gè)體作為問(wèn)題的解。

3 MATLAB程序?qū)崿F(xiàn)

????????下面詳細(xì)介紹各部分常用的函數(shù),其他的函數(shù)用戶可以直接參考工具箱中的GATBXA2.PDF文檔,其中有詳細(xì)的用法介紹。

3.1 工具箱結(jié)構(gòu)

????????遺傳算法工具箱中的主要函數(shù)如表1所列。

表1 遺傳算法工具箱的主要函數(shù)列表

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱
?(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?3.2遺傳算法常用函數(shù)

????????1.創(chuàng)建種群函數(shù)——crtbp功能:創(chuàng)建任意離散隨機(jī)種群。調(diào)用格式:

% 調(diào)用格式1
[Chrom,Lind,Basev]= crtbp(Nind,Lind)
% 調(diào)用格式2
[Chrom,Lind,Basev]= crtbp(Nind,Base)
% 調(diào)用格式3
[Chrom,Lind,Base]= crtbp(Nind,Lind,Base)

????????格式①創(chuàng)建一個(gè)大小為Nind×Lind 的隨機(jī)二進(jìn)制矩陣,其中,Nind 為種群個(gè)體數(shù),Lind為個(gè)體長(zhǎng)度。返回種群編碼Chrom和染色體基因位的基本字符向量 BaseV。
????????格式②創(chuàng)建一個(gè)種群個(gè)體為Nind,個(gè)體的每位編碼的進(jìn)制數(shù)由Base 決定(Base 的列數(shù)即為個(gè)體長(zhǎng)度)。
????????格式③創(chuàng)建一個(gè)大小為Nind×Lind 的隨機(jī)矩陣,個(gè)體的各位的進(jìn)制數(shù)由Base決定﹐這時(shí)輸入?yún)?shù)Lind可省略(Base 的列數(shù)即為L(zhǎng)ind),即為格式②。
????????【用法舉例】使用函數(shù)crtbp創(chuàng)建任意離散隨機(jī)種群的應(yīng)用舉例。

????????(1)創(chuàng)建一個(gè)種群大小為5,個(gè)體長(zhǎng)度為10的二進(jìn)制隨機(jī)種群:

[Chrom,Lind,BaseV] = crtbp(5,10)

或者

[Chrom,Lind,BaseV] = crtbp(5,10,[2 2 2 2 2 2 2 2 2 2])

或者

[Chrom,Lind,BaseV] = crtbp(5,[2 2 2 2 2 2 2 2 2 2])

輸出結(jié)果為:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????2.適應(yīng)度計(jì)算函數(shù)一—ranking功能:基于排序的適應(yīng)度分配。調(diào)用格式:

% 調(diào)用格式1
Fitnv = ranking(Objv)
% 調(diào)用格式2
Eitnv = ranking(Objv,RFun)
% 調(diào)用格式3
Fitnv = ranking(Objv,RFun,SUBPOP)

????????格式①是按照個(gè)體的目標(biāo)值ObjV(列向量)由小到大的順序?qū)€(gè)體進(jìn)行排序的,并返回個(gè)體適應(yīng)度值FitnV的列向量。
????????格式②中RFun有三種情況: .
????????(1)若RFun是一個(gè)在[1,2]區(qū)間內(nèi)的標(biāo)量,則采用線性排序,這個(gè)標(biāo)量指定選擇的壓差。

????????(2)若RFun是一個(gè)具有兩個(gè)參數(shù)的向量,則RFun(2):指定排序方法,0為線性排序,1為非線性排序。RFun(1);對(duì)線性排序﹐標(biāo)量指定的選擇壓差RFun(1)必須在[1,2]區(qū)間;對(duì)非線性排序,RFun(1)必須在[1, length(ObjV)一2]區(qū)間;如果為NAN,則 RFun(1)假設(shè)為2。
????????(3)若RFun是長(zhǎng)度為length(ObjV)的向量,則它包含對(duì)每一行的適應(yīng)度值計(jì)算。格式③中的參數(shù)ObjV和RFun與格式①和格式②一致,參數(shù)SUBPOP是一個(gè)任選參數(shù),指明在-ObjV中子種群的數(shù)量。省略SUBPOP或SUBPOP為NAN,則 SUBPOP=1。在ObjV中的所有子種群大小必須相同。如果ranking被調(diào)用于多子種群,則ranking 獨(dú)立地對(duì)每個(gè)子種群執(zhí)行。
????????【用法舉例】考慮具有10個(gè)個(gè)體的種群,其當(dāng)前目標(biāo)值如下:

ObjV = [1;2;3;4;5;10;9;8;7;6]

????????(1)使用線性排序和壓差為⒉估算適應(yīng)度:

Fitnv= ranking(ObjV)
% 或者
Fitnv= ranking(ObjV,[2,0])
% 或者
Fitnv= ranking(ObjV,[2,0],1)

????????運(yùn)行結(jié)果如下:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????(2〉使用RFun中的值估算適應(yīng)度:

RFun = [3;5;7;10;14;18;25;30;40;50];
Fitnv = ranking(Objv, RFun)

運(yùn)行結(jié)果:
(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱
????????(3〉使用非線性排序,選擇壓差為2,在ObjV中有兩個(gè)子種群估算適應(yīng)度:
?

FitnV =ranking(ObjV,[2,1],2)

?運(yùn)行結(jié)果:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????3.選擇函數(shù)——select 功能:從種群中選個(gè)體(高級(jí)函數(shù))。 調(diào)用格式:

selCh = select(SEL_F,Chrom,Fitnv)
selCh = select(SEL_r,Chrom,Eitnv,GGAP)
selCh = select(SRL_F,Chrom,Fitnv,GGAP,SUBPOP)

????????SEL_F是一個(gè)字符串,包含一個(gè)低級(jí)選擇函數(shù)名,如 rws 或 sus;

????????FitnV是列向量,包舍種群 Chrom中個(gè)體的適應(yīng)度值。這個(gè)適應(yīng)度值表明了每個(gè)個(gè)體被 選擇的預(yù)期概率。

????????GGAP是可選參數(shù),指出了代溝部分種群被復(fù)制。如果GGAP省略或?yàn)镹AN,則GAP 假設(shè)為1.0。

????????SUBPOP是一個(gè)可選參數(shù),決定 Chrom 中子種群的數(shù)量。如果 SUBPOP 省略或?yàn)?NAN,則 sUBPOP=1。Chrom 中所有子種群必須有相同的大小。
????????【用法舉例】考慮以下具有8個(gè)個(gè)體的種群Chrom,適應(yīng)度值為FitnV:?

Chrom = [1 11 21;2 12 22;3 13 23;4 14 24;5 15 25;6 16 26;7 17 27;8 18 28]
FitnV = [1.50;1.35;1.21;1.07;0.92;0.78;0.64;0.5]

使用隨機(jī)遍歷抽樣 sus 選擇8個(gè)個(gè)體

selch = select('sus',Chrom,FitnV)

運(yùn)行結(jié)果為:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?????????4.交叉算子函數(shù)——recombin功能:重組個(gè)體(高級(jí)函數(shù))。調(diào)用格式:

NewChrom = recombin(REC_r,Chrom)
NewChrom = recombin(REC_F,Chrom,Recopt)
NewChrom = recombin(REC_F,Chrom,RecOpt,SUBPOP)

????????recombin完成種群Chrom中個(gè)體的重組,在新種群NewChrom中返回重組后的個(gè)體。Chrom和NewChrom中的一行對(duì)應(yīng)一個(gè)個(gè)體。
????????REC_F是一個(gè)包含低級(jí)重組函數(shù)名的字符串,例如recdis或xovsp.
????????RecOpt是一個(gè)指明交叉概率的任選參數(shù),如省略或?yàn)镹AN,將設(shè)為缺省值。
????????SUBPOP是一個(gè)決定Chrom中子群個(gè)數(shù)的可選參數(shù),如果省略或?yàn)镹AN,則 SUBPOP為1。Chrom中的所有子種群必須有相同的大小。
????????【用法舉例】使用函數(shù)recombin對(duì)5個(gè)個(gè)體的種群進(jìn)行重組。

Chrom = crtbp(5,10)
NewChrom = recombin('xovsp',Chrom)

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?????????5.變異算子函數(shù)——mut功能:離散變異算子。
????????調(diào)用格式:

NewChrom = mut(O1dChrom,Pm,Basev)

OldChrom為當(dāng)前種群,Pm為變異概率(省略時(shí)為0.7/Lind),BaseV指明染色體個(gè)體元素的變異的基本字符(省略時(shí)種群為二進(jìn)制編碼)。
????????【用法舉例】使用函數(shù)mut將當(dāng)前種群變異為新種群。

????????(1)種群為二進(jìn)制編碼:

oldChrom = crtbp(5,10)
NewChrom = mut(oldChrom)

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?????????(2)種群為非二進(jìn)制編碼,創(chuàng)建一個(gè)長(zhǎng)度為8、有6個(gè)個(gè)體的隨機(jī)種群;

BaseV = [8 8 8 4 4 4 4 4];
[Chrom, Lind,BaseV] = crtbp(6,BaseV);
Chrom
NewChrom = mut(Chrom,0.7,BaseV)

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?????????6.重插入函數(shù)———reins功能:重插入子代到種群。調(diào)用格式:

Chrom = reins(Chrom,SelCh)
Chrom = reins(Chrom,Se1Ch,SUBPOP)
Chrom = reins(Chrom,SelCh,SUBPOP, InsOpt,0bjvCh)
[Chrom,0bjVCh]= reins(Chrom,SelCh,SUBPOP,Ins0pt,0bjvCh,0bjvSel)

????????reins完成插人子代到當(dāng)前種群,用子代代替父代并返回結(jié)果種群。Chrom為父代種群,SelCh為子代,每一行對(duì)應(yīng)一個(gè)個(gè)體。
????????SUBPOP是一個(gè)可選參數(shù),指明Chrom和 SelCh中子種群的個(gè)數(shù)。如果省略或者為NAN,則假設(shè)為1。在Chrom和SelCh中每個(gè)子種群必須具有相同大小。
????????InsOpt是一個(gè)最多有兩個(gè)參數(shù)的任選向量。

????????InsOpt(1)是一個(gè)標(biāo)量,指明用子代代替父代的方法。0為均勻選擇,子代代替父代使用均勻隨機(jī)選擇。1為基于適應(yīng)度的選擇,子代代替父代中適應(yīng)度最小的個(gè)體。如果省略InsOpt(1)或InsOpt(1)為NAN,則假設(shè)為0。
????????InsOpt(2)是一個(gè)在[o,1]區(qū)間的標(biāo)量,表示每個(gè)子種群中重插入的子代個(gè)體在整個(gè)子種群中個(gè)體的比率。如果InsOpt(2)省略或?yàn)镹AN,則假設(shè)InsOpt(2)=1.0。
????????ObjVCh是一個(gè)可選列向量,包括Chrom中個(gè)體的目標(biāo)值。對(duì)基于適應(yīng)度的重插入,ObjVCh是必需的。
????????ObjVSel是一個(gè)可選參數(shù),包含SelCh中個(gè)體的目標(biāo)值。如果子代的數(shù)量大于重插入種群中的子代數(shù)量﹐則ObjVSel是必需的。這種情況子代將按它們的適應(yīng)度大小選擇插人。
????????【用法舉例】在5個(gè)個(gè)體的父代種群中插入子代種群。

Chrom = crtbp(5,10)            % 父代
selch = crtbp(2,10)            % 子代
Chrom = reins(Chrom,selch)     % 重插入

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????7.實(shí)用函數(shù)——bs2rv
????????功能:二進(jìn)制到十進(jìn)制的轉(zhuǎn)換。調(diào)用格式:

Phen = bs2rv(Chrom,FieldD)

????????bs2rv根據(jù)譯碼矩陣FieldD將二進(jìn)制串矩陣Chrom 轉(zhuǎn)換為實(shí)值向量,返回十進(jìn)制的矩陣。
????????矩陣FieldD有如下結(jié)構(gòu):

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????這個(gè)矩陣的組成如下:
????????len是包含在Chrom中的每個(gè)子串的長(zhǎng)度,注意sum(len)=size(Chrom,2)。lb和ub分別是每個(gè)變量的下界和上界。
????????code指明子串是怎樣編碼的,1為標(biāo)準(zhǔn)的二進(jìn)制編碼,0為格雷編碼。scale指明每個(gè)子串所使用的刻度,0表示算術(shù)刻度,1表示對(duì)數(shù)刻度。
????????lbin和 ubin指明表示范圍中是否包含邊界。0表示不包含邊界,1表示包含邊界。
????????【用法舉例】先使用crtbp創(chuàng)建二進(jìn)制種群Chrom,表示在[一1,10]區(qū)間的一組簡(jiǎn)單變量,然后使用bs2rv將二進(jìn)制串轉(zhuǎn)換為實(shí)值表現(xiàn)型。

Chrom = crtbp(4,8)                             % 創(chuàng)建二進(jìn)制串
FieldD = [size(Chrom,2);-1;10;1;0;1;1]         % 包含邊界
Phen = bs2rv(Chrom,FieldD)                     % 轉(zhuǎn)換二進(jìn)制到10進(jìn)制

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????8.實(shí)用函數(shù)—-rep功能:矩陣復(fù)制。
????????調(diào)用格式: Matout = rep(MatIn,REPN)
????????函數(shù)rep完成矩陣MatIn的復(fù)制,REPN指明復(fù)制次數(shù),返回復(fù)制后的矩陣 MatOut。REPN包含每個(gè)方向復(fù)制的次數(shù),REPN(1)表示縱向復(fù)制次數(shù),REPN(2)表示水平方向復(fù)制次數(shù)。
????????【用法舉例】使用函數(shù)rep 復(fù)制矩陣MatIn。

MatIn = [1 2 3 4;5 6 7 8]
MatOut = rep(MatIn,[1,2])

?(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

3.3遺傳算法工具箱應(yīng)用舉例

????????本節(jié)通過(guò)一些具體的例子來(lái)介紹遺傳算法工具箱函數(shù)的使用。

1.簡(jiǎn)單一元函數(shù)優(yōu)化
????????利用遺傳算法計(jì)算以下函數(shù)的最小值:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?????????選擇二進(jìn)制編碼,遺傳算法參數(shù)設(shè)置如表2所列。

表2 遺傳算法參數(shù)

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?????????遺傳算法優(yōu)化程序代碼:

clc
clear all
close all
%% 畫(huà)出函數(shù)圖
figure(1);
hold on;
lb=1;ub=2; %函數(shù)自變量范圍【1,2】
ezplot('sin(10*pi*X)/X',[lb,ub]);   %畫(huà)出函數(shù)曲線
xlabel('自變量/X')
ylabel('函數(shù)值/Y')
%% 定義遺傳算法參數(shù)
NIND=40;        %個(gè)體數(shù)目
MAXGEN=20;      %最大遺傳代數(shù)
PRECI=20;       %變量的二進(jìn)制位數(shù)
GGAP=0.95;      %代溝
px=0.7;         %交叉概率
pm=0.01;        %變異概率
trace=zeros(2,MAXGEN);                        %尋優(yōu)結(jié)果的初始值
FieldD=[PRECI;lb;ub;1;0;1;1];                      %區(qū)域描述器
Chrom=crtbp(NIND,PRECI);                      %初始種群
%% 優(yōu)化
gen=0;                                  %代計(jì)數(shù)器
X=bs2rv(Chrom,FieldD);                 %計(jì)算初始種群的十進(jìn)制轉(zhuǎn)換
ObjV=sin(10*pi*X)./X;        %計(jì)算目標(biāo)函數(shù)值
while gen<MAXGEN
   FitnV=ranking(ObjV);                               %分配適應(yīng)度值
   SelCh=select('sus',Chrom,FitnV,GGAP);              %選擇
   SelCh=recombin('xovsp',SelCh,px);                  %重組
   SelCh=mut(SelCh,pm);                               %變異
   X=bs2rv(SelCh,FieldD);               %子代個(gè)體的十進(jìn)制轉(zhuǎn)換
   ObjVSel=sin(10*pi*X)./X;             %計(jì)算子代的目標(biāo)函數(shù)值
   [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新種群
   X=bs2rv(Chrom,FieldD);
   gen=gen+1;                                             %代計(jì)數(shù)器增加
   %獲取每代的最優(yōu)解及其序號(hào),Y為最優(yōu)解,I為個(gè)體的序號(hào)
   [Y,I]=min(ObjV);
   trace(1,gen)=X(I);                            %記下每代的最優(yōu)值
   trace(2,gen)=Y;                               %記下每代的最優(yōu)值
end
plot(trace(1,:),trace(2,:),'bo');                            %畫(huà)出每代的最優(yōu)點(diǎn)
grid on;
plot(X,ObjV,'b*');   %畫(huà)出最后一代的種群
hold off
%% 畫(huà)進(jìn)化圖
figure(2);
plot(1:MAXGEN,trace(2,:));
grid on
xlabel('遺傳代數(shù)')
ylabel('解的變化')
title('進(jìn)化過(guò)程')
bestY=trace(2,end);
bestX=trace(1,end);
fprintf(['最優(yōu)解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])

運(yùn)行結(jié)果:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????2.多元函數(shù)優(yōu)化
????????利用遺傳算法計(jì)算以下函數(shù)的最大值:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????選擇二進(jìn)制編碼,遺傳算法參數(shù)設(shè)置如表3所列。

表3 遺傳算法參數(shù)

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

????????遺傳算法優(yōu)化程序代碼:

clc
clear all
close all
%% 畫(huà)出函數(shù)圖
figure(1);
lbx=-2;ubx=2; %函數(shù)自變量x范圍【-2,2】
lby=-2;uby=2; %函數(shù)自變量y范圍【-2,2】
ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50);   %畫(huà)出函數(shù)曲線
hold on;
%% 定義遺傳算法參數(shù)
NIND=40;        %個(gè)體數(shù)目
MAXGEN=50;      %最大遺傳代數(shù)
PRECI=20;       %變量的二進(jìn)制位數(shù)
GGAP=0.95;      %代溝
px=0.7;         %交叉概率
pm=0.01;        %變異概率
trace=zeros(3,MAXGEN);                        %尋優(yōu)結(jié)果的初始值
FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1];                      %區(qū)域描述器
Chrom=crtbp(NIND,PRECI*2);                      %初始種群
%% 優(yōu)化
gen=0;                                  %代計(jì)數(shù)器
XY=bs2rv(Chrom,FieldD);                 %計(jì)算初始種群的十進(jìn)制轉(zhuǎn)換
X=XY(:,1);Y=XY(:,2);
ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);        %計(jì)算目標(biāo)函數(shù)值
while gen<MAXGEN
   FitnV=ranking(-ObjV);                              %分配適應(yīng)度值
   SelCh=select('sus',Chrom,FitnV,GGAP);              %選擇
   SelCh=recombin('xovsp',SelCh,px);                  %重組
   SelCh=mut(SelCh,pm);                               %變異
   XY=bs2rv(SelCh,FieldD);               %子代個(gè)體的十進(jìn)制轉(zhuǎn)換
   X=XY(:,1);Y=XY(:,2);
   ObjVSel=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);             %計(jì)算子代的目標(biāo)函數(shù)值
   [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新種群
   XY=bs2rv(Chrom,FieldD);
   gen=gen+1;                                             %代計(jì)數(shù)器增加
   %獲取每代的最優(yōu)解及其序號(hào),Y為最優(yōu)解,I為個(gè)體的序號(hào)
   [Y,I]=max(ObjV);
   trace(1:2,gen)=XY(I,:);                       %記下每代的最優(yōu)值
   trace(3,gen)=Y;                               %記下每代的最優(yōu)值
end
plot3(trace(1,:),trace(2,:),trace(3,:),'bo');                            %畫(huà)出每代的最優(yōu)點(diǎn)
grid on;
plot3(XY(:,1),XY(:,2),ObjV,'bo');  %畫(huà)出最后一代的種群
hold off
%% 畫(huà)進(jìn)化圖
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遺傳代數(shù)')
ylabel('解的變化')
title('進(jìn)化過(guò)程')
bestZ=trace(3,end);
bestX=trace(1,end);
bestY=trace(2,end);
fprintf(['最優(yōu)解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ),'\n'])

運(yùn)行結(jié)果:

(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱

?4.總結(jié)

????????遺傳算法工具箱提供了一種求解非線性、多模型、多目標(biāo)等復(fù)雜系統(tǒng)優(yōu)化問(wèn)題的通用框架,它不依賴(lài)問(wèn)題的具體領(lǐng)域,對(duì)問(wèn)題的種類(lèi)具有很強(qiáng)的魯棒性,所以它廣泛應(yīng)用于各個(gè)科學(xué)領(lǐng)域。遺傳算法在函數(shù)優(yōu)化、組合優(yōu)化、生產(chǎn)調(diào)度、自動(dòng)控制﹑機(jī)器人學(xué)﹑圖像處理、人工生命、遺傳編碼和機(jī)器學(xué)習(xí)等方面得到了廣泛運(yùn)用。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-454408.html

到了這里,關(guān)于(轉(zhuǎn)載)MATLAB智能算法30個(gè)案例分析(1)——遺傳算法工具箱的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包