MATLAB-模型模糊神經網絡預測控制demo

減法聚類方法從數據生成FIS結構 genfis2

tripdata
figure,plot(datin)
a=genfis2(datin,datout,0.45);
figure,plotfis(a);
figure
fuzout=evalfis(datin,a);
subplot(2,1,1)
plot(datin)
subplot(2,1,2)
plot([datout fuzout])
figure,plot(datout,fuzout,'bx',[0 10],[0 10],'r:')
xlabel('Actual Value')
ylabel('Predicted Value')
axis square

chkfuzout=evalfis(chkdatin,a);%未定義chkdatin
figure,plot(chkdatout,chkfuzout,'bx',[0 10],[0 10],'r:')
axis square
xlabel('Actual Value')
ylabel('Predicted Value')


genfis2 使用減法聚類方法從數據生成FIS結構
fismat = genfis2(Xin,Xout,radii)
Xin是一個矩陣,它的每一行包含一個數據點的輸入值;Xout是一個矩陣,它的每一行包含一個數據點的輸出值;randi是一個向量,它指定一個聚類中心在一個數據維上作用的範圍,這裏假定數據位於一個單位超立方體內


genfis1 不使用數據聚類方法從數據生成FIS結構
fismat = genfis1(data)
genfis1爲an fis訓練生成一個Sugeno型作爲初始條件的FIS結構(初始隸屬函數)


plotfis(fismat)
此函數顯示由fismat指定的一個FIS的高層方框圖,輸入和它們的隸屬函數出現在結構特徵圖的左邊,同時輸出和它們的隸屬函數出現在結構特徵圖的右邊。


evalfis 完成模糊推理計算
output= evalfis(input,fismat)
input:指定輸入值的一個數或一個矩陣,如果輸入是一個M×N矩陣,其中N是輸入變量數,那麼evalfis使用 input的每一行作爲一個輸入向量,並且爲變量output返回M×L矩陣,該矩陣每一行是一個向量並且L是輸出變量數;
fismat:要計算的一個FIS結構;


在這裏插入圖片描述
在這裏插入圖片描述

自適應神經模糊推理系統DEMO:anfis

anfis:Adaptive Neural Network Based Fuzzy Interference System

% The Mackey-Glass time-delay differential equation is defined by dx(t)/dt = 0.2x(t-tau)/(1+x(t-tau)^10) - 0.1x(t)
% When x(0) = 1.2 and tau = 17, we have a non-periodic and non-convergent time series that is very sensitive to initial conditions. (We assume x(t) = 0 when t < 0.) 

load mgdata.dat%Mackey-Glass 時間序列
a=mgdata;
time = a(:, 1);
ts = a(:, 2);
figure,plot(time, ts);
xlabel('Time (sec)'); ylabel('x(t)');
title('Mackey-Glass Chaotic Time Series');

