日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

谢菲尔德大学的MATLAB遗传算法工具箱(附代码文件)

發(fā)布時(shí)間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谢菲尔德大学的MATLAB遗传算法工具箱(附代码文件) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從今天起我想記錄下我的學(xué)習(xí)歷程,將成果總結(jié)起來(lái),方便日后復(fù)習(xí)

關(guān)于MATLAB遺傳算法的工具箱文件放在文章末尾需要的自取

首先,我先來(lái)簡(jiǎn)單說(shuō)明下如何將工具箱添加到matlab中去

  • 將工具箱文件夾復(fù)制到本地計(jì)算機(jī)中的工具箱目錄下,路徑為matlabroot\toolbox。其中matlabroot為matlab的安裝目錄
  • 將工具箱所在的文件夾添加到MATLAB的搜索路徑中,可以通過(guò)調(diào)用addpath命令來(lái)添加,如:? %取得工具箱完整路徑 str = [matlabroot, '\toolbox\gatbx']; %添加到matlab的搜索路徑中 addpath(str)
  • ?可以使用函數(shù)ver查看gatbx工具箱的名字、發(fā)行版本等 >> v = ver('gatbx')v = 包含以下字段的 struct:Name: 'Genetic Algorithm Toolbox'Version: '1.2'Release: ''Date: '15-Apr-94'
  • 接下來(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。