【優(yōu)化求解】改進(jìn)灰狼算法求解重油熱解模型matlab源碼
一、簡介
本文提供的一種基于多目標(biāo)的改進(jìn)灰狼優(yōu)化算法,包括:
S1、設(shè)置狼群的初始化參數(shù)及方向修正概率,在解空間中隨機(jī)初始化每個狼個體的位置;
S2、根據(jù)求解目標(biāo)計(jì)算每個狼個體的適應(yīng)度值,并選擇排名靠前的三只狼個體依次賦予Xα、Xβ、Xδ;
S3、根據(jù)Xα、Xβ、Xδ優(yōu)化狼群每個狼個體的位置,產(chǎn)生中庸狼,并計(jì)算中庸狼的適應(yīng)度值和更新狼群位置;
S4、對更新后的狼群執(zhí)行方向修正操作并根據(jù)方向修正概率控制更新后的狼群參與修正維的規(guī)模,產(chǎn)生新的中庸狼,并計(jì)算新的中庸狼的適應(yīng)度值,獲得修正后的狼群位置;
S5、判斷迭代次數(shù)是否達(dá)到預(yù)設(shè)最大迭代次數(shù),若是,則輸出修正后的狼群位置作為最終優(yōu)化結(jié)果,否則,轉(zhuǎn)至S3繼續(xù)進(jìn)行迭代搜索。
可選地,S1具體包括:
設(shè)置狼群的大小M、最大迭代次數(shù)max gen及方向修正概率pv,在解空間中隨機(jī)初始化每個狼個體的位置。
可選地,S2具體包括:
根據(jù)求解目標(biāo)計(jì)算每個狼個體的適應(yīng)度值,并依據(jù)快速非劣解排序操作、擁擠距離計(jì)算、精英保留策略選擇排名靠前的三只狼個體依次賦予Xα、Xβ、Xδ。
可選地,快速非劣解排序操作具體包括:
找到狼群中的非支配解集,將非支配解集標(biāo)記為第一非支配層F1并將非支配解集中的所有狼個體賦予第一非支配序值,并將所有狼個體剔除;
在剔除后的狼群中找出下一層非支配解集并進(jìn)行標(biāo)記、非支配序值賦予操作及剔除操作;
依次持續(xù)進(jìn)行對狼群進(jìn)行非支配解集分層、標(biāo)記、非支配序值賦予操作及剔除操作,直至整個狼群被完全分層并使得同一非支配層內(nèi)的狼個體具有相同的非支配序值。
可選地,擁擠距離計(jì)算具體包括:
初始化同一非支配層內(nèi)的狼個體的距離,令狼個體i的擁擠距離L[i]d為0;
同一非支配層內(nèi)的狼個體按第m個目標(biāo)值進(jìn)行遞增排序;
給定邊緣上的兩只狼個體賦予一個大數(shù)Inf,使兩只狼個體具有絕對選擇優(yōu)勢;
對排序中間的狼個體根據(jù)公式八求排序中間的狼個體的擁擠距離,公式八具體為:
其中,Nobj為目標(biāo)數(shù),分別為第i+1和第i-1只狼個體的第m個適應(yīng)度值,分別為非劣解集中第m個適應(yīng)度值的最大值和最小值。
可選地,S3具體包括:
根據(jù)Xα、Xβ、Xδ通過狼群包圍和狼群獵捕的步驟優(yōu)化狼群每個狼個體的位置,產(chǎn)生中庸狼,并計(jì)算中庸狼的適應(yīng)度值和依據(jù)快速非劣解排序操作、擁擠距離計(jì)算、精英保留策略選擇性更新狼群位置。
可選地,S3與S4之間還包括:
對更新后的狼群的所有狼個體的每一維通過公式九執(zhí)行歸一化操作,公式九具體為:
其中,D為維數(shù),為狼的第d維變量,為歸一化后所對應(yīng)的標(biāo)量,max(d)、min(d)分別為狼群中第d維變量的上下限。
可選地,S4具體包括:
對更新后的狼群執(zhí)行方向修正操作并根據(jù)方向修正概率控制更新后的狼群參與修正維的規(guī)模,產(chǎn)生新的中庸狼,并計(jì)算新的中庸狼的適應(yīng)度值,根據(jù)快速非劣解排序操作、擁擠距離計(jì)算、精英保留策略擇優(yōu)保留狼個體位置,并根據(jù)狼群中的狼個體排名,將狼群劃分為Xα、Xβ、Xδ、Xω,獲得修正后的狼群位置。
可選地,對更新后的狼群執(zhí)行方向修正操作具體包括:
通過公式十對更新后的狼群執(zhí)行方向修正操作,公式十具體為:
其中,d1,d2∈(1,D),r為0到1的隨機(jī)數(shù),為中庸狼個體標(biāo)量的第d1維;
對產(chǎn)生的中庸狼個體標(biāo)量的每一維通過公式十一進(jìn)行反歸一化操作,公式十一具體為:
其中,為中庸狼的第d維。
可選地,S5具體包括:
判斷迭代次數(shù)是否達(dá)到預(yù)設(shè)最大迭代次數(shù),若是,則輸出修正后的狼群位置作為最終優(yōu)化結(jié)果,并結(jié)合模糊決策方法選擇最優(yōu)折中解,否則,轉(zhuǎn)至S3繼續(xù)進(jìn)行迭代搜索。
從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
本例提供了一種基于多目標(biāo)的改進(jìn)灰狼優(yōu)化算法,包括:S1、設(shè)置狼群的初始化參數(shù)及方向修正概率,在解空間中隨機(jī)初始化每個狼個體的位置;S2、根據(jù)求解目標(biāo)計(jì)算每個狼個體的適應(yīng)度值,并選擇排名靠前的三只狼個體依次賦予Xα、Xβ、Xδ;S3、根據(jù)Xα、Xβ、Xδ優(yōu)化狼群每個狼個體的位置,產(chǎn)生中庸狼,并計(jì)算中庸狼的適應(yīng)度值和更新狼群位置;S4、對更新后的狼群執(zhí)行方向修正操作并根據(jù)方向修正概率控制更新后的狼群參與修正維的規(guī)模,產(chǎn)生新的中庸狼,并計(jì)算新的中庸狼的適應(yīng)度值,獲得修正后的狼群位置;S5、判斷迭代次數(shù)是否達(dá)到預(yù)設(shè)最大迭代次數(shù),若是,則輸出修正后的狼群位置作為最終優(yōu)化結(jié)果,否則,轉(zhuǎn)至S3繼續(xù)進(jìn)行迭代搜索。本發(fā)明實(shí)施例中通過利用縱橫交叉算法中縱向交叉操作處理部分維容易陷入局部最優(yōu)問題的獨(dú)有優(yōu)勢,在標(biāo)準(zhǔn)灰狼算法基礎(chǔ)上,融入方向修正操作(縱向交叉操作),提供一種新的狼群位置更新方法,以幫助部分陷入局部最優(yōu)的維擺脫當(dāng)前困局,修正狼群的前進(jìn)方向,增強(qiáng)算法的全局收斂性,解決了現(xiàn)有技術(shù)中的標(biāo)準(zhǔn)灰狼算法在處理多目標(biāo)優(yōu)化問題時存在著收斂速度慢、容易陷入局部最優(yōu)值等缺陷的技術(shù)問題。

