%% �ô���Ϊ�����Ŵ��㷨����������Ԥ������
% ���ջ�������
clc
clear
close all
%
%% �����ṹ����
%��ȡ����
load data input output
%�ڵ�����
inputnum=13;
hiddennum=[16 10];
outputnum=1;
%ѵ�����ݺ�Ԥ������
input_train=input(1:10064,:)';
input_test=input(20065:24464,:)';
output_train=output(1:10064)';
output_test=output(20065:24464)';
% input_train=input(1:89,:)';
% input_test1=input(90:177,:)';
% n = randperm(length(input_test1));
% input_test = input_test1(:,n(1:20));
% output_train=output(1:89)';
% output_test1=output(90:177)';
% output_test = output_test1(:,n(1:20));
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%��������
net=newff(inputn,outputn,[hiddennum]);
%% �Ŵ��㷨������ʼ��
maxgen=20; %��������������������
sizepop=4; %��Ⱥ��ģ
pcross=[0.9]; %��������ѡ����0��1֮��
pmutation=[0.05]; %��������ѡ����0��1֮��
%�ڵ�����
numsum=inputnum*hiddennum(1)+hiddennum(1)+hiddennum(1)*hiddennum(2)+hiddennum(2)+hiddennum(2)*outputnum+outputnum;
lenchrom=ones(1,numsum);
bound=[-5*ones(numsum,1) 5*ones(numsum,1)]; %���ݷ�Χ
%------------------------------------------------------��Ⱥ��ʼ��--------------------------------------------------------
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); %����Ⱥ��Ϣ����Ϊһ���ṹ��
avgfitness=[]; %ÿһ����Ⱥ��ƽ����Ӧ��
bestfitness=[]; %ÿһ����Ⱥ��������Ӧ��
bestchrom=[]; %��Ӧ�����õ�Ⱦɫ��
%��ʼ����Ⱥ
for i=1:sizepop
%��������һ����Ⱥ
individuals.chrom(i,:)=Code(lenchrom,bound); %���루binary��grey�ı�������Ϊһ��ʵ����float�ı�������Ϊһ��ʵ��������
x=individuals.chrom(i,:);
%������Ӧ��
individuals.fitness(i)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn); %Ⱦɫ������Ӧ��
end
FitRecord=[];
%�����õ�Ⱦɫ��
[bestfitness bestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:); %���õ�Ⱦɫ��
avgfitness=sum(individuals.fitness)/sizepop; %Ⱦɫ����ƽ����Ӧ��
% ��¼ÿһ�����������õ���Ӧ�Ⱥ�ƽ����Ӧ��
trace=[avgfitness bestfitness];
%% �����������ѳ�ʼ��ֵ��Ȩֵ
% ������ʼ
for i=1:maxgen
i
% ѡ��
individuals=Select(individuals,sizepop);
avgfitness=sum(individuals.fitness)/sizepop;
%����
individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
% ����
individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);
% ������Ӧ��
for j=1:sizepop
x=individuals.chrom(j,:); %����
individuals.fitness(j)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);
end
%�ҵ���С��������Ӧ�ȵ�Ⱦɫ�弰��������Ⱥ�е�λ��
[newbestfitness,newbestindex]=min(individuals.fitness);
[worestfitness,worestindex]=max(individuals.fitness);
% ������һ�ν��������õ�Ⱦɫ��
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:);
end
individuals.chrom(worestindex,:)=bestchrom;
individuals.fitness(worestindex)=bestfitness;
avgfitness=sum(individuals.fitness)/sizepop;
trace=[trace;avgfitness bestfitness]; %��¼ÿһ�����������õ���Ӧ�Ⱥ�ƽ����Ӧ��
FitRecord=[FitRecord;individuals.fitness];
end
%% �Ŵ��㷨��������
figure(3)
[r c]=size(trace);
plot([1:r]',trace(:,2),'b--');
title(['Optimal individual fitness value' num2str(maxgen)]);
set(gca,'fontsize',12);
xlabel('Number of evolutions','fontsize',12);ylabel('fitness Value','fontsize',12);
disp('��Ӧ�� ����');
%% �����ų�ʼ��ֵȨֵ��������Ԥ��
% %���Ŵ��㷨�Ż���BP��������ֵԤ��
w1=x(1:inputnum*hiddennum(1));
B1=x(inputnum*hiddennum(1)+1:inputnum*hiddennum(1)+hiddennum(1));
w2=x(inputnum*hiddennum(1)+hiddennum(1)+1:inputnum*hiddennum(1)+hiddennum(1)+hiddennum(1)*hiddennum(2));
B2=x(inputnum*hiddennum(1)+hiddennum(1)+hiddennum(1)*hiddennum(2)+1:inputnum*hiddennum(1)+hiddennum(1)+hiddennum(1)*hiddennum(2)+hiddennum(2));
w3=x(inputnum*hiddennum(1)+hiddennum(1)+hiddennum(1)*hiddennum(2)+hiddennum(2)+1:inputnum*hiddennum(1)+hiddennum(1)+hiddennum(1)*hiddennum(2)+hiddennum(2)+hiddennum(2)*outputnum);
B3=x(inputnum*hiddennum(1)+hiddennum(1)+hiddennum(1)*hiddennum(2)+hiddennum(2)+hiddennum(2)*outputnum+1:inputnum*hiddennum(1)+hiddennum(1)+hiddennum(1)*hiddennum(2)+hiddennum(2)+hiddennum(2)*outputnum+outputnum);
net.iw{1,1}=reshape(w1,hiddennum(1),inputnum);
net.lw{2,1}=reshape(w2,hiddennum(2),hiddennum(1));
net.lw{3,2}=reshape(w3,outputnum,hiddennum(2));
net.b{1}=reshape(B1,hiddennum(1),1);
net.b{2}=reshape(B2,hiddennum(2),1);
net.b{3}=B3;
%% BP����ѵ��
%������������
net.trainParam.epochs=1000;
net.trainParam.lr=0.1;
%net.trainParam.goal=0.00001;
%����ѵ��
[net,per2]=train(net,inputn,outputn);
%% BP����Ԥ��
%���ݹ�һ��
inputn_test=mapminmax('apply',input_test,inputps);
an=sim(net,inputn_test);
test_simu = mapminmax('reverse',an,outputps);
error=abs(test_simu-output_test); %Ԥ��ֵ������ֵ�����
errorPercent=error./output_test; %Ԥ��ֵ������ֵ�����ٷֱ�
figure(1)
plot(test_simu,':og','color',[0.54 0.17 0.89],'linewidth',1,'markersize',8)
hold on
plot(output_test,'-*','color',[0.20 0.63 0.79],'linewidth',1,'markersize',8);
hold off
legend('Predicted results','validation results')
%
% set(gca,'Fontname','arial');
% set(gca,'xtick',1:1:240);%gca是当å�?�å�? ‡è½´çš�?�å¥æŸ�?�,xtick表示我è¦è®¾ç½®x轴刻度è¦æ˜¾ç¤ºçš„ä½ç½�?
% set(gca,'xticklabel',{'2-Jul','3-Jul','4-Jul','5-Jul','6-Jul','7-Jul','8-Jul','9-Jul','11-Jul','12-Jul','13-Jul','14-Jul','15-Jul','16-Jul','17-Jul','18-Jul','19-Jul','20-Jul','21-Jul','22-Jul','23-Jul','24-Jul','25-Jul','26-Jul','27-Jul','28-Jul','29-Jul','30-Jul','31-Jul','2-Aug','3-Aug','4-Aug','5-Aug','6-Aug','7-Aug','8-Aug','9-Aug','10-Aug','11-Aug','12-Aug','13-Aug','14-Aug','15-Aug','16-Aug','17-Aug','18-Aug','19-Aug','20-Aug','21-Aug','22-Aug','23-Aug','24-Aug','25-Aug','26-Aug','27-Aug','28-Aug','29-Aug','30-Aug','31-Aug','2-Sep','3-Sep','4-Sep','5-Sep','6-Sep','7-Sep','8-Sep','9-Sep','10-Sep','11-Sep','12-Sep','13-Sep','14-Sep','15-Sep','16-Sep','17-Sep','18-Sep','19-Sep','20-Sep','21-Sep','22-Sep','23-Sep','24-Sep','25-Sep','26-Sep','27-Sep','28-Sep','29-Sep','30-Sep'});
% xtickangle(90)
%Ԥ������
MAPE=mean(abs((output_test - test_simu)./output_test))*100;
RMSE=sqrt(mean((output_test - test_simu).^2));
figure(2)
plot((output_test-test_simu)./test_simu,'-*');
title('The error of GA-BP neural network')
没有合适的资源?快使用搜索试试~ 我知道了~
遗传算法优化双隐含层BP神经网络(代码完整,数据齐全)
共16个文件
m:12个
mat:2个
asv:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 78 浏览量
2024-03-02
18:14:17
上传
评论
收藏 200KB RAR 举报
温馨提示
基于MATLAB编程,遗传算法优化双隐含层BP神经网络,代码完整,包含数据,有注释,方便扩展应用 1,如有疑问,不会运行,可以私信, 2,需要创新,或者修改可以扫描二维码联系博主, 3,本科及本科以上可以下载应用或者扩展, 4,内容不完全匹配要求或需求,可以联系博主扩展。
资源推荐
资源详情
资源评论
收起资源包目录
yuce.rar (16个子文件)
fanguihihuafun.m 334B
fun.asv 2KB
Select.m 1KB
data.m 134B
error_file.mat 905B
Decode.m 1KB
PSO.m 6KB
Code.m 420B
Genetic.m 8KB
Cross.m 2KB
test.m 291B
Genetic.asv 8KB
fun.m 2KB
guiyihuafun.m 511B
data.mat 196KB
Mutation.m 2KB
共 16 条
- 1
资源评论
- 2021的春天2024-04-22资源是宝藏资源,实用也是真的实用,感谢大佬分享~
神经网络机器学习智能算法画图绘图
- 粉丝: 2457
- 资源: 602
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功