Das Invertierte Pendel
Erstellt von Uwe Schneider
August bis September 2000
Das Problem
Die Ausführung
Systemumgebung
Die Fuzzy-Regelung
Fuzzyfizierung
Unscharfes Schließen
Defuzzyfizierung
Neuberechnung des Systemzustands
Die Neuro-Regelung
Das Neuronale Netz
Der Genetische Trainingsalgorithmus
Die Bedienoberfläche
Das Programmverhalten
Schlußbetrachtungen
Download
Kontakt
Das Problem
Das Invertierte Pendel besteht aus einem Wagen, der einen beweglich gelagerten Stab trägt. Der Stab besitzt nur einen Freiheitsgrad, kann sich also nur entlang einer Kreisbahn, die in der Bildebene liegt, bewegen. Analog ist der Wagen nur in horizontaler Richtung, im Bild von links nach rechts, verschiebbar.
Das Ziel besteht darin, den Stab in der Vertikalen zu halten, indem eine Kraft den Wagen in einer der beiden möglichen Richtungen beschleunigt. Damit die Simulation immer in Bewegung bleibt, wird der Stab in kurzen Zeitabständen angestoßen. Die Abbildung zeigt das Pendel mit allen relevanten physikalischen Größen:
Das Invertierte Pendel
Die Symbole bedeuten im einzelnen:
Das Verhalten des Pendels wird durch die beiden folgenden Differentialgleichungen zweiter Ordnung vollständig beschrieben:
Diese Gleichungen sind bereits vereinfacht, auf die Herleitung soll hier nicht im einzelnen
eingegangen werden. Zu Beginn wird dem Stab eine geringe positive Auslenkung mitgegeben,
um das Pendel in Bewegung zu bringen. Die Winkelgeschwindigkeit des Stabes, sowie Geschwindigkeit und Position des Wagens sind noch 0.
Regelungstechnisch stellt sich das Problem folgendermaßen dar:
Die Pendelreglung
Die vier Eingangsgrößen x-Koordinate des Wagens, Wagengeschwindigkeit, Auslenkung sowie Winkelgeschwindigkeit des Stabes werden dem Regler als Input zugeführt. Dieser ermittelt die benötigte Ausgleichskraft. Unter der Annahme, daß die errechnete Kraft über ein kurzes Zeitintervall auf den Wagen wirkt, wird anschließend der Zustands des Systems neu ermittelt.
<<
Die Ausführung
Für die technische Realisierung des Reglers gibt es formal natürlich keine Einschränkungen, hier soll jedoch wahlweise ein Fuzzy-Regler und ein Neuroregler zum Einsatz kommen.
Das Programm wurde auf einem Rechner mit einem Pentium-Prozessor mit 166 MHz
Taktfrequenz entwickelt. Zu Beginn der Entwicklung stellte sich heraus, daß der
Prozessor bereits mit der Animation stark beansprucht war. Damit die rechenintensiven
Routinen des Fuzzy-Reglers das System nicht überfordern, habe ich entschieden, von den vier potentiellen Eingangsgrößen nur die Wagengeschwindigkeit, den Winkel und die
Winkelgeschwindigkeit zu verarbeiten. Die Wagenposition wäre ohnehin nur erforderlich, um den Wagen zurück in die Mittellage zu bringen. Ich beschränke mich darauf, den Wagen nach dem Ausbalancieren zum Stillstand zu bringen. Da der Darstellungsbereich unendlich ist (wenn der Wagen auf einer Seite herausfährt, kommt er auf der anderen wieder herein), ergibt sich daraus kein Mangel.
Die angepaßte Reglung
<<
Die Systemumgebung
Das Invertierte Pendel wurde unter dem Betriebssystem Windows NT 4.0 (Service Pack 4)
mit den Mitteln der MFC unter Visual C++ 6.0 entwickelt und läuft dort stabil. Ich habe das Programm auch unter Windows 98 getestet. Dort lief es allerdings nur eine oder zwei Minuten, um mir dann mitzuteilen, daß "eine Ressource" nicht zur Verfügung steht, natürlich ohne zu verraten, um welche es sich handelt. Ich habe keine weitere Zeit darauf verwandt und mich auf Windows NT beschränkt.
<<
Die Fuzzy-Regelung
Hier nun eine Prinzipskizze des Fuzzy-Reglers.
Funktionsweise des Fuzzy-Reglers
Auf die theoretische Funktionsweise soll nicht näher eingegangen werden. Im folgenden wird die Struktur der Fuzzy-Mengen qualitativ und quantitativ erläutert.
<<
Fuzzyfizierung
Alle Fuzzymengen sind haben symmetrische Dreiecksform und je sieben Ausprägungen.
Die Zugehörigkeiten der Eingangsgrößen werden bestimmt und akkumuliert.
| Ausprägung |
NB |
NM |
NS |
ZE |
PS |
PM |
PB |
| Obergrenze |
-40 |
-20 |
0 |
4 |
30 |
50 |
359 |
| Untergrenze |
-359 |
-50 |
-30 |
-4 |
0 |
20 |
40 |
Tabelle1 Winkel in Grad
| Ausprägung |
NB |
NM |
NS |
ZE |
PS |
PM |
PB |
| Obergrenze |
-2.0 |
-1.5 |
0.2 |
0.4 |
2.0 |
3.0 |
6.0 |
| Untergrenze |
-6.0 |
-3.0 |
-2.0 |
-0.4 |
0.2 |
1.5 |
2.0 |
Tabelle2 Winkelgeschwindigkeit in rad/s
| Ausprägung |
NB |
NM |
NS |
ZE |
PS |
PM |
PB |
| Obergrenze |
-3.0 |
-2.0 |
0 |
0 |
3.0 |
5.0 |
50.0 |
| Untergrenze |
-50.0 |
-5.0 |
-3.0 |
0 |
0 |
2.0 |
3.0 |
Tabelle3 Wagengeschwindigkeit in m/s
| Ausprägung |
NB |
NM |
NS |
ZE |
PS |
PM |
PB |
| Obergrenze |
-50 |
-5 |
-0.05 |
0.2 |
20 |
60 |
200 |
| Untergrenze |
-200 |
-60 |
-20 |
-0.2 |
0.05 |
5 |
50 |
Tabelle4 Kraft in Newton
Die Grenzen und Überlappungen besonders im Bereich um ZE haben sich als kritisch erwiesen
und konnten nur durch Ausprobieren ermittelt werden.
<<
Unscharfes Schließen
Die Regeln für das unscharfe Schließen lauten folgendermaßen:
| Winkel |
Winkelgeschwindigkeit |
Kraft |
| ZE |
ZE |
ZE |
| NS |
ZE |
NM |
| PS |
ZE |
PM |
| NS |
NS |
NB |
| PS |
PS |
PB |
| NM |
NM |
NB |
| PM |
PM |
PB |
| PS |
NS |
PB |
| NS |
PS |
NB |
| NM |
NM |
NM |
Tabelle5 Regeln Winkel, Winkelgeschwindigkeit
Um die Anzahl der Regeln zu reduzieren, habe ich die Wagengeschwindigkeit getrennt behandelt. Das hat den vorteilhaften Nebeneffekt, dass die fehlende Eingangsgröße Wagenposition kompensiert werden kann.
| Wagenschwindigkeit |
Kraft |
| ZE |
ZE |
| PS |
PB |
| NS |
NB |
| PM |
PM |
| NM |
NM |
| NB |
PB |
| NB |
NB |
Tabelle6 Regeln Wagengeschwindigkeit
Natürlich ist das ein Kompromiß mit Informationsverlust, der bei anderen Anwendungen tödlich sein könnte. Hier hat es aber ganz gut funktioniert.
Die resultierenden Werte für die Kraft werden mit Hilfe dieser Regeln berechnet, aufsummiert und zu denen der ersten Regelgruppe hinzugefügt.
Es kommt die Max-Min-Strategie zur Anwendung.
<<
Defuzzyfizierung
Die Kompensationskraft wird nach der Methode der gewichteten Zugehörigkeit der Ergebnismengen ermittelt:
Dies ist eine vereinfachte Variante zur Methode des Flächenschwerpunkts, die hier aber ausreichend gute Genauigkeit liefert.
<<
Neuberechnung des Systemzustands
Die Kraftwirkung erfolgt zeitlos, das Pendel geht trägheitslos in den neuen Systemzustand über. Deshalb kann eigentlich nur
eine grobe Näherung der tatsächlichen Verhältnisse erreicht werden, was hier aber als ausreichend angenommen wird.
Die Neuberechnung erfolgt nach jeweils nach einem Intervall von ca. 20ms.
<<
Die Neuro-Regelung
Der Neuro-Regler soll aus denselben Eingangsdaten, die auch der Fuzzy-Regler erhält, nach Möglichkeit dieselben Ausgangswerte berechnen. Diese Fähigkeit muß dem Neuronalen Netz des Reglers zuvor bei einem entsprechenden Training beigebracht werden.
Als Sollausgangsdaten werden naturgemäß die des Fuzzy-Reglers verwendet. Zunächst soll die Struktur des Neuronalen Netzes vorgestellt werden.
<<
Das Neuronale Netz
Das Neuronale Netz ist ein Feedforward-Netz mit zwei Hiddenschichten zu je vier Neuronen. Jedes Neuron ist mit jedem Neuron der vorhergehenden und nachfolgenden Schicht verbunden.
Struktur des Neuronalen Netzes
Die Netzstruktur ist einigermaßen willkürlich gewählt und hat sich als leistungsfähig erwiesen. Weitere Neuronen in den Hiddenschichten brachten außer höherem Rechenaufwand keine besseren Leistungen.
Als Aktivierungsfunktion jedes einzelnen Neurons dient der Tangenshyperbolicus.
Wie wird nun aber das Neuronale Netz trainiert?
<<
Der Genetische Trainingsalgorithmus
Im Gegensatz zu den herkömmlichen Trainingsalgorithmen benutze ich hier einen genetischen Algorithmus. Dieser funktioniert wie folgt:
Es existiert zu jeder Zeit eine Population von 10 Netzen, die miteinander konkurrieren. Da die Netzstruktur unveränderlich ist, enthält das Chromosom jedes Netzes nur seinen variablen Teil, also die Gewichtsmatrizen in codierter Form. Zu Beginn sind die Gewichte aller Netze und damit die Chromosomen zufällig eingestellt. Jedes Netz verfügt damit über eine Übertragungsfunktion, die mehr oder weniger gut geeignet ist, das Invertierte Pendel zu balancieren.
Zunächst muß nun die "Eignung" jedes Netzes festgestellt und in geeigneter Form, der Fitness, zahlenmäßig erfaßt werden.
Dazu stehen 800 Trainingsdatensätze, die mit Hilfe des Fuzzy-Reglers generiert wurden, zur Verfügung. Jeder Datensatz wird nacheinander an jedes Netz angelegt und der quadratische Fehler je Netz aufsummiert.
Der Genetische Algorithmus
Aus den Ergebnissen wird ein Ranking der Individuen (der Netze) aufgestellt, der geringste
Netzfehler kennzeichnet das beste Netz der größte das schlechteste. Anschließend werden die vier schlechtesten Individuen durch die vier besten überschrieben.
Die Bewertung der Individuen, das Ranking
Die beiden besten werden in unveränderter Form aufgehoben, alle anderen mit einer Mutationswahrscheinlichkeit von 3 Prozent mutiert und einmal paarweise miteinander gekreuzt. Auf diese Weise ist sichergestellt, daß einmal aufgetauchte ausgezeichnete Individuen erhalten bleiben und ausschließlich durch bessere ersetzt werden, sofern die Evolution welche hervorbringt.
Die Kreuzung und Mutation
Danach beginnt der Algorithmus von vorn. Eine Trainingsrunde umfaßt 50 Generationen.
Nach der letzten Runde wird das beste Individuum geladen und der Regler ist einsatzbereit.
Die Einschränkungen des Fuzzy-Reglers bezüglich der reduzierten Eingangsgrößen übertragen sich natürlich auch auf den Neuro-Regler.
Die Anzahl der Trainingsdatensätze ist entscheidend für die Qualität des Neuro-Reglers. Verwendet man signifikant weniger als 800, beispielsweise nur 500, steigt der quadratische Netzfehler bei gleicher Generationenanzahl an und der Regler wird unter Umständen unbrauchbar. Dies läßt sich auch nicht wirkungsvoll durch Erhöhung der Trainingsrunden kompensieren. Der einzige Schluß, der sich daraus ziehen läßt ist: Erfahrung ist durch nichts zu ersetzen!
<<
Die Bedienoberfläche
Hier nun eine kurze Erklärung der Elemente der Bedienelemente:
Die Bedienoberfläche
Mit dem Button "Anhalten" kann die Animation gestoppt werden, ohne das Programm zu beenden. Dies ist nützlich auf weniger
leistungsfähigen Maschinen. Die Knöpfe "Zurücksetzen" und "Anstoßen" werden dadurch mitblockiert. Durch Anklicken von
"Fortsetzen" kann die Animation wieder freigegeben werden. Das Anstoßen des Pendels geschieht periodisch nach einigen
Sekunden automatisch, kann aber auch mit dem Knopf "Anstoßen" ausgelöst werden. Die Auslenkung beträgt ungefähr 25 Grad.
Mit dem Button "Fuzzy/Neuro" wird zwischen Fuzzy- und Neuro-Reglung umgeschaltet. Die Titelleiste zeigt die jeweilige Auswahl
an. Zu Programmbeginn ist der Neuroregler untrainiert, würde also das Pendel zu unkontrolliertem Verhalten veranlassen.
Der Knopf "Zurücksetzen" stellt die Ausgangslage in der Bildmitte wieder her.
Mit der Schaltfläche "Trainiere Netz" wird der Trainingsalgorithmus für das Netz gestartet. Da dieser Vorgang sehr rechenintensiv
ist, erfolgen während des Trainings keine Bildschirm-Updates.
Das trainierte Netz kann wieder in einen untrainierten Zustand versetzt werden, in dem Gewichte "Init" angeklickt wird.
Das ist auch hilfreich, wenn eine ungünstige Initialisierung die Konvergenz stark behindert. Ein Zurücksetzen und Neutrainieren
kann dann den Trainingserfolg begünstigen.
Auf Konfigurationsdialoge wurde verzichtet.
<<
Das Programmverhalten
Das Programm ist so konzipiert, daß sich der Neuro-Regler zu Programmbeginn immer in untrainiertem Zustand befindet, um die Wirksamkeit des genetischen Agorithmusses zu zeigen. Deshalb werden die Gewichtsmatrizen auch nicht abgespeichert. Es muß also
nach jedem Neustart neu trainiert werden. Deshalb wurde der oben erwähnte "Anhalten"-Knopf eingebaut, um den Rechner entlasten zu können, ohne das Programm beenden zu müssen.
Der Fuzzy-Regler hält im allgemeinen den Stab zuverlässig in der Senkrechten. Man kann ihn jedoch unter Umständen durch mehrfaches kurzaufeinanderfolgendes manuelles Anstoßen aus dem Gleichgewicht bringen. Dies ist beim Neuro-Regler nach entsprechendem
Training mit ausreichend geringem Netzfehler nicht mehr möglich. Das Training umfaßt, wie bereits erwähnt, 50 Generationen, es kann jedoch immer wieder nachtrainiert werden. Nach jedem Lauf erscheint ein Fenster, das den quadratischen Netzfehler des besten Exemplars anzeigt. Dieser Fehler liegt anfänglich in der Regel zwischen 700 000 und 1 Mio oder etwas darüber. Brauchbare Regeleigenschaften sind im allgemeinen unterhalb von Werten von 800 000 zu erwarten. Nach mehreren Trainingsläufen nähert sichder Fehler 500 000 an, verringert sich aber dann nur noch deutlich langsamer. Bereits ab 600 000 hat der Neuro-Regler jedoch schon ein besseres Regelverhalten als der Fuzzy-Regler.
Ein Trainingslauf dauerte auf dem Pentium-166-Prozessor etwa 4 Minuten, auf einem Pentium-II 350 etwas unter einer Minute. Das Verfahren ist somit erheblich schneller als herkömmliche Trainingsmethoden für neuronale Netze, allerdings kann eine ungünstige Initialisierung mehrere Trainingsläufe erfordern. Bemerkenswert ist, daß der große Restfehler vom Netz großzügig toleriert wird. Befindet sich die Animation im angehaltenen Zustand und wird nach Verdecken durch andere Programmfenster wieder sichtbar gemacht, ist die Darstellungsfläche leer. Das Pendel erscheint jedoch nach Fortsetzen der Animation wieder.
<<
Schlußbetrachtungen
Trotzdem die Simulation gut funktioniert, sind natürlich noch einige Verbesserungsmöglichkeiten denkbar. So wäre beispielsweise zu prüfen, ob eine größere Population (z.B. 20 Individuen) eine schnellere Konvergenz ermöglicht oder vielleicht der höhere Rechenaufwand diese wieder egalisiert. Auch könnte man mit anderen Netzstrukturen experimentieren, die jetzt eingesetzte ist
willkürlich ausgewählt. Da mittlerweile bessere Hardware zur Verfügung steht, könnte die ausgesparte Wagenkoordinate als Eingabewert hinzugefügt und alle anderen Komponenten einschließlich des Neuro-Reglers angepaßt werden. Dies ist aber nicht mehr Bestandteil dieser Arbeit.
<<
Download
Download des Pendels für Windows NT : Pendel.zip
Kontakt
Zum Thema Invertiertes Pendel eine E-mail an:
Uwe Schneider
<<