Der Cloud DNNC ist ein Projekt um den PID-Regler aus den am häufigsten auftretenden Regelstrecken abzulösen: Eingrößensysteme mit PT1DT und PT2DT Streckenverhalten (~PTxDT). Da der DNNC keine Parametrierung erfordert (model free), ist er sehr einfach anzuwenden und es ist kein tieferes Wissen über die gegebenen Prozessparameter nötig. Durch die Betrachtung des Prozesses als Blackbox, ist es überhaupt möglich ein Cloud Controller als Service bereitzustellen. Andernfalls bedürfte es ein Modell des Prozesses und daraus abgeleitete Reglerparameter.
Natürlich kommt sofort die Frage nach der Sinnhaftigkeit auf, da die Prozesssicherheit mit der Verfügbarkeit meines Serverdienstes einhergeht. Darum sollte jedem klar sein: Dieser Service ist eine Spielwiese. Gern könnt ihr euren simulierten oder echten Prozess mit dem Controller verbinden und verschiedene Versuche fahren. Eine Serviceverfügbarkeit garantiere ich nicht. Ich würde mich anschließend über eure Erfahrungsberichte freuen, damit ich den Controller weiter optimieren kann.
Das Neuronale Netzwerk wird in der Cloud auf verschiedenen CPU und GPU-Ressourcen permanent optimiert. Ich werde auf dieser Seite über Updates und Verbesserungen des DNNCs informieren.
Mein finales Ziel ist eine Portierung des Netzwerkes auf einen CortexM4 Mikrocontroller. Das „Deep“ in Deep Neural Network ist also durch die Ressourcen eines solchen Mikrocontrollers limitiert. Erst in dieser Entwicklungsstufe ist der Controller sinnvoll einsetzbar.
Folgende Grafik zeigt den geschlossenen Regelkreis:
So einfach, wie es aussieht, ist es tatsächlich auch. Im Grunde erwartet der Service eine HTTP GET Anfrage mit dem Sollwert (Setpoint SP) und dem Istwert (y(t)). Zurückgegeben wird die Stellgröße (u(t)), die auf das Stellglied anzuwenden ist. Damit von Füllstands- bis Temperaturregelung alles abdeckt werden kann, müssen die Ein- und Ausgangsgrößen skaliert und einheitenlos übertragen werden. Die Wertebereiche des DNNCs sind immer von 0 bis 100 % anzuwenden. Selbes Vorgehen ist bei viele Industriecontrollern zu finden.
Prozessbeispiel: Temperaturregelung für Lötofen
Temperaturbereich: 0°C bis 260°C => 0 % = 0°C, 50 % = 130 °C
Stellglied: Triac mit Vollwellensteuerung ( 0 bis 50) => 50 % = 25 Vollwellen
Der DNNC wird einen Stellwert mit vielen Nachkommastellen vorschlagen, jedoch kann dieser in vielen Fällen einfach gerundet werden. Es sollte jedoch nicht so weit getrieben werden, dass der DNNC als Zweipunktregler eingesetzt wird (> 50 % = an, <= 50 % aus); dies kann funktionieren, gibt jedoch schlechte Regelergebnisse.
Gegenüberstellung PID und DNNC:
Wie zu erkennen ist, hat der DNNC gegen ein gut abgestimmten PID-Regler das Nachsehen, jedoch kann er punkten, wenn der Prozess sich ändert und das tun die meisten Prozesse: Filter setzen sich mit Schmutz zu, Vorlauftemperaturen sind unterschiedlich, Füllmengen variieren etc. Die gewählten Parameter im Graphen zeigen gut die Generalisierung des Reglers.
Mit Hilfe des HTTP APIs kann im Prinzip jede Programmiersprache zum Einsatz kommen. Ich stelle ein Python-Script mit einer Klasse zur Verfügung und einem Beispiel um ein Prozesssystem mit Hilfe vom scipy-package zu simulieren:
https://github.com/Counterfeiter/CloudDNNC
Wer einen echten Prozess mit Hardware in the Loop (HIL) ansteuern will, ist herzlich dazu eingeladen. Bitte beachtet die Ping-Zeiten von ca. 70 ms führen zu einer weiteren Totzeit. Auch kam es gelegentlich vor, dass requests einen timeout + retransmit erfahren haben und erst nach vier Sekunden die Antwort vom Server kam. Ich empfehle daher „gemütliche“ Prozesse zu regeln und sekündliche oder weniger Anfragen zu versenden.
Funktion und Verhalten des Reglers
Das Neuronale Netzwerk erhält die Ein- und Ausgangswerte des Prozesssystems als Eingänge und versucht den weiteren Verlauf „abzuschätzen“. Es tastet sich also an die Aufgabe heran und ist demnach einem Regler mit bekanntem Prozessmodel im Hinblick auf Regelgeschwindigkeit unterlegen. Bei variierenden Prozessparametern ist der DNNC klar im Vorteil. Die möglichen Prozessparameter haben jedoch auch ihre Grenzen.
Die Auslegung des DNNC ist eine Kompromiss zwischen der Abdeckung weiterer Prozessparameter oder schnellerem Setpoint-Tracking. Sind bei einem gegeben Prozess die engen Parameter bekannt, könnte problemlos ein „Spezialisten-System“ angelernt werden. Dies geht jedoch auch schon länger mit Matlab-Tools und einigen anderen Systemen.
Wie schon erwähnt, startet der DNNC beim Senden des ersten Stellwertes mit keinem Wissen über den Prozess. Folglich kann er nur einen sehr kleinen Stellwert versuchen, es besteht die Gefahr, dass die Streckenverstärkung sehr hoch ist und die Totzeit groß. Demnach wäre ein großes Überschwingen wahrscheinlich. Nachdem der DNNC nach 4 bis 5 Werten ein „Gefühl“ für die Totzeit des Systems bekommen hat, kann der Stellwert aggressiver geführt werden.
Das Neuronale Netzwerk wird mit Hilfe von Reinforcement Learning in der Amazon (AWS) Cloud traniert. In regelmäßigen Etappen lasse ich mehrere hundert Systeme bewerten und berechne daraus einen Mittelwert. Die Systeme, die eine (abstrakte) Bewertung unter 0 bekommen haben, plotte ich und vergleiche die Streckenparameter.
Ein paar Zahlen, um ein Gefühl für die Bewertungsfunktion zu bekommen:
- Wird der Stellausgang zufällig zwischen 0 und 100 % variiert, ergibt sich ein Bewertung von -835.
- Wenn der Sollwert 0.0 vorgegeben wird und der Controller bei 0.0 u(t) bleibt, kann ein Bestwert von 904 erreicht werden.
- Systeme, die eine große Zeitkonstante und hohe Dämpfung aufweisen, können teils trotz perfektem Kontroller nicht über eine Bewertung von 0 kommen.
Der Grid Score für das aktuell gehostete Netzwerk vom 02.02.2020 ( DNNCv1.0 ) = 319,7:
DNNCv1.0 – Grid Score < 0 Systeme
Totzeiten mit vier Zeitschritten und darüber sollten demnach noch vermieden werden. Optimierungen hierzu sind noch im Gange. Wer bei dem Graphen noch halbwegs durchsieht, stellt fest: Braun und Lila auf dem Weg zum 100 % Sollwert wurden schlecht (< 0.0 ) bewertet, obwohl der Regler nahezu voll aufgesteuert hat. Demnach ist der Bewertungsmaßstab sicherlich verbesserungsbedürftig, aber ausreichend um verschiedene Trainingabläufe zu vergleichen.
Weiterhin sollte bei den Systemen bedacht werden, dass diese schon zu den schwer regelbaren Systemen zählen (Tu/Tg < 1/5) und auch ein abgestimmter PID schon an seine Grenze stößt:
Nur die schlechtesten System anschauen ist auch frustrierend. Hier noch alle System mit einem GridScore von über 500:
DNNCv1.0 – Grid Score > 500 Systeme
Wie man sieht, erreicht kein „Sollwert 100 %“ System diesen Score, aus rein mathematischen/physikalischen Gründen.
Prozess-Controller ohne Parametrierung? Nur die halbe Wahrheit!
In der Tat müssen keine Tuning-Parameter eingestellt werden, jedoch ist eine Skalierung nötig. Dies hat einen entscheidenden Einfluss auf die Stabilität des DNNCs. Die Streckenverstärkung bezieht sich auf den skalierten Bereich. Steht z.B. eine Heizwendel zur Verfügung, die eine Wasserleitung auf 100 °C erhitzen könnte und es geht nur darum eine Rohrleitung eisfrei zu halten (Sollwert ~ 4 °C), wäre es geeigneter den Stellwertbereich des DNNCs (0 bis 100 %) nur auf 10 oder 20 % Leistung der Heizung anzuwenden, um in der stabilen Streckenverstärkung zu bleiben. Andernfalls kann die Prozessstrecke auch von -10 bis 100 °C skaliert werden, dies führt jedoch zu etwas schlechterem Sollwert-Tracking.
Zusätzlich zur Skalierung die Einfluss auf die Streckenverstärkung hat, muss auch das Zeitverhalten betrachtet werden. Kommt die bereits oben angesprochene Begleitheizung (die sicher nicht zum Durchlauferhitzer wird, wie von mir übertrieben dargestellt), erst nach zwei Stunden in den Arbeitsbereich, sollten keine Reglerwerte im Minutentakt vom Server abgefordert werden. Die Totzeit bis sich eine Temperaturänderung am Sensor ergibt, wäre an diesem Beispiel viel höher als vier Zeitschritte.
Damit benötigt der Anwender einen groben Anhaltspunkt über seinen Prozess und vielleicht muss er sogar eine Sprungantwort aufnehmen. Ist der DNNC nur eine Mogelpackung? Das entscheidet letztendlich der Praxiseinsatz! Der DNNC tritt an, um einen sehr weiten Bereich von Prozessparametern auszuregeln, um für möglichst alle Bereiche von Sekunden bis Tagen, von überdimensioniertem bis unterdimensioniertem Aktor Vieles abdecken zu können. Dafür wird eine Skalierung mit etwas Hintergrundwissen über den Prozess nötig.
Ausblick
Der DNNC wird weiterhin von mir optimiert werden und gelegentlich geupdatet. Ich werde wohl in den nächsten Wochen sehen wie stabil mein Webservice läuft, wenn viele Anfragen kommen sollten. Hier fehlt es mir noch an Erfahrungswerten.
In Planung ist schon ein Jupyther-Notebook, dass ein paar Simulationen präsentiert und noch einige Anwender-Wissenslücken schließen soll. Außerdem habe ich noch gar nicht gezeigt, wie robust der DNNC bei 1 % Messrauschen und Lastsprung reagiert usw.
FAQ
Das Kühlwasser unserer Brennstäbe konnte der DNNC leider nicht regeln. Wo kann ich die Kosten, die durch den Super-GAU entstanden sind, einfordern?
Bitte diesen Service auf eigene Verantwortung verwenden und zuvor sinnvolle kritische Abschaltschwellen festlegen.
Mein self balancing robot fällt immer wieder um. Was mache ich falsch?
1. kein PTxDT System – könnte funktionieren, jedoch nicht getestet
2. Die Offline-Version des Reglers wird von mir mit 200 us Rechenzeit auf einem CortexM4 abgeschätzt. Für diese Onlineversion empfehle ich es mit weniger Gravitation zu versuchen.
Ist das Projekt open source?
Nein, der Regler an sich ist nicht open source. Jedoch werde ich einige Randbereiche davon veröffentlichen, z.B. die Simulation von PTxDT Systemen mit Python und später das Gerüst meines Flask Backends. Somit bleibt es auch für Hobbyisten weiterhin interessant.
Kann der DNNC auch nach der Stellenergie optimiert werden?
Derzeit gibt es meinerseits keine Bestrebungen dahingehend. Evtl. kann man einen zusätzlichen Tiefpassfilter zwischen Ausgang DNNC und Aktor einbringen, der jedoch die Regelgüte senken wird.