没有合适的资源?快使用搜索试试~ 我知道了~
首页pso代码MATLAB实现
pso代码MATLAB实现
需积分: 37 591 浏览量
更新于2023-03-16
评论
收藏 183KB DOCX 举报
粒子群算法优化代码及最优化测试。MATLAB实现,参考软件学报论文及网络资源
资源详情
资源评论
资源推荐

functi
on F=fitness(x)
F=0;
for i=1:length(x)
F=F+x(i)^2; f=0;
End


PSO 原代码
% 求最小值基本粒子群
clear all;
%------初始化种群的个体------------
N=15; % 粒子数目
D=30; % 问题维数
num_sum =150; % 迭代次数
c1=2; % 参数
c2=2; % 参数
for i=1:N
for j=1:D
x(i,j)=(rand-0.5)*200; % 随机初始化位置 (在搜索范围内放置小鸟)
v(i,j)=(rand-0.5)*200; % 随机初始化速度
end
end
%------先计算各个粒子的适应度,并初始化 Pi 和 Pg----------------------
for i=1:N
pbestfitness(i)=fitness(x(i,:));
pbest(i,:)=x(i,:); % pbest(i,:)为局部(每个粒子)最优位
置
end

gbest = x(N,:); % gbest 为全局最优粒子位置
for i=1:(N-1) % 找到初始状态真正的全局最优
if fitness(x(i,:))<fitness(gbest)
gbest=x(i,:);
end
end
%------进入主要循环,按照公式依次迭代------------
% gene_max = 0.7; % 最大权重
% gene_min = 0.1; % 最小权重
w=0.8;
vmax = 0.7; % 最大移动速度 0.05
step_max = 0.5; % 最大加权因子 (用于整体速度加权)
step_min = 0.5; % 最小加权因子
for t=1:num_sum % 迭代步数
% outputdata; %实时输出结果
% w = gene_max - (gene_max - gene_min) * i / num_sum; % 惯性权重,
权重递减
% %step = step_max - (step_max - step_min) * i / num_sum;
for i=1:N
v(i,:)=w*v(i,:)+c1*rand*(pbest(i,:)-x(i,:))+c2*rand*(gbest-
x(i,:));% 速度更新公式
x(i,:)=x(i,:)+v(i,:); % 位置更新公式
if fitness(x(i,:))<pbestfitness(i) % pbest 比较更新
pbestfitness(i)=fitness(x(i,:));
pbest(i,:)=x(i,:);
end
if pbestfitness(i)<fitness(gbest) % gbest 比较更新
gbest=pbest(i,:);
end
end
Gbest(t)=fitness(gbest);
end
xm = gbest'
fv = fitness(gbest)
figure(2)
hold on
g=log10(Gbest);
plot(g,'r');
xlabel('迭代步数');
ylabel('适度值');

加取 20 次平均值
clear all;
%------初始化种群的个体------------
P=20; %取 20 次平均值
N=15; % 粒子数目
D=30; % 求最小值基本粒子群
% 问题维数
num_sum =150; % 迭代次数
c1=2; % 参数
c2=2; % 参数
for t=1:num_sum
Gbest(t)=0;
end
for r=1:P
for i=1:N
for j=1:D
x(i,j)=(rand-0.5)*200; % 随机初始化位置 (在搜索范围内放置小鸟)
v(i,j)=(rand-0.5)*200; % 随机初始化速度
end
end
%------先计算各个粒子的适应度,并初始化 Pi 和 Pg----------------------
for i=1:N
pbestfitness(i)=fitness(x(i,:));
pbest(i,:)=x(i,:); % pbest(i,:)为局部(每个粒子)最优位
置
end
gbest = x(N,:); % gbest 为全局最优粒子位置
for i=1:(N-1) % 找到初始状态真正的全局最优
if fitness(x(i,:))<fitness(gbest)
gbest=x(i,:);
end
end
%------进入主要循环,按照公式依次迭代------------
% gene_max = 0.7; % 最大权重
% gene_min = 0.1; % 最小权重
w=0.8;
vmax = 0.7; % 最大移动速度 0.05
step_max = 0.5; % 最大加权因子 (用于整体速度加权)
step_min = 0.5; % 最小加权因子
for t=1:num_sum % 迭代步数
剩余24页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0