谢菲尔德大学的MATLAB遗传算法工具箱(附代码文件)
從今天起我想記錄下我的學(xué)習(xí)歷程,將成果總結(jié)起來(lái),方便日后復(fù)習(xí)
關(guān)于MATLAB遺傳算法的工具箱文件放在文章末尾需要的自取
首先,我先來(lái)簡(jiǎn)單說(shuō)明下如何將工具箱添加到matlab中去
接下來(lái)就直接放個(gè)案例看看吧
簡(jiǎn)單一元函數(shù)的優(yōu)化?
遺傳算法優(yōu)化程序代碼:
%% 簡(jiǎn)單一元函數(shù)優(yōu)化 clc, clear close all%% 畫(huà)出函數(shù)圖 figure(1); hold on; lb = 1; ub = 2; %函數(shù)自變量范圍[1,2] ezplot('sin(10 * pi * X) / X', [lb, ub]'); xlabel('自變量/X') ylabel('函數(shù)值/Y')%% 定義遺傳算法參數(shù) nind = 40; %種群大小 maxgen = 20; %最大遺傳迭代次數(shù) preci = 20; %個(gè)體長(zhǎng)度 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); %種群初始化(任意離散隨機(jī)種群)%% 優(yōu)化 gen = 0; %代計(jì)數(shù)器 X = bs2rv(chrom, fieldd); %初始種群二進(jìn)制轉(zhuǎn)十進(jìn)制 objv = sin(10 * pi * X) ./ X; %計(jì)算目標(biāo)函數(shù)值 while gen < maxgenfitnv = 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;[chrom, objv] = reins(chrom, selch, 1, 1, objv, objvsel); %重插入子代到父代,得到新種群X = bs2rv(chrom, fieldd);gen = gen + 1;%獲取每代的最優(yōu)解及其序號(hào),Y為最優(yōu)解,i為個(gè)體的序號(hào)[Y, i] = min(objv);trace(1, gen) = X(i);trace(2, gen) = Y; end plot(trace(1, :), trace(2, :), 'bo'); %繪制每一代的最優(yōu)點(diǎn) grid on; plot(X, objv, 'b*');%% 畫(huà)進(jìn)化圖 figure(2); plot(1 : maxgen, trace(2, :)); grid on; xlabel('遺傳代數(shù)') ylabel('解的變化') title('進(jìn)化過(guò)程') best_y = trace(2, end); best_x = trace(1, end); fprintf(['最優(yōu)解:\nX=', num2str(best_x), '\nY=', num2str(best_y), '\n'])?運(yùn)行后會(huì)輸出兩張圖,左圖為目標(biāo)函數(shù)圖,圖二為進(jìn)化圖
? ? ? ? ? ? ? ? ? ?
??
?多元函數(shù)優(yōu)化
?遺傳算法優(yōu)化程序代碼:
%% 多元函數(shù)優(yōu)化 clc, clear close all%% 畫(huà)出函數(shù)圖 figure(1); lbx = -2; ubx = 2; lby = -2; uby = 2; ezmesh('x*cos(2*pi*y) + y*sin(2*pi*x)', [lbx, ubx, lby, uby], 50); hold on;%% 定義遺傳算法參數(shù) nind = 40; %種群大小 maxgen = 50; %最大遺傳迭代次數(shù) preci = 20; %個(gè)體長(zhǎng)度 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); %種群初始化(任意離散隨機(jī)種群)%% 優(yōu)化 gen = 0; %代計(jì)數(shù)器 XY = bs2rv(chrom, fieldd); %初始種群二進(jìn)制轉(zhuǎn)十進(jìn)制 X = XY(:, 1); Y = XY(:, 2); objv = X .* cos(2*pi*Y) + Y .* sin(2*pi*X); %計(jì)算目標(biāo)函數(shù)值 while gen < maxgenfitnv = 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 = X .* cos(2*pi*Y) + Y .* sin(2*pi*X);[chrom, objv] = reins(chrom, selch, 1, 1, objv, objvsel); %重插入子代到父代,得到新種群XY = bs2rv(chrom, fieldd);gen = gen + 1;%獲取每代的最優(yōu)解及其序號(hào),Y為最優(yōu)解,i為個(gè)體的序號(hào)[Y, i] = max(objv);trace(1:2, gen) = XY(i, :);trace(3, gen) = Y; end plot3(trace(1, :), trace(2, :), trace(3, :), 'bo'); %繪制每一代的最優(yōu)點(diǎn) grid on; plot3(XY(:, 1), XY(:, 2), objv, 'b*'); hold off%% 畫(huà)進(jìn)化圖 figure(2); plot(1 : maxgen, trace(3, :)); grid on; xlabel('遺傳代數(shù)') ylabel('解的變化') title('進(jìn)化過(guò)程') best_z = trace(3, end); best_y = trace(2, end); best_x = trace(1, end); fprintf(['最優(yōu)解:\nX=', num2str(best_x), '\nY=', num2str(best_y), '\nZ=', num2str(best_z), '\n'])?結(jié)果展示
?遺傳算法工具箱提供了一種求解非線性、多模型、多目標(biāo)、等復(fù)雜系統(tǒng)優(yōu)化問(wèn)題的通用框架,它不依賴問(wèn)題的具體領(lǐng)域,對(duì)問(wèn)題的種類(lèi)具有很強(qiáng)的魯棒性,所以它廣泛應(yīng)用于各個(gè)科學(xué)領(lǐng)域。
第一次寫(xiě),內(nèi)容有些簡(jiǎn)短,主要還是受到我的室友劉銳的啟發(fā)
鏈接:https://pan.baidu.com/s/1LLp1y2O1tMwSRcrKvF7EAA?
提取碼:ih1x?
--來(lái)自百度網(wǎng)盤(pán)超級(jí)會(huì)員V3的分享
總結(jié)
以上是生活随笔為你收集整理的谢菲尔德大学的MATLAB遗传算法工具箱(附代码文件)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [css] 用css实现倒影的效果
- 下一篇: [css] 使用rem时应该注意什么?