% Now we want to build an ANFIS that can predict x(t+6) from the past values of this time series, that is, x(t-18), x(t-12), x(t-6), and x(t). Therefore the training data format is [x(t-18), x(t-12), x(t-6), x(t); x(t+6]
% From t = 118 to 1117, we collect 1000 data pairs of the above format. The first 500 are used for training while the others are used for checking. The plot shows the segment of the time series where data pairs were extracted from. 

trn_data = zeros(500, 5);
chk_data = zeros(500, 5);

% prepare training data
start = 101;
trn_data(:, 1) = ts(start:start+500-1);
start = start + 6;
trn_data(:, 2) = ts(start:start+500-1);
start = start + 6;
trn_data(:, 3) = ts(start:start+500-1);
start = start + 6;
trn_data(:, 4) = ts(start:start+500-1);
start = start + 6;
trn_data(:, 5) = ts(start:start+500-1);

% prepare checking data
start = 601;
chk_data(:, 1) = ts(start:start+500-1);
start = start + 6;
chk_data(:, 2) = ts(start:start+500-1);
start = start + 6;
chk_data(:, 3) = ts(start:start+500-1);
start = start + 6;
chk_data(:, 4) = ts(start:start+500-1);
start = start + 6;
chk_data(:, 5) = ts(start:start+500-1);

index = 118:1117+1; % ts starts with t = 0
figure,plot(time(index), ts(index));
axis([min(time(index)) max(time(index)) min(ts(index)) max(ts(index))]);
xlabel('Time (sec)'); ylabel('x(t)');
title('Mackey-Glass Chaotic Time Series');

% We use GENFIS1 to generate an initial FIS matrix from training data. The command is quite simple since default values for MF number (2) and MF type ('gbellmf') are used: 

fismat = genfis1(trn_data);

% The initial MFs for training are shown in the plots.
figure
for input_index=1:4,
    subplot(2,2,input_index)
    [x,y]=plotmf(fismat,'input',input_index);
    plot(x,y)
    axis([-inf inf 0 1.2]);
    xlabel(['Input ' int2str(input_index)]);
end

% There are 2^4 = 16 rules in the generated FIS matrix and the number of fitting parameters is 108, including 24 nonlinear parameters and 80 linear parameters. This is a proper balance between number of fitting parameters and number of training data (500). The ANFIS command looks like this: >> [trn_fismat,trn_error] = anfis(trn_data, fismat,[],[],chk_data)
% To save time, we will load the training results directly. After ten epochs of training, the final MFs are shown in the plots. Note that these MFs after training do not change drastically. Obviously most of the fitting is done by the linear parameters while the nonlinear parameters are mostly for fine- tuning for further improvement. 

%anfis 自適應神經模糊推理系統 [trn_fismat,trn_error] = anfis(trn_data, fismat,[],[],chk_data)
% load training results
load mganfis

% plot final MF's on x, y, z, u
figure
for input_index=1:4,
    subplot(2,2,input_index)
    [x,y]=plotmf(trn_fismat,'input',input_index);
    plot(x,y)
    axis([-inf inf 0 1.2]);
    xlabel(['Input ' int2str(input_index)]);
end

% Error curves     This plot displays error curves for both training and checking data. Note that the training error is higher than the checking error. This phenomenon is not uncommon in ANFIS learning or nonlinear regression in general; it could indicate that the training process is not close to finished yet. 

% error curves plot
epoch_n = 10;
tmp = [trn_error chk_error];
figure,plot(tmp);
hold on; plot(tmp, 'o'); hold off;
xlabel('Epochs');
ylabel('RMSE (Root Mean Squared Error)');
title('Error Curves');
axis([0 epoch_n min(tmp(:)) max(tmp(:))]);

% Comparisons    This plot shows the original time series and the one predicted by ANFIS. The difference is so tiny that it is impossible to tell one from another by eye inspection. That is why you probably see only the ANFIS prediction curve. The prediction errors must be viewed on another scale. 

input = [trn_data(:, 1:4); chk_data(:, 1:4)];
anfis_output = evalfis(input, trn_fismat);
index = 125:1124;
figure,plot(time(index), [ts(index) anfis_output]);
xlabel('Time (sec)');

% Prediction errors of ANFIS      Prediction error of ANFIS is shown here. Note that the scale is about a hundredth of the scale of the previous plot. Remember that we have only 10 epochs of training in this case; better performance is expected if we have extensive training. 

diff = ts(index)-anfis_output;
figure,plot(time(index), diff);
xlabel('Time (sec)');
title('ANFIS Prediction Errors');

在這裏插入圖片描述
在這裏插入圖片描述
預測誤差:
在這裏插入圖片描述
預測結果:
在這裏插入圖片描述在這裏插入圖片描述

參考

模糊函數介紹及解釋:
詳細解釋:https://blog.csdn.net/MonMama/article/details/91040016
簡單解釋:https://blog.csdn.net/qq_26093511/article/details/51872476
參考文章:https://wenku.baidu.com/view/f0c69e854028915f814dc246.html
參考書籍:《matlab控制系統應用與實例》清華大學出版社 樊京、劉叔軍、蓋曉華、崔世林編輯。
例程:源碼CH8_3.m、CH8_4.m

發佈了43 篇原創文章 · 獲贊 23 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章