1 模型简介
2 部分代码
clc clear all close all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% pop = 100; %种群数量 gen = 100; %迭代次数 M = 2; %目标函数数量 V = 30;%变量个数; %维度(决策变量的个数) min_range = zeros(1, V); %下界 生成1*30的个体向量 全为0 max_range = ones(1,V); %上界 生成1*30的个体向量 全为1 pcl1=0.6; pcl2=0.75;pch=0.9;pm=0.1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% chromosome = initialize_variables(pop,M,V,min_range,max_range);%初始化种群 chromosome = non_domination_sort_mod(chromosome, M, V);%对初始化种群进行非支配快速排序和拥挤度计算 tic; for i = 1 : gen pool = round(pop/2);%round() 四舍五入取整 交配池大小 tour = 2;%竞标赛 参赛选手个数 parent_chromosome = tournament_selection(chromosome, pool, tour);%竞标赛选择适合繁殖的父代 %交叉和变异算法的分布指数 mu = 20;%交叉和变异算法的分布指数 mum = 20; offspring_chromosome = genetic_operator(parent_chromosome,M, V,mu, mum, min_range, max_range);%进行交叉变异产生子代 该代码中使用模拟二进制交叉和多项式变异 采用实数编码 [main_pop,~] = size(chromosome);%父代种群的大小 [offspring_pop,~] = size(offspring_chromosome);%子代种群的大小 clear temp intermediate_chromosome(1:main_pop,:) = chromosome; intermediate_chromosome(main_pop + 1 : main_pop + offspring_pop,1 : M+V) = offspring_chromosome;%合并父代种群和子代种群 intermediate_chromosome = non_domination_sort_mod(intermediate_chromosome, M, V);%对新的种群进行快速非支配排序 chromosome = replace_chromosome(intermediate_chromosome, M, V, pop);%选择合并种群中前N个优先的个体组成新种群 if ~mod(i,100) clc; fprintf('%d generations completed\n',i); end end toc; disp(['运行时间: ',num2str(toc)]); xlswrite('NSGA2gaijin',chromosome); if M == 2 plot(chromosome(:,V + 1),chromosome(:,V + 2),'o'); xlabel('f_1'); ylabel('f_2'); title('Pareto Optimal Front'); elseif M == 3 plot3(chromosome(:,V + 1),chromosome(:,V + 2),chromosome(:,V + 3),'*'); xlabel('f_1'); ylabel('f_2'); zlabel('f_3'); title('Pareto Optimal Surface'); end
3 仿真结果
4 参考文献
[1]张利. NSGA2算法及其在电力系统稳定器参数优化中的应用[D]. 西南交通大学, 2013.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,有科研问题可私信交流。