FB_ALY_LinearRegressionFitting
Der Baustein Linear Regression Fitting nähert eine Variable (den Input Dependent) durch die Linearkombination mehrerer anderer Variablen (Input 01 … Input 0n) an. Dies geschieht durch das inkrementelle stochastische Gradientenverfahren. Zum Ende der Analyse werden die berechneten Koeffizienten in eine Datei geschrieben.
Die Linearkombination ist gegeben durch folgende Gleichung:
In jedem Zyklus werden die Werte für bis
mit folgender Vorschrift neu berechnet:
Dies entspricht der Minimierung der quadratischen Abweichung der berechneten Werte y (vom Baustein als Result ausgegeben) von dem dazugehörigen Eingangswert Dependent. Der Parameter entspricht der Step Size und gibt an, wie stark die Parameter angeglichen werden. Je größer der Wert, desto schneller nähern sich die Koeffizienten einem lokalen Optimum an. Wird der Wert jedoch zu groß gewählt, kann es sein, dass der Algorithmus nicht konvergiert.
Typischerweise werden zunächst mit dem Baustein Linear Regression Fitting die Gewichte für die Regression einer Zielvariable angepasst. Anschließend kann mithilfe des Bausteins Linear Regression Inference und den angepassten Gewichten die Zielvariable anhand der Eingangsvariablen vorhergesagt werden.
Syntax
Definition:
FUNCTION_BLOCK FB_LinearRegressionFitting
VAR_OUTPUT
ipResultMessage: Tc3_EventLogger.I_TcMessage;
bError: BOOL;
bNewResult: BOOL;
bConfigured: BOOL;
fResult: LREAL;
fMSE: LREAL;
bBusy: BOOL;
eState: E_TeachState;
END_VAR
Ausgänge
Name | Typ | Beschreibung |
---|---|---|
ipResultMessage | Beinhaltet nähere Informationen zum aktuellen Rückgabewert. Für diesen speziellen Schnittstellenzeiger ist intern sichergestellt, dass er immer gültig/zugewiesen ist. | |
bError | BOOL | Der Ausgang ist |
bNewResult | BOOL | Wenn ein neues Ergebnis berechnet wurde, ist der Ausgang |
bConfigured | BOOL | Zeigt |
fResult | LREAL | Gibt den angenäherten Wert für die Inputs des aktuellen Zyklus mit den daraus aktualisierten Koeffizienten aus. |
fMSE | LREAL | Gibt den MSE (mean squared error) zwischen errechnetem Wert Result und Eingangswert Dependent an. |
bBusy | BOOL |
|
eState | Aktueller Zustand des Funktionsbausteins. Siehe Zustandsdiagramm. |
Methoden
Name | Definitionsort | Beschreibung |
---|---|---|
Call() | Local | Methode zur Berechnung der Ausgänge für eine bestimmte Konfiguration. |
Configure() | Local | Allgemeine Konfiguration des Algorithmus mit seinen parametrisierten Bedingungen. |
FB_init() | Local | Initialisieren der Anzahl der Eingangskanäle. |
GetBusyState() | Local | Diese Methode liefert den Zustand Busy des Funktionsbausteins. |
GetChannelOutputValue() | Local | Methode für den Empfang von Werten von verschiedenen Ausgangskanälen. |
Reset() | Local | Setzt alle internen Zustände oder die bisher durchgeführten Berechnungen zurück. |
SetChannelValue() | Local | Methode zur Übergabe von Werten an den Algorithmus. |
SwitchState_Idle() | Local | Methode, um den Funktionsbaustein in den Zustand Idle zu versetzen, wenn der Einlernvorgang abgeschlossen ist. |
SwitchState_Teach() | Local | Methode, um den Funktionsbaustein in den Einlernmodus zu versetzen. |
UpdateState() | Local | Methode zur Verwendung für den Übergang von einem Zustand in einen anderen Zustand. |
Zustandsdiagramm
Aufgrund des asynchronen Dateizugriffs in Echtzeitanwendungen benötigt dieser Funktionsbaustein eine Zustandsmaschine, um den Dateizugriff vorzubereiten und abzuschließen.
Beim Start ist der Funktionsbaustein im Zustand Idle. Um die eingehenden Daten in eine Datei zu schreiben, muss er in den Zustand Teach wechseln. Daher muss die Methode SwitchState_Teach() einmal aufgerufen werden, um den Funktionsbaustein in den Zustand PendingTeach zu versetzen. Anschließend muss die Methode UpdateState() aufgerufen werden, bis sich der Funktionsbaustein im Zustand Teach befindet. In diesem Zustand können ein oder mehrere Einlernzyklen durchlaufen werden. Wenn der Funktionsbaustein keine weiteren Zyklen einlernen soll, kann er wieder in den Zustand Idle versetzt werden. Um den Zustandswechsel zu initiieren, muss die Methode SwitchState_Idle() aufgerufen werden. Anschließend muss die Methode UpdateState() aufgerufen werden, bis sich der Funktionsbaustein im Zustand Idle befindet.
Zustandsdiagramm für den Einlernvorgang der Daten:

Beispiel
VAR
fbLinearRegressionFitting : FB_ALY_LinearRegressionFitting(nNumChannels := 1);
bBias : BOOL := TRUE;
fStepSize : LREAL := 0.01;
nMiniBatchSize : UDINT := 1;
tTimeout : TIME := T#5S;
bInvolveExistingFile : BOOL := TRUE;
sFilePath : STRING := 'C:\TwinCAT\3.1\Boot\LinearRegressionFitting.tas';
bConfigure : BOOL := TRUE;
eState : E_ALY_TeachState := E_ALY_TeachState.Idle;
bTeach : BOOL;
bFit : BOOL := TRUE;
fInputX : LREAL;
fInputY : LREAL;
fOut0 : LREAL;
fOut1 : LREAL;
END_VAR
// Configure algorithm
IF bConfigure THEN
bConfigure := FALSE;
fbLinearRegressionFitting.Configure(bBias, fStepSize, nMiniBatchSize, tTimeout, bInvolveExistingFile, sFilePath);
END_IF
// Call algorithm
eState := fbLinearRegressionFitting.eState;
CASE eState OF
E_ALY_TeachState.Idle:
IF bTeach THEN
fbLinearRegressionFitting.SwitchState_Teach();
fbLinearRegressionFitting.UpdateState();
END_IF
E_ALY_TeachState.Teach:
fbLinearRegressionFitting.SetChannelValue(1, fInputX);
fbLinearRegressionFitting.Call(bFit := bFit, dependent := fInputY);
fbLinearRegressionFitting.GetChannelOutputValue(0, fOut0);
fbLinearRegressionFitting.GetChannelOutputValue(1, fOut1);
IF NOT bTeach THEN
fbLinearRegressionFitting.SwitchState_Idle();
fbLinearRegressionFitting.UpdateState();
END_IF
E_ALY_TeachState.Pending,
E_ALY_TeachState.PendingIdle,
E_ALY_TeachState.PendingTeach:
fbLinearRegressionFitting.UpdateState();
eState := fbLinearRegressionFitting.eState;
END_CASE
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4024.0 | PC oder CX (x64, x86) | Tc3_Analytics |