m基于NSGAII优化算法的微网系统的多目标优化规划matlab仿真
目录
1.算法描述
NSGA-II是基于的非支配排序的方法,在NSGA上进行改进,也是多目标进化优化领域一个里程碑式的一个算法。
NSGA-Ⅱ算法是 Srinivas 和 Deb 于 2000 年在 NSGA 的基础上提出的,它比 NSGA算法更加优越:它采用了快速非支配排序算法,计算复杂度比 NSGA 大大的降低;采用了拥挤度和拥挤度比较算子,代替了需要指定的共享半径 shareQ,并在快速排序后的同级比较中作为胜出标准,使准 Pareto 域中的个体能扩展到整个 Pareto 域,并均匀分布,保持了种群的多样性;引入了精英策略,扩大了采样空间,防止最佳个体的丢失,提高了算法的运算速度和鲁棒性。
NSGA-Ⅱ就是在第一代非支配排序遗传算法的基础上改进而来,其改进主要是针对如上所述的三个方面:
①提出了快速非支配排序算法,一方面降低了计算的复杂度,另一方面它将父代种群跟子代种群进行合并,使得下一代的种群从双倍的空间中进行选取,从而保留了最为优秀的所有个体;
②引进精英策略,保证某些优良的种群个体在进化过程中不会被丢弃,从而提高了优化结果的精度;
③采用拥挤度和拥挤度比较算子,不但克服了NSGA中需要人为指定共享参数的缺陷,而且将其作为种群中个体间的比较标准,使得准Pareto域中的个体能均匀地扩展到整个Pareto域,保证了种群的多样性。
在NSGA-中,将进化群体按支配时关系分为若干层,第一层为进化群体的非支配个体集合,第二层为在进化群体中去掉第一层个体后所求得的非支配个体集合,第三层为在进化群体中去掉第一层和第二层个体后所求得的非支配个体集合,依此类推。选择操作首先考虑第一层非支配集,按照某种策略从第一层中选取个体;然后再考虑在第二层非支配个体集合中选择个体,依此类推,直至满足新进化群体的大小要求。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
......................................................
%数据长度
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<=gen
t
%合并种群(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_var
if 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]);
end
grid 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
%显示标题
02_033m
4.完整MATLAB
V
相关文章
- matlab求两向量夹角_MATLAB基础练习(一)
- MATLAB绘制三维图形z=5_plot3用法
- 随机振动 matlab,Matlab内建psd函数在工程随机振动谱分析中的修正方法「建议收藏」
- 手眼标定Tsai方法的Matlab仿真分析
- matlab中如何求插值点,MATLAB插值「建议收藏」
- matlab中wavedec2,说说wavedec2函数【图】
- matlab 稀疏矩阵 乘法,Matlab 矩阵运算[通俗易懂]
- 香农编码的matlab实现实验总结_香农编码C语言
- matlab保存图片函数后突变分辨变化,MATLAB总结 – 图片保存「建议收藏」
- matlab保存所有图,Matlab中图片保存的5种方法
- zigzag扫描matlab,ZIGZAG扫描的MATLAB实现
- matlab中fprintf函数的用法举例_matlabfopen函数的用法
- matlab循环语句for_MATLAB以下选择语句错误的是
- Matlab赋值_matlab二维数组赋值
- MATLAB绘制三维地图「建议收藏」
- matlab 汽车振动,基于MatLab的车辆振动响应幅频特性分析
- Matlab循环语句_matlab中if语句的用法
- Matlab函数定义_matlab子函数
- MATLAB随机波动率SV、GARCH用MCMC马尔可夫链蒙特卡罗方法分析汇率时间序列|附代码数据
- Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型|附代码数据
- 【MATLAB】基本绘图 ( 线条设定 | 线条设定组合 )
- 【数字信号处理】线性常系数差分方程 ( 使用 matlab 求解 “ 线性常系数差分方程 “ 示例 | A 向量分析 | B 向量分析 | 输入序列分析 | matlab 代码 )