Arduino-Code übersetzt nur die Formeln in Arduino-Bezeichner, also für
S = i=0i=100Σxi als
Code:
S=0;
for (i=0; i<=100; i++) {S+=x[i]}
(hier sieht man auch, dass man hier im Forum gar keine vernünftigen Formeln reinschreiben kann, was aber unbedingt nötig wäre für ein Tutorial. Dazu bräuchte man LaTeX.)
- - - Aktualisiert - - -

Zitat von
Holomino
Man muss ja nicht die ganze Regelung mit KI machen, sondern einfach nur die Konstanten generieren.
Eingangsgrößen könnten z.B. Betriebsspannung und Zuladung sein. Ausgangsgrößen sind die Regelkonstanten. Bewertungskriterien sind Zeit bis zum Ziel und Anzahl der Überschwinger.
Wenn ich das alles richtig verstehe, sollte sich ein einfaches Fahrgestell mit Motoren und Inkrementalgebern doch so mit der Zeit selbst optimieren.
Die Menge an Inputs sind viel größer als du wschl denkst, denn du kannst ja nur Zahlen als bit-Inputs eingeben.
Wenn du einen Incrementalgeber verfolgen willst, brauchst du auch die vorherige Position oder Geschwindigkeit.
wenn du also 4 16-Bit-Zahlen als Inputs eingeben willst, brauchst du alleine schon 64 Inputs.
Und wenn du eine 16-bit Encoder-Zielposition eingeben willst, brauchst du ebenfalls 16 In-oder Outputs. Hinzu kommen die Zahlen für Ki, Kp und Kd, das sind float-Zahlen, die ebenfalls als Int mindestens mit je 16bit dargestellt werden müssen, also nochmal 48 Inputs und sicher auch Outputs, denn als Outputs müssen sie ja korrigiert werden - ggf geht das auch über ein rückgekoppeltes 4-Schicht-Netz (Elman oder Jordan) oder eine "self-organizing map" - die SOMs sind aber um etliches schwerer auf Arduinos zu verwirklichen als Backpropagation Netze.
Verwende doch mal mein Backpropagation Netz als Basis und versuche es so abzuwandeln, dass es PID-Werte lernt und optimiert!
Insgesamt sicher nicht trivial!
- - - Aktualisiert - - -
Auch lernt ein Backpropagation Net keine Optimierung, sondern lernt nur präsentierte Inputs den gewünschten Ziel-Outputs zuzuordnen,
und es wird anschließend neu präsentierte Input-Muster dann entweder bisher gelernten Outputs zuordnen oder aber auch neue, eigene Outputs generieren, die sinnvoll, aber auch völlig sinnlos sein können,
also z.B
gelernt (als bit-Inputs):
1 -> 1
0 -> 1
3 -> 1
4 -> 1
8 -> 1
11 -> 2
10 -> 2
12 -> 2
15 -> 2
17 -> 2
20 -> 3
21 -> 3
22 -> 3
25 -> 3
27 -> 3
und wenn man nun präsentiert: 13 (nicht trainiert)
dann wird vlt als Ergebnis kommen: 2
und als Input: 24 (nicht trainiert)
dann möglicherweise als Output 3
es könnte aber durchaus auch 1 oder 0 als Ergebnis herauskommen.
Weicht das Ergebnis zu stark vom erwarteten Ergebnis ab, muss man es zusätzlich nachtrainieren.
Bei der Objekt-Erkennung auf Fotos oder in Videos wird man dem Netz beim Training z.B. 10000000 Fotos zu je mindestens 1000x1000 16-Graustufen Pixeln (16.000.000 Inputs) mit Fahrrädern, PKWs, LKWs, Menschen, Straßenschildern und Ampeln präsentieren und als Output, ob und wieviele Fahrräder (erste 7bits) , PKWs (zweite 7bits), LKWs (dritte 7bits), Menschen (vierte 7bits) oder Straßenschilder (fünfte 7bits) drauf waren und wo (Bildkoordinaten).
Dann präsentiert man ein Bild mit einem Zug, einer Auto-Schlange und ein paar Motorrädern und einer Schranke, und dann kann man sich überraschen lassen, was es per pixelweiser Bild-Analyse erkennt.
Bild hier
Bild hier
PS,
Man kann solche BP-Netze u.U. auch zur Optimierung von Prozessen verwenden, dazu sind aber noch etliche weitere Prozeduren oder Schritte nötig - möglicherweise wären aber speziell dafür SOMs oder auch Q-Learning Netze besser geeignet.
Lesezeichen