%__________________________________________ clear all clc for t = 1:1 ? ?SearchAgents_no=30; % Number of search agents ? ?Max_iteration=100; % Maximum numbef of iterations ? ?% Load details of the selected benchmark function % ? ? [lb,ub,dim,fobj]=Get_Functions_details(Function_name); ? ?fobj = @heavyoilevaluate; ? ?ub = [10,10,10,1500,4000,4500,5,5]; ? ?lb = [0,0,0,800,1500,1500,0,0]; ? ?dim = size(ub,2); ? ?[Best_score,Best_pos,GWO_cg_curve]=GWO(SearchAgents_no,Max_iteration,ub,lb,dim,fobj); ? ? display(['The best solution obtained by GWO is : ', num2str(Best_pos)]); ? ?display(['Best value by GWO is : ', num2str(Best_score)]); end opt=heavyoilevaluate(Best_pos,20); %重油熱解模型 ?陶畢業(yè)論文第7章 function opt=heavyoilevaluate(input,select) B=0; Klp0=input(1);%范圍(0,10) Kwp0=input(2);%(0,10) Kwlp0=input(3);%(0,10) Elp=input(4);%(800,1500) Ewp=input(5);%(1500,4000) Ewlp=input(6);%(1500,4500) nl=input(7);%(0,5) nw=input(8);%(0,5) if select == 20 ? ?T=[673,683,693,703,698,713,723,733,663,708,703,689,725,715,695,663,683,703,713,723];%自變量 ? ?X=[0.3122,0.3348,0.405,0.4034,0.2674,0.4514,0.51,0.574,0.1739,0.4719,0.3478, 0.3562,0.5918,0.4075,0.3355,0.1893,0.222,0.3927,0.3306,0.342]; XL0=[0.2034,0.2305,0.3041,0.3209,0.1638,0.3282,0.3555,0.3685,0.1064,0.3222,0.2346,0.2609,0.4101,0.2724,0.2369,0.1104,0.1447,0.3049,0.2426,0.2559]; end if select == 56 ? ?T=[ ? 673 ? 723 ? 673 ? 723 ? 673 ? 673 ? 683 ? 683 ? 683 ? 703 ? 683 ? 683 ? 693 ? 683 ? 695 ? 698 ? 703 ? 723 ? 708 ? 713 ? 698 ? 713 ? 713 ? 733 ? 708 ? 733 ? 713 ? 713 ? 715 ? 733 ? 723 ? 733 ? 725 ? 663 ? 733 ? 663 ? 708 ? 673 ? 689 ? 673 ? 693 ? 673 ? 693 ? 683 ? 684 ? 683 ? 703 ? 693 ? 703 ? 703 ? 708 ? 713 ? 713 ? 723 ? 719 ? 723]; ? ?X = [ ? ?0.3122 ? ?0.4371 ? ?0.3138 ? ?0.3637 ? ?0.3879 ? ?0.2075 ? ?0.3348 ? ?0.3110 ? ?0.3384 ? ?0.3927 ? ?0.4684 ? ?0.2220 ? ?0.4050 ? ?0.2599 ? ?0.3355 ? ?0.2846 ? ?0.4034 ? ?0.3420 ? ?0.4266 ? ?0.3306 ? ?0.2674 ? ?0.2062 ? ?0.4514 ? ?0.4585 ? ?0.4534 ? ?0.4720 ? ?0.4552 ? ?0.4447 ? ?0.4075 ? ?0.3729 ? ?0.5100 ? ?0.4234 ? ?0.5918 ? ?0.1739 ? ?0.5740 ? ?0.1893 ? ?0.3637 ? ?0.2169 ? ?0.3562 ? ?0.1619 ? ?0.3397 ? ?0.0649 ? ?0.2381 ? ?0.2512 ? ?0.3031 ? ?0.1410 ? ?0.5436 ? ?0.2532 ? ?0.3478 ? ?0.3973 ? ?0.4719 ? ?0.4162 ? ?0.4232 ? ?0.4203 ? ?0.5367 ? ?0.3011]; XL0 = [ ? ?0.2034 ? ?0.2802 ? ?0.2136 ? ?0.2674 ? ?0.2806 ? ?0.1282 ? ?0.2305 ? ?0.2276 ? ?0.2497 ? ?0.3049 ? ?0.3693 ? ?0.1447 ? ?0.3041 ? ?0.1822 ? ?0.2369 ? ?0.2045 ? ?0.3209 ? ?0.2559 ? ?0.3107 ? ?0.2426 ? ?0.1638 ? ?0.1397 ? ?0.3326 ? ?0.2977 ? ?0.3260 ? ?0.3099 ? ?0.3282 ? ?0.3441 ? ?0.2724 ? ?0.2688 ? ?0.3555 ? ?0.3083 ? ?0.4101 ? ?0.1064 ? ?0.3685 ? ?0.1104 ? ?0.2449 ? ?0.1541 ? ?0.2609 ? ?0.1103 ? ?0.2482 ? ?0.0439 ? ?0.1483 ? ?0.1867 ? ?0.1976 ? ?0.0983 ? ?0.3831 ? ?0.1833 ? ?0.2346 ? ?0.3018 ? ?0.3222 ? ?0.3266 ? ?0.2945 ? ?0.3390 ? ?0.3354 ? ?0.2510]'; end N = max(size(XL0)); for k=1:1:N ? ? temp1=Klp0*exp(-Elp/T(k))/nl*(1-(1-X(k))^nl); ? temp2=Kwp0*Kwlp0*exp(-(Ewp+Ewlp)/T(k))/(nw-Kwlp0*exp(-Ewlp/T(k))); ? temp3=(1-(1-X(k))^(Kwlp0*exp(-Ewlp/T(k))))/(Kwlp0*exp(-Ewlp/T(k))); ? temp4=((1-X(k))^nw-1)/nw; ? XXL(k)=temp1+temp2*(temp3+temp4);%模型輸出 ? B=B+abs(XL0(k)-XXL(k));%目標(biāo)函數(shù)值 ? ? ? ? end if size(input,1) <= 1 ? ?subplot(2,1,1) ? ?t = 1:1:N; plot(t,XL0,'-k','linewidth',1.5); hold on plot(t,XXL,'--b','linewidth',1.5); hold off xlabel('sample point','fontsize',9); ylabel('output','fontsize',9); legend('actual output','estimate output'); set(legend,'fontname','Times New Roman') set(legend,'fontsize',9) subplot(2,1,2) plot(t,XL0 -XXL,'-.g','linewidth',1.5) hold off xlabel('sample point','fontsize',9); ylabel('output','fontsize',9); legend('output error'); set(legend,'fontname','Times New Roman') set(legend,'fontsize',9) data = [XL0',XXL'] end opt=B;

博主擅長優(yōu)化求解、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機(jī)、圖像處理等多種領(lǐng)域的Matlab仿真,QQ1575304183