Mehrdimensionale Zeitreihen | MATLAB implementiert den SSA-GRU Sparrow-Algorithmus, um die Vorhersage von Zeitreihen mit gesteuerten zyklischen Einheiten und mehreren Variablen zu optimieren

Mehrdimensionale Zeitreihen | MATLAB implementiert den SSA-GRU Sparrow-Algorithmus, um die Vorhersage von Zeitreihen mit gesteuerten zyklischen Einheiten und mehreren Variablen zu optimieren

Vorhersageeffekt

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

grundlegende Einführung

1. MATLAB implementiert den SSA-GRU-Sparrow-Algorithmus zur Optimierung der Zeitreihenvorhersage mit Gated-Cyclic-Unit-Multivariablen (vollständiger Quellcode und Daten).
2. Die Optimierungsparameter des Sparrow-Algorithmus sind die Anzahl der Knoten der verborgenen Schicht, die maximale Anzahl der Trainingszeiten und die anfänglicher Lernratenparameter.
3. Codefunktionen: Parametrische Programmierung, Parameter können leicht geändert werden, Codeprogrammierungsideen sind klar und Kommentare sind detailliert.

Der Sparrow Search Algorithm (SSA) wurde 2020 vorgeschlagen. SSA wurde hauptsächlich vom Futtersuchverhalten und dem Anti-Raubtier-Verhalten von Spatzen inspiriert. Dieser Algorithmus ist relativ neu und bietet die Vorteile einer starken Optimierungsfähigkeit und einer schnellen Konvergenzgeschwindigkeit. Um ein mathematisches Modell des Spatzensuchalgorithmus zu erstellen, lauten die Hauptregeln wie folgt:
(1) Der Entdecker verfügt normalerweise über eine hohe Energiereserve und ist dafür verantwortlich, in der gesamten Population nach einem Gebiet mit reichhaltigem Futter zu suchen und so ein Nahrungsgebiet bereitzustellen alle Tischler. und Richtung. Bei der Modellbildung hängt die Höhe der Energiereserve vom Fitnesswert (Fitness Value) des Spatzenindividuums ab.
(2) Sobald ein Spatz ein Raubtier entdeckt, beginnt das Individuum als Alarmsignal zu zwitschern. Wenn der Alarmwert größer als der sichere Wert ist, bringt der Entdecker den Schreiner zur Futtersuche in andere sichere Bereiche.
(3) Die Identitäten von Entdeckern und Mitstreitern ändern sich dynamisch. Solange eine bessere Nahrungsquelle gefunden wird, kann jeder Spatz zum Entdecker werden, der Anteil der Entdecker und Neulinge an der Gesamtpopulation bleibt jedoch unverändert. Mit anderen Worten: Wenn ein Spatz zum Entdecker wird, wird ein anderer Spatz zum Tischler.
(4) Je geringer die Energie der Tischler ist, desto schlechter ist ihre Position bei der Nahrungssuche in der Gesamtpopulation. Einige hungrige Tischler fliegen eher woanders hin, um nach mehr Energie zu suchen.
(5) Während des Futtersuchvorgangs kann der Tischler jederzeit nach dem Entdecker suchen, der die beste Nahrung liefert, und dann Nahrung aus der besten Nahrung oder dem besten Futter in der Umgebung des Entdeckers erhalten. Gleichzeitig überwachen einige Tischler möglicherweise ständig den Finder und konkurrieren um Nahrungsressourcen, um ihre Raubtierrate zu erhöhen.
(6) Wenn sich die Spatzen am Rand der Gruppe einer Gefahr bewusst werden, bewegen sie sich schnell in einen sicheren Bereich, um eine bessere Position zu erreichen, während sich die Spatzen in der Mitte der Gruppe zufällig bewegen, um näher an andere Spatzen heranzukommen.

Programmierung

%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
clc;clear;close all;format compact
%%

%% 采用ssa优化
[x ,fit_gen,process]=ssaforbilstm(XTrain,YTrain,XTest,YTest);%分别对隐含层节点 训练次数与学习率寻优
%% 参数设置
pop=5; % 种群数
M=20; % 最大迭代次数
dim=4;%一共有4个参数需要优化
lb=[1   1   1  0.001];%分别对两个隐含层节点 训练次数与学习率寻优
ub=[100 100 50  0.01];%这个分别代表4个参数的上下界,比如第一个参数的范围就是1-100
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
layers = [ ...
    sequenceInputLayer(numFeatures)
    bilstmLayer(numHiddenUnits)
    fullyConnectedLayer(numResponses)
    regressionLayer];
options = trainingOptions('adam', ...
    'MaxEpochs',250, ...
    'GradientThreshold',1, ...
    'InitialLearnRate',0.005, ...
    'LearnRateSchedule','piecewise', ...
    'LearnRateDropPeriod',125, ...
    'LearnRateDropFactor',0.2, ...
    'ExecutionEnvironment','cpu', ...
    'Verbose',0, ...
    'Plots','training-progress');
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   
net = trainNetwork(XTrain,YTrain,layers,options);
dataTestStandardized = (dataTest - mu) / sig;
XTest = dataTestStandardized(1:end-1);
net = predictAndUpdateState(net,XTrain);
[net,YPred] = predictAndUpdateState(net,YTrain(end));
numTimeStepsTest = numel(XTest);

Verweise

[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

Acho que você gosta

Origin blog.csdn.net/kjm13182345320/article/details/135258226
Recomendado
Clasificación