% 清空环境
clc
clear
close all
warning off
%读取数据
[num0 ,ax0,ay0]= xlsread('ssa-bp数据1.xlsx');
[mx,my] = size(ay0);
for ii = 2:mx
for jj = 1:my
if ischar(ay0{ii,jj})
num0(ii-1,jj) = str2double(ay0{ii,jj});
end
end
end
num0(:,1) = [];
[num ,ax,ay]= xlsread('预测数据.xlsx');
[mx,my] = size(ay);
for ii = 2:mx
for jj = 1:my
if ischar(ay{ii,jj})
num(ii-1,jj) = str2double(ay{ii,jj});
end
end
end
num(:,1) = [];
m1=18;
%节点个数
inputnum=18;
hiddennum=20;
outputnum=1;
m = round(0.8*length(num));
n = randperm(length(num));
%训练数据和预测数据
input_train=num0(n(1:m),1:m1)';%
input_test=num0(m+1:end,1:m1)';
output_train=num0(n(1:m),m1+1)';%
output_test=num0(m+1:end,m1+1)';
input_yu=num(:,1:m1)';
output_yu=num(:,m1+1)';
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%构建网络
% net=newff(inputn,outputn,hiddennum);
net = newff(minmax(inputn),[20,1],{'logsig','tansig'},'traingdx');
[BPoutput,errorb] = bpp(input_train,input_test,output_train,output_test);
% 参数初始化
dim=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
maxgen=30; % 进化次数
sizepop=22; %种群规模
popmax=5;
popmin=-5;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
P_percent = 0.35; % The population size of producers accounts for "P_percent" percent of the total population size
pNum = round( sizepop * P_percent ); % The population size of the producers
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:sizepop
pop(i,:)=10*rands(1,dim)-5;
% V(i,:)=rands(1,21);
fitness(i)=fun(pop(i,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pFit = fitness;
[ fMin, bestI ] = min( fitness ); % fMin denotes the global optimum fitness value
bestX = pop( bestI, : ); % bestX denotes the global optimum position corresponding to fMin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%麻雀搜索算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for t = 1 : maxgen
[ ans, sortIndex ] = sort( pFit );% Sort.
[fmax,B]=max( pFit );
worse= pop(B,:);
r2=rand(1);
if(r2<0.8)
for i = 1 : pNum % Equation (3)
r1=rand(1);
pop( sortIndex( i ), : ) = pop( sortIndex( i ), : )*exp(-(i)/(r1*maxgen));
fitness(sortIndex( i ))=fun(pop(sortIndex( i ),:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end
else
for i = 1 : pNum
pop( sortIndex( i ), : ) = pop( sortIndex( i ), : )+randn(1)*ones(1,dim);
fitness(sortIndex( i ))=fun(pop(sortIndex( i ),:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end
end
[ fMMin, bestII ] = min( fitness );
bestXX = pop( bestII, : );
for i = ( pNum + 1 ) : sizepop % Equation (4)
A=floor(rand(1,dim)*2)*2-1;
if( i>(sizepop/2))
pop( sortIndex(i ), : )=randn(1)*exp((worse-pop( sortIndex( i ), : ))/(i)^2);
else
pop( sortIndex( i ), : )=bestXX+(abs(( pop( sortIndex( i ), : )-bestXX)))*(A'*(A*A')^(-1))*ones(1,dim);
end
fitness(sortIndex( i ))=fun(pop(sortIndex( i ),:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end
c=randperm(numel(sortIndex));
b=sortIndex(c(1:3));
for j = 1 : length(b) % Equation (5)
if( pFit( sortIndex( b(j) ) )>(fMin) )
pop( sortIndex( b(j) ), : )=bestX+(randn(1,dim)).*(abs(( pop( sortIndex( b(j) ), : ) -bestX)));
else
pop( sortIndex( b(j) ), : ) =pop( sortIndex( b(j) ), : )+(2*rand(1)-1)*(abs(pop( sortIndex( b(j) ), : )-worse))/ ( pFit( sortIndex( b(j) ) )-fmax+1e-50);
end
fitness(sortIndex( i ))=fun(pop(sortIndex( i ),:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i = 1 : sizepop
if ( fitness( i ) < pFit( i ) )
pFit( i ) = fitness( i );
pop(i,:) = pop(i,:);
end
if( pFit( i ) < fMin )
fMin= pFit( i );
bestX =pop( i, : );
end
end
yy(t)=fMin;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 迭代寻优
x=bestX
%% 结果分析
plot(yy)
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
%% 把最优初始阀值权值赋予网络预测
% %用麻雀搜索算法优化的BP网络进行值预测
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);
net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2;
net = newff(minmax(inputn),[20,1],{'logsig','tansig'},'trainlm');
%% 训练
%网络进化参数
net.trainParam.epochs=5000;
net.trainParam.lr=0.01;
net.trainParam.goal=0.001;
net.trainParam.max_fail = 3000;
%网络训练
[net,tr]=train(net,inputn,outputn);
load maynet.mat
%%预测
%数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
inputn_yu=mapminmax('apply',input_yu,inputps);
anyu=sim(net,inputn_yu);
an=sim(net,inputn_test);
test_simu=mapminmax('reverse',an,outputps);
error=test_simu-output_test;
test_simuyu=mapminmax('reverse',anyu,outputps);
figure
plot(test_simu,'r-o')
hold on
plot(BPoutput,'b-s')
hold on
plot(output_test,'k-*')
hold off
xlabel('样本')
ylabel('价值')
legend('ssa-bp','bp','实际值')
figure
plot(error)
title('仿真预测误差','fontsize',12);
xlabel('仿真次数','fontsize',12);
ylabel('误差','fontsize',12);
xlswrite('ssa-bp测试.xlsx',test_simu)
xlswrite('bp测试.xlsx',BPoutput)
xlswrite('ssa-bp测试.xlsx',test_simu)
xlswrite('ssa-bp预测.xlsx',test_simuyu)
没有合适的资源?快使用搜索试试~ 我知道了~
基于麻雀算法优化BP神经网络的多输入单输出预测(代码完整,数据齐全)
共10个文件
xlsx:6个
m:3个
mat:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
2星 1 下载量 109 浏览量
2024-01-19
00:07:43
上传
评论 1
收藏 99KB RAR 举报
温馨提示
基于MATLAB编程,基于麻雀算法优化BP神经网络的多输入单输出预测,代码完整,包含数据,有注释,方便扩展应用 1,如有疑问,不会运行,可以私信, 2,需要创新,或者修改可以扫描二维码联系博主, 3,本科及本科以上可以下载应用或者扩展, 4,内容不完全匹配要求或需求,可以联系博主扩展。
资源推荐
资源详情
资源评论
收起资源包目录
代码.rar (10个子文件)
ssa-bp测试.xlsx 11KB
ssa-bp预测.xlsx 9KB
SSA.m 6KB
预测数据.xlsx 13KB
bp测试.xlsx 11KB
ssa-bp数据1.xlsx 32KB
maynet.mat 8KB
fun.m 1KB
数据1.xlsx 29KB
bpp.m 1KB
共 10 条
- 1
资源评论
- m0_752449772024-03-07怎么有两个文件呢
神经网络机器学习智能算法画图绘图
- 粉丝: 2436
- 资源: 598
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- vue自定义指令( 复制、拖动、权限)
- json格式文件备份redis数据库 工具
- Multi-Agent-Flocking.zip
- 指标公式未来函数检测工具V1.2
- projectData
- SQL Server 性能监视器,它旨在提供开箱即用的全面监控,并作为您自己的项目或应用程序的监控框架 它在本地数据库中收集性能
- Python 程序语言设计模式思路-并发模式:线程池模式:管理线程池,优化线程创建和销毁
- 股事汇投资工具-实时新闻、财经日历、市场快讯、持仓查询、外汇兑换、换算工具、大盘云图、江恩工具、指标检测等
- webrtc-streamer
- html+css+'青春献礼二十大 红色旅游助乡村'为主题的网页设计 2022年参与学校网页设计比赛时完成的
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功