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代碼及說明如下:
%%%從1到4000隨機排列
k=rand(1,4000);%產生4000個亂數
[m,n]=sort(k);%對k進行升序排列,m為排序后的值,n為初始序號,故得到了1到4000的隨機序號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個案例分析》
(遺傳演算法求取最優個體見下一講)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/386784.html
標籤:AI
