clc;
clear;
close all;
%导入数据
load maydata.mat
%% Problem Definition
CostFunction=@(x,x1) fun(x,x1); % 适应度函数
nVar=24; % Number of Decision Variables
VarSize=[1 nVar]; % Size of Decision Variables Matrix
ct = [0.4 0.4 0.4 0.4 0.4 0.4 0.4 2 2 2 2 1.2 1.2 1.2 2 2 2 2 2 1.2 1.2 1.2 1.2 1.2];
ita = (max(ct)-min(ct))/max(ct);
VarMin= -3000*ones(1,24);
VarMax = 3000*ones(1,24);
% VarMin=[56 8 23 800 6 4 14];%下限r1 h1 h2 N r2 r3 r4
% VarMax=[65 12 27 3200 12 8 18]; % 上限
%% MOPSO Parameters
MaxIt=300; %最大迭代次数
nPop=200; % 种群数目
nRep=50; % 帕累托解集数目
w=0.5; % 惯性权重
wdamp=0.99; % 权重变化率
c1=2; %个体学习因子
c2=2; % 群体学习因子
nGrid=7; % 每维网格数目
alpha=0.2; % 边界扩展系数
beta=2; % Leader Selection Pressure
gamma=2; % Deletion Selection Pressure
mu=0.1; % Mutation Rate
%% 初始化
empty_particle.Position=[];
empty_particle.Velocity=[];
empty_particle.Cost=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];
empty_particle.IsDominated=[];
empty_particle.GridIndex=[];
empty_particle.GridSubIndex=[];
pop=repmat(empty_particle,nPop,1);
p1 = [];
for ii=1:nPop
pop(ii).Position=unifrnd(VarMin,VarMax,VarSize);%粒子位置
pop(ii).Velocity=zeros(VarSize);%粒子速度
% pop(ii).Cost=CostFunction(pop(ii).Position);%适应度值
p1 = [p1;pop(ii).Position];
pop(ii).Best.Position=pop(ii).Position;
end
pcost1 = CostFunction(p1,x1);%适应度值
for ii = 1:nPop
pop(ii).Cost=pcost1(:,ii);%适应度值
pop(ii).Best.Cost=pop(ii).Cost;
end
% 支配解集
pop=DetermineDomination(pop);
rep=pop(~[pop.IsDominated]);
Grid=CreateGrid(rep,nGrid,alpha);
for ii=1:numel(rep)
rep(ii)=FindGridIndex(rep(ii),Grid);
end
%% 主循环
for it=1:MaxIt
p2 = [];
p3 = [];
p4 = [];
p5 = [];
p6 = [];
pcost2 = [];
for ii=1:nPop
leader=SelectLeader(rep,beta);%
pop(ii).Velocity = w*pop(ii).Velocity ...
+c1*rand(VarSize).*(pop(ii).Best.Position-pop(ii).Position) ...
+c2*rand(VarSize).*(leader.Position-pop(ii).Position);
pop(ii).Position = pop(ii).Position + pop(ii).Velocity;
pop(ii).Position = max(pop(ii).Position, VarMin);
pop(ii).Position = min(pop(ii).Position, VarMax);
% pop(ii).Cost = CostFunction(pop(ii).Position);
p2 = [p2;pop(ii).Position];
% Apply Mutation
pm=(1-(it-1)/(MaxIt-1))^(1/mu);
if rand<pm
NewSol.Position=Mutate(pop(ii).Position,pm,VarMin,VarMax);
p3 = [p3; NewSol.Position];
p4 = [p4;ii];
NewSol.Cost=CostFunction(NewSol.Position,x1);
if Dominates(NewSol,pop(ii))
pop(ii).Position=NewSol.Position;
pop(ii).Cost=NewSol.Cost;
elseif Dominates(pop(ii),NewSol)
% Do Nothing
else
if rand<0.5
pop(ii).Position=NewSol.Position;
pop(ii).Cost=NewSol.Cost;
end
end
end
end
p5 = [p2;p3];
pcost2 = CostFunction(p5,x1);%适应度值
for ii = 1:nPop
pop(ii).Cost=pcost2(:,ii);%适应度值
end
p6 = pcost2(:,nPop+1:end);
% isempty(p6)
pan = 1;
for ii = 1:nPop
if ~isempty(p6) && ii == p6(pan)
NewSol.Position=Mutate(pop(ii).Position,pm,VarMin,VarMax);
NewSol.Cost=p6(:,pan);
pan = pan + 1;
if Dominates(pop(ii),pop(ii).Best)
pop(ii).Best.Position=pop(ii).Position;
pop(ii).Best.Cost=pop(ii).Cost;
elseif Dominates(pop(ii).Best,pop(ii))
% Do Nothing
else
if rand<0.5
pop(ii).Best.Position=pop(ii).Position;
pop(ii).Best.Cost=pop(ii).Cost;
end
end
end
end
% 将非支配粒子添加到储存库中
rep=[rep;pop(~[pop.IsDominated])]; %#ok
% 确定新的非劣解解集
rep=DetermineDomination(rep);
% Keep only Non-Dminated Memebrs in the Repository
rep=rep(~[rep.IsDominated]);
% Update Grid
Grid=CreateGrid(rep,nGrid,alpha);
% Update Grid Indices
for ii=1:numel(rep)
rep(ii)=FindGridIndex(rep(ii),Grid);
end
% Check if Repository is Full
if numel(rep)>nRep
Extra=numel(rep)-nRep;
for e=1:Extra
rep=DeleteOneRepMemebr(rep,gamma);
end
end
% if it==MaxIt
figure(1);
PlotCosts(pop,rep);
pause(0.01);
% end
%
% Show Iteration Information
disp(['Iteration ' num2str(it) ': Number of Rep Members = ' num2str(numel(rep))]);
% Damping Inertia Weight
w=w*wdamp;
% if it == MaxIt
% % hold on
% plot3(T_test(1,:),T_test(2,:),T_test(3,:),'ko')
% end
end
神经网络机器学习智能算法画图绘图
- 粉丝: 2821
- 资源: 660
最新资源
- 校园失物招领网站:设计与实现的全流程解析
- 基于java的公司固定资产管理系统.doc
- 基于java+springboot+vue+mysql的学科竞赛管理系统 源码+数据库+论文(高分毕业设计).zip
- 人工智能领域计算断层成像技术研究最新进展综述
- 微藻检测10-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 快速排序算法在Rust语言的实现及其优化
- 2024年超融合网络架构研究与实践报告.pdf
- 埃森哲:2024年360°价值报告(英文版).pdf
- ISACA中国社区2024女性职业现状调查报告.pdf
- 如何看待“适度宽松”的货币政策.pdf
- 双目立体匹配三维重建点云C++ 本工程基于网上开源代码进行修改,内容如下: 1.修改为 VS2015 Debug win32 版本,支持利用特征点和 OpenCV 立体匹配算法进行进行三维重建及显示
- 华为云AI数字人生态赋能千行百业高效发展.pdf
- 金融业数据安全发展与实践报告.pdf
- 候鸟生命线—共筑候鸟迁徙保护网络.pdf
- 2024年全国统一电力市场建设情况及展望报告.pdf
- 2018-2023年粤港澳、京津冀、长三角三大区域高校本科专业调整趋势.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