時(shí)序預(yù)測 | MATLAB實(shí)現(xiàn)WOA-GRU鯨魚算法優(yōu)化門控循環(huán)單元時(shí)間序列預(yù)測
預(yù)測效果
基本介紹
MATLAB實(shí)現(xiàn)WOA-GRU鯨魚算法優(yōu)化門控循環(huán)單元時(shí)間序列預(yù)測
基于鯨魚算法優(yōu)化門控循環(huán)單元(WOA-GRU)的時(shí)間序列預(yù)測。
優(yōu)化參數(shù)為學(xué)習(xí)率,隱藏層節(jié)點(diǎn)個(gè)數(shù),正則化參數(shù),要求2020b及以上版本,matlab代碼。
評價(jià)指標(biāo)包括:MAE、MSE、RMSE等,代碼質(zhì)量極高,方便學(xué)習(xí)和替換數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-426528.html
程序設(shè)計(jì)
- 完整程序和數(shù)據(jù)下載方式1(資源處直接下載):MATLAB實(shí)現(xiàn)WOA-GRU鯨魚算法優(yōu)化門控循環(huán)單元時(shí)間序列預(yù)測
- 完整程序和數(shù)據(jù)下載方式2(訂閱《GRU門控循環(huán)單元》專欄,同時(shí)可閱讀《GRU門控循環(huán)單元》專欄收錄的所有內(nèi)容,數(shù)據(jù)訂閱后私信我獲取):MATLAB實(shí)現(xiàn)WOA-GRU鯨魚算法優(yōu)化門控循環(huán)單元時(shí)間序列預(yù)測
- 完整程序和數(shù)據(jù)下載方式3(訂閱《智能學(xué)習(xí)》專欄,同時(shí)獲取《智能學(xué)習(xí)》專欄收錄程序6份,數(shù)據(jù)訂閱后私信我獲取):MATLAB實(shí)現(xiàn)WOA-GRU鯨魚算法優(yōu)化門控循環(huán)單元時(shí)間序列預(yù)測
% 預(yù)設(shè)鯨魚優(yōu)化算法的參數(shù)
popsize = 5; %種群數(shù)量
maxgen = 20; % WOA最大的迭代次數(shù)
dim = 3; % 優(yōu)化的自變量個(gè)數(shù) ,依次為GRU的第一和第二隱含層節(jié)點(diǎn)數(shù),最大訓(xùn)練代數(shù),初始學(xué)習(xí)率
%輸入輸出數(shù)據(jù)
L = size(output, 1); %樣本總數(shù)
% testNumber = round(L*0.2); %設(shè)置四個(gè)樣本測試
testNumber =20; %設(shè)置四個(gè)樣本測試
trainNumber = L - testNumber; %訓(xùn)練樣本數(shù)量
% 劃分訓(xùn)練集和測試集
p_train = input(1:trainNumber, :)';
t_train = output(1:trainNumber, :)';
% 測試集
p_test = input(trainNumber+1:trainNumber+testNumber,:)';
t_test = output(trainNumber+1:trainNumber+testNumber,:)';
%% 歸一化和元胞數(shù)組處理
[pn_train ,ps]= mapminmax(p_train);
[tn_train, ts] = mapminmax(t_train);
%測試集的歸一化
pn_test = mapminmax('apply', p_test, ps);
tn_test = mapminmax('apply', t_test, ts);
for i = 1:length(t_train)
P_train{i,1} = pn_train(:,i);
end
for i = 1:length(t_test)
P_test{i,1} = pn_test(:,i);
end
%% 歸一化和元胞數(shù)組處理p 4; % 優(yōu)化的自變量個(gè)數(shù) ,依次為GRU的第一和第二隱含層節(jié)點(diǎn)數(shù),最大訓(xùn)練代數(shù),初始學(xué)習(xí)率
lb = [1, 1, 0.001]; % 下限
ub = [10,20, 0.01]; % 上限
% initialize position vector and score for the leader,初始化位置向量和領(lǐng)導(dǎo)者得分
Leader_pos=zeros(1,dim);
Leader_score=inf; %change this to -inf for maximization problems,將此更改為-inf以獲得最大化問題,Inf無窮大
%Initialize the positions of search agents
Positions=initialization(popsize,dim,ub,lb);%Positions,存放數(shù)個(gè)個(gè)體的多維位置。
Convergence_curve=zeros(1,maxgen);%Convergence_curve收斂曲線
t=1;% Loop counter
% Main loop
while t<maxgen+1 % 首先 迭代次數(shù)的while循環(huán) 為2 也就是鯨魚群體會(huì)進(jìn)化2代
disp(['current iteration is: ', num2str(t)])
for i=1:size(Positions,1)%對每個(gè)個(gè)體一個(gè)一個(gè)檢查是否越界 % 種群規(guī)模是2 所以嵌套了2次訓(xùn)練
% Return back the search agents that go beyond the boundaries of
% the search space,返回超出搜索空間邊界的搜索代理
Flag4ub=Positions(i,:)>ub;
Flag4lb=Positions(i,:)<lb;
Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;%超過最大值的設(shè)置成最大值,超過最小值的設(shè)置成最小值
% 評估個(gè)體適應(yīng)度,會(huì)調(diào)用func.m子函數(shù),把個(gè)體位置坐標(biāo)賦給GRU參數(shù)中,執(zhí)行的訓(xùn)練
% Calculate objective function for each search agent,目標(biāo)函數(shù)值的計(jì)算
[fitness,net]=func(Positions(i,:),p_train,P_train,P_test, tn_train,ts,t_train,t_test);
if fitness<Leader_score % Change this to > for maximization problem
Leader_score=fitness; % Update alpha
Leader_pos=Positions(i,:);
net1 = net;
end
end
a=2-t*((2)/maxgen); % a decreases linearly fron 2 to 0 in Eq. (2.3)
% a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12),有疑問?
a2=-1+t*((-1)/maxgen);
% Update the Position of search agents,參數(shù)更新
for i=1:size(Positions,1)
r1=rand(); % r1 is a random number in [0,1]
r2=rand(); % r2 is a random number in [0,1]
A=2*a*r1-a; % Eq. (2.3) in the paper
C=2*r2; % Eq. (2.4) in the paper
b=1; % parameters in Eq. (2.5)
l=(a2-1)*rand+1; % parameters in Eq. (2.5)
p = rand(); % p in Eq. (2.6)
for j=1:size(Positions,2)%對每一個(gè)個(gè)體地多維度進(jìn)行循環(huán)運(yùn)算
if p<0.5%收縮包圍機(jī)制
參考資料
[1] https://blog.csdn.net/article/details/126072792?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/article/details/126044265?spm=1001.2014.3001.5502
[3] https://blog.csdn.net/article/details/126043107?spm=1001.2014.3001.5502文章來源地址http://www.zghlxwxcb.cn/news/detail-426528.html
到了這里,關(guān)于時(shí)序預(yù)測 | MATLAB實(shí)現(xiàn)WOA-GRU鯨魚算法優(yōu)化門控循環(huán)單元時(shí)間序列預(yù)測的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!