回归预测 | MATLAB实现IPSO-BP、PSO-BP、BP多输入单输出预测对比(改进粒子群算法优化BP神经网络)

回归预测 | MATLAB实现IPSO-BP、PSO-BP、BP多输入单输出预测对比(改进粒子群算法优化BP神经网络)

目录

    • 回归预测 | MATLAB实现IPSO-BP、PSO-BP、BP多输入单输出预测对比(改进粒子群算法优化BP神经网络)
      • 效果一览
      • 基本介绍
      • 程序设计
      • 参考资料

效果一览

1
2
3
4

基本介绍

MATLAB实现IPSO-BP、PSO-BP、BP改进粒子群算法优化BP神经网络多输入单输出(不同数据优化效果不一样,改进后的效果也有差异)

程序设计

  • 完整程序私信博主。
%% 粒子群初始化
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:sizepopfitness(i,:) = fun(pop(i,:));                         % 粒子群的适应值
end%% 个体极值和群体极值
[bestf, bestindex]=min(fitness);
zbest=pop(bestindex,:);   % 全局最佳
gbest=pop;                % 个体最佳
fitnessgbest=fitness;              % 个体最佳适应值
fitnesszbest=bestf;               % 全局最佳适应值%% 迭代寻优
iter = 0;
while( (iter < maxiter ))w=Wmin*rand*(1-cos(pi*iter*0.5/maxiter))+Wmax*(cos(pi*iter*0.5/maxiter))^0.5;for j=1:sizepop% 速度更新V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));if V(j,:)>VmaxV(j,:)=Vmax;endif V(j,:)<VminV(j,:)=Vmin;end% 位置更新pop(j,:)=pop(j,:)+V(j,:);for k=1:Dimif pop(j,k)>ub(k)pop(j,k)=ub(k);endif pop(j,k)<lb(k)pop(j,k)=lb(k);endend% 适应值fitness(j,:) =fun(pop(j,:));% 个体最优更新if fitness(j) < fitnessgbest(j)gbest(j,:) = pop(j,:);fitnessgbest(j) = fitness(j);end% 群体最优更新if fitness(j) < fitnesszbestzbest = pop(j,:);fitnesszbest = fitness(j);endenditer = iter+1;                      % 迭代次数更新curve(iter) = fitnesszbest;
end
%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);%%  节点个数
inputnum  = size(p_train, 1);   % 输入层节点数
hiddennum = 5;                  % 隐藏层节点数
outputnum = size(t_train, 1);   % 输出层节点数%%  构建网络
net = newff(p_train, t_train, hiddennum);%%  设置训练参数
net.trainParam.epochs     = 1000;      % 训练次数
net.trainParam.goal       = 1e-6;      % 目标误差
net.trainParam.lr         = 1e-3;      % 学习率
net.trainParam.showWindow = 0;         % 关闭窗口%%  参数设置
fun = @getObjValue;                                 % 目标函数
dim = inputnum * hiddennum + hiddennum * outputnum + ...hiddennum + outputnum;                          % 优化参数个数
lb  = -1 * ones(1, dim);                            % 优化参数目标下限
ub  =  1 * ones(1, dim);                            % 优化参数目标上限
pop = 5;                                            % 种群数量
Max_iteration = 100;                                 % 最大迭代次数   %%  优化算法
[Best_pos, Best_score, curve] = IPSO(pop, Max_iteration, lb, ub, dim, fun,2,-2); %%  获取最优权重

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部