BP神经网络+遗传算法:求取非线性函数极值(一)

1、问题描述

对于未知的非线性函数,仅通过函数的输入输出数据难以准确寻找其函数极值,这类问题可以通过利用BP神经网络非线性拟合能力遗传算法非线性寻优能力来解决。
设非线性函数表达式如下:
在这里插入图片描述
其函数图像如下:
在这里插入图片描述

由其函数图像可以看出该函数的全局最小值为0,坐标为(0,0)。虽然从函数方程可以很容易看出其最优解及对应的坐标,但是在函数方程未知情况下,我们很难找到非线性函数的极值。
下面利用该函数的4000组输入输出数据采用BP神经网络对其进行非线性拟合,然后再用遗传算法求取其极值。
在Matlab上产生输入输出数据的代码如下:

clear all
t=[-2:0.001:2];
[x1,x2]=meshgrid(t);
y=2*x1.^2+x2.^2;
figure
mesh(x1,x2,y);%画三维图
title('非线性函数y=2*x1^2+x2^2')
%4000组输入输出数据来训练神经网络
input=[x1(1:4000);x2(1:4000)]';
output=y(1:4000)';

2、BP神经网络训练

该非线性函数有2个输入参数,一个输出参数,选择BP神经网络的训练结构为2-10-1,最大训练次数为100次,学习速率为0.001,训练精度为0.0000001
随机选取3900组100组输入输出数据作为训练集测试集,再利用Matlab上BP神经网络工具箱newff函数)进行训练,神经网络工具箱参数示意图如下:
在这里插入图片描述
BP神经网络的Matlab代码及说明如下:

%%%14000随机排列
k=rand(1,4000);%产生4000个随机数
[m,n]=sort(k);%对k进行升序排列,m为排序后的值,n为初始序号,故得到了14000的随机序号n

%%%设置训练集和测试集
%训练集
input_train=input(n(1:3900),:)';
output_train=output(n(1:3900),:)';
%测试集
input_test=input(n(3901:4000),:)';
output_test=output(n(3901:4000),:)';

%%%数据归一化,归一化到[-1,1}
[inputn,inputps]=mapminmax(input_train);%归一化表达式;y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;
[outputn,outputps]=mapminmax(output_train);%归一化表达式;y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;

%%%BP神经网络训练
net=newff(inputn,outputn,10);
net.trainParam.epochs=100;%最大训练次数
net.trainParam.lr=0.001;%学习速率
net.trainParam.goal=0.0000001;%训练精度
net=train(net,inputn,outputn);%BP神经网络工具箱

%%%测试样本归一化
inputn_test=mapminmax('apply',input_test,inputps);%通过指定’apply’ ps 参数实现调用映射关系

%%%BP神经网络预测
pd=sim(net,input_test);

%%%预测结果反归一化
BPoutput=mapminmax('reverse',pd,outputps);%通过指定’reverse'实现反归一化

%%%存储数据
save data net inputps outputps

%%%画图
figure
plot(BPoutput,':or')
hold on
plot(output_test,'-*b');
ylim([0 15])
legend('预测输出','期望输出')
title('BP神经网络预测输出')
xlabel('测试样本')
ylabel('输出')

3、BP神经网络拟合结果

对于100个测试样本,BP神经网络预测输出期望输出如下:
在这里插入图片描述

由于神经网络结构的选择以及训练精度的设置,预测输出还与实际存在一定误差,不过可以用该神经网络的输出近似代替实际函数的输出。(训练结果还不太好┭┮﹏┭┮,这里只做示例演示来讲解方法思路)
BP神经网络训练过程的均方差如下
在这里插入图片描述
可以看出训练60次时的训练误差已经满足训练精度0.0000001

4、小结

Matlab上的神经网络工具箱(newff)使用起来十分方便,只用设定newff函数的神经网络结构和输入输出数据就行了,其还可以分析训练误差等信息,十分好用,强烈推荐!!
参考资料:《Matlab神经网络43个案例分析》
(遗传算法求取最优个体见下一讲)
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>