一、NSGA-II簡介
NSGA-Ⅱ算法是Kalyanmoy Deb等人于 2002年在 NSGA 的基礎上提出的,它比 NSGA算法更加優越:它采用了快速非支配排序算法,計算復雜度比 NSGA 大大的降低;采用了擁擠度和擁擠度比較算子,代替了需要指定的共享半徑 shareQ,并在快速排序后的同級比較中作為勝出標準,使準 Pareto 域中的個體能擴展到整個 Pareto 域,并均勻分布,保持了種群的多樣性;引入了精英策略,擴大了采樣空間,防止最佳個體的丟失,提高了算法的運算速度和魯棒性。
NSGA-Ⅱ就是在第一代非支配排序遺傳算法的基礎上改進而來,其改進主要是針對如上所述的三個方面:
①提出了快速非支配排序算法,一方面降低了計算的復雜度,另一方面它將父代種群跟子代種群進行合并,使得下一代的種群從雙倍的空間中進行選取,從而保留了最為優秀的所有個體;
②引進精英策略,保證某些優良的種群個體在進化過程中不會被丟棄,從而提高了優化結果的精度;
③采用擁擠度和擁擠度比較算子,不但克服了NSGA中需要人為指定共享參數的缺陷,而且將其作為種群中個體間的比較標準,使得準Pareto域中的個體能均勻地擴展到整個Pareto域,保證了種群的多樣性。
二、微網系統運行優化模型
微電網優化模型介紹:
weixin的博客_CSDN博客46204734/article/details/132700070?csdnshare_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132700070%22%2C%22source%22%3A%22weixin_46204734%22%7D
三、NSGA2求解微電網多目標優化調度
(1)部分代碼
close all; clear ;? clc; global P_load; %電負荷 global WT;%風電 global PV;%光伏 %% addpath('./NSGA2/')%添加算法路徑 TestProblem=1; MultiObj = GetFunInfo(TestProblem); MultiObjFnc=MultiObj.name;%問題名 % Parameters params.Np = 100;? ? ? ? % Population size params.Nr = 200;? ? ? ? % Archive size params.maxgen = 200;? % Maximum number of iteration params.ngrid = 20;? ? ? % Number of grids in each dimension [Xbest,Fbest]? = NSGA2(params,MultiObj);%% 畫結果圖ParetoFont figure(1) plot(Fbest(:,1),Fbest(:,2),'ko'); legend('NSGA2'); xlabel('運行成本') ylabel('環境保護成本') saveas(gcf,'./Picture/ParetoFont.jpg') %將圖片保存到Picture文件夾下面%% 比較不同目標函數尋優對調度結果的影響 %idxn=1 第1種.將兩個目標函數值歸一化相加,取相加后最小的目標值的粒子,即尋找折衷解并畫圖 %idxn=2 第2種尋找總成本最低時的解并畫圖 %idxn=3 第3種尋找運行成本最低時的解并畫圖 %idxn=4 第4種尋找環境保護成本最低時的解并畫圖 for idxn=1:4pg=plotFigure(Xbest,Fbest,idxn); end
(2)部分結果
pareto前沿:
?第1種.將兩個目標函數值歸一化相加,取相加后最小的目標值的粒子,即尋找折衷解并畫圖
第2種尋找總成本最低時的解并畫圖
第3種尋找運行成本最低時的解并畫圖
第4種尋找環境保護成本最低時的解并畫圖