%% 粒子群算法
function [Best_pos,Best_score,curve,BestNet]=PSO(pop,Max_iter,lb,ub,dim,fobj,Vmax,Vmin)
%% 参数设置
w = 0.9; % 惯性因子
c1 = 2; % 加速常数
c2 = 2; % 加速常数
Dim = dim; % 维数
sizepop = pop; % 粒子群规模
maxiter = Max_iter; % 最大迭代次数
if(max(size(ub)) == 1)
ub = ub.*ones(1,dim);
lb = lb.*ones(1,dim);
end
fun = fobj; %适应度函数
net ={};%用于存储网络
%% 粒子群初始化
Range = ones(sizepop,1)*(ub-lb);
pop = rand(sizepop,Dim).*Range + ones(sizepop,1)*lb; % 初始化粒子群
V = rand(sizepop,Dim)*(Vmax-Vmin) + Vmin; % 初始化速度
fitness = zeros(sizepop,1);
for i=1:sizepop
[fitness(i,:),net{i}] = fun(pop(i,:)); % 粒子群的适应值
end
%% 个体极值和群体极值
[bestf, bestindex]=min(fitness);
zbest=pop(bestindex,:); % 全局最佳
gbest=pop; % 个体最佳
fitnessgbest=fitness; % 个体最佳适应值
fitnesszbest=bestf; % 全局最佳适应值
BestNet = net{bestindex};%最佳网络
%% 迭代寻优
iter = 0;
while( (iter < maxiter ))
disp(['第',num2str(iter),'次迭代']);
for j=1:sizepop
% 速度更新
V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
if V(j,:)>Vmax
V(j,:)=Vmax;
end
if V(j,:)<Vmin
V(j,:)=Vmin;
end
% 位置更新
pop(j,:)=pop(j,:)+V(j,:);
for k=1:Dim
if pop(j,k)>ub(k)
pop(j,k)=ub(k);
end
if pop(j,k)<lb(k)
pop(j,k)=lb(k);
end
end
% 适应值
[fitness(j,:),net{j}] =fun(pop(j,:));
% 个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
% 群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
BestNet = net{j};
end
end
iter = iter+1; % 迭代次数更新
curve(iter) = fitnesszbest;
end
%% 绘图
Best_pos = zbest;
Best_score = fitnesszbest;
end
没有合适的资源?快使用搜索试试~ 我知道了~
粒子群BP神经网络预测
共6个文件
m:4个
xlsx:2个
需积分: 0 5 下载量 118 浏览量
2023-05-24
14:40:32
上传
评论 1
收藏 51KB RAR 举报
温馨提示
有单一BP神经网络预测和粒子群改进BP
资源推荐
资源详情
资源评论
收起资源包目录
粒子群BP预测.rar (6个子文件)
粒子群BP预测
funBP.m 1KB
output.xlsx 18KB
input.xlsx 35KB
main.m 2KB
PSO.m 2KB
onlyBP.m 1KB
共 6 条
- 1
资源评论
草莓镶子羊师傅
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功