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:


DasInvertiertePendel

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:



Das Reglungsprinzip

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 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

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

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

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 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

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



<<