【NSGAII】基于NSGAII的多目标优化算法的MATLAB仿真
1.軟件版本
matlab2021a
2.本算法理論知識
? ? ? NSGA-II適合應用于復雜的、多目標優化問題。是K-Deb教授于2002在論文:A Fast and Elitist Multiobjective Genetic Algorithm:NSGA-II,中提出。在論文中提出的NSGA-II解決了NSGA的主要缺陷,實現快速、準確的搜索性能。NSGA的非支配排序的時間復雜度為O(MN3)O(MN3),在種群規模N較大時排序的速度會很慢。NSGA-II使用帶精英策略的快速非支配排序,時間復雜度為O(M(2N)2)O(M(2N)2),排序速度有大幅的提升。而且使用了精英策略,保證了找到的最優解不會被拋棄,提高了搜索性能。另一方面NSGA使用共享函數來使解分布均勻,該函數依賴于共享參數σshareσshare的選擇,而且共享函數的復雜度高達O(N2)O(N2)。NSGA-II從新定義了擁擠距離來代替共享參數。其算法流程如下:
?
3.核心代碼
clc; clear; close all; warning off;global Len; global WindDataPV; global SolarDataPVR; global LoadDataPV;%數據長度 Len = 876; [WindDataPV,SolarDataPVR,LoadDataPV] = ReadLocalClimaticData(Len); %初始化參數 popnum = 120; gen = 100; %變量取值范圍 xmin = 0; xmax = 1; %目標函數個數 m = 3; %決策變量數目 n = 30; %交叉變異參數 hc = 15; hm = 15; %產生初始種群 initpop = rand(popnum,n)*(xmax-xmin)+xmin; init_value_pop = value_objective(initpop,m,n);%畫圖顯示初始圖 figure plot(init_value_pop(:,n+1),init_value_pop(:,n+m),'B+') pause(.1)%非支配排序和聚集距離計算 [non_dominant_sort_pop,rankinfo] = non_dominant_sort(init_value_pop,m,n); ns_dc_pop = crowding_distance(non_dominant_sort_pop,m,n,rankinfo); %選擇,交叉,變異產生下一個子代 %選擇進行交叉變異的個數 poolsize = round(popnum/2); %選擇錦標賽的元度 toursize = 2; select_pop = selection(ns_dc_pop,poolsize,toursize,m,n); %存儲交叉變異相關參數 hc = 20; hm = 20; offspring = genetic_operate(select_pop,m,n,hc,hm,xmax,xmin);%循環開始 t=1; while t<=gent%合并種群(2N),進入循環combine_pop(1:popnum,1:m+n+2) = ns_dc_pop;[xsize,ysize] = size(offspring);combine_pop(popnum+1:popnum+xsize,1:m+n+2) = offspring;%重新進行非支配排序和聚焦距離計算[gen_non_dominant_pop,rankinfo] = non_dominant_sort(combine_pop,m,n);nsdc_pop = crowding_distance(gen_non_dominant_pop,m,n,rankinfo);%選擇下一代的產生(然后用于交叉變異)ns_dc_pop = generate_offsprings(nsdc_pop,m,n,popnum);%顯示下一代的情況N_decision_varif m==2 plot(ns_dc_pop(:,n+1),ns_dc_pop(:,n+2),'r*')elseif m==3 plot3(ns_dc_pop(:,n+1),ns_dc_pop(:,n+2),ns_dc_pop(:,n+3),'kd') xlabel('Function 1');ylabel('Function 2');zlabel('Function 3');view([44,34]); endgrid on;text(0,0,0,['第 ',int2str(t),' 代']);pause(0.1) %選擇,交叉,變異產生下一個子代poolsize = round(popnum/2);%選擇進行交叉變異的個數toursize = 2;%選擇錦標賽的元度select_pop = selection(ns_dc_pop,poolsize,toursize,m,n);hc = 20;%存儲交叉變異相關參數hm = 20;offspring = genetic_operate(select_pop,m,n,hc,hm,xmax,xmin);t = t+1; end %顯示標題 xlabel('經濟效益'); ylabel('缺失率%'); zlabel('排污水平'); view([44,34]);4.操作步驟與仿真結論
運行NSGA2.m,得到如下仿真結果:
?
三目標優化的優化目標為:
全壽命周期經濟現值,排放水平,負荷容量缺電率;
?用NSGAii算法,則可以方便的得到其對應的三維圖,獲得如下的結果:
?5.參考文獻
[1]劉旭紅, 劉玉樹, 張國英,等. 多目標優化算法NSGA-II的改進[J]. 計算機工程與應用, 2005, 41(15):3.
A06-33
6.完整源碼獲得方式
方式1:微信或者QQ聯系博主
方式2:訂閱MATLAB/FPGA教程,免費獲得教程案例以及任意2份完整源碼
總結
以上是生活随笔為你收集整理的【NSGAII】基于NSGAII的多目标优化算法的MATLAB仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【光斑定位】空间激光通信、光斑定位、CC
- 下一篇: 【遗传优化BP网络】基于自适应遗传算法的