Optimal control: Planungsprobleme
Problemstellung
Ein System erhält in gewissem Rahmen frei zu wählende Steuerungsinputs und soll in einen vordefinierten Zustand gebracht werden oder eine bestimmte Verlaufstrajektorie nachvollziehen. In dieser völligen Generalität ist das Problem jedoch nur schwer zu handhaben.
Verkomplizierende Faktoren wie Nichtlinearitäten, unbekannte Systemdynamik, und Zufälligkeiten in den Wechselwirkungen zwischen Steuerungsinput und Systemreaktion können das Problem sogar zu einer komplett unlösbaren Angelegenheit werden lassen.
Im simpelsten Fall kompletter Vorhersagbarkeit des Systemes jedoch handelt es sich um ein statisches Planungsproblem und eine Lösung kann auf die Suche einer Sequenz von Steuerungsinputs reduziert werden. Diese Suche kann mit Hilfe dedizierter Suchalgorithmen wie der Monte-Carlo-Tree-Search durchgeführt werden oder sie wird als Optimierungsproblem formuliert, in welchem die Systemdynamik die Rolle von Nebenbedingungen einnimmt.
Mathematisches Modell
Hängt der Zustand \(x_{k+1}\) zum Zeitpunkt \(k+1\) linear ab vom vorherigen Zustand \(x_k\) und dem Steuerungsinput \(u_k\), so lässt sich die Systemdynamik schreiben als
$$x_{k+1}=Ax_k+Bu_k $$
wobei \(x_{k+1}, x_k \in \mathbb{R}^d, u_k\in \mathbb{R}^m\) typischerweise mehrdimensionale Vektoren sind. \(A\) und \(B\) sind Systemmatrizen, die den Einfluss von Zustand und Steuerungssignal auf den zukünftigen Zustand codieren. Soll das System so gesteuert werden, dass es einer Trajektorie \(f_1, …, f_n \in \mathbb{R}^d\) folgt bei möglichst kleinem Steuerungsinput, so kann das formuliert werden als das Optimierungsproblem
$$ \begin{align} \min_{x_1, …, x_n, u_1, …, u_n} ~~~& \sum_{k=1}^n \|x_k-f_k\|_1+\|u_k\| \\ \text{s.t.} ~~~&x_{k+1}=Ax_k+Bu_k~~~ k=1, …, n \\ ~~~& x_1=x_{start} \end{align}$$
wobei \(x_1\) als Startzustand \(x_{start}\) festgelegt sei. Die Optimierungsvariablen sind die \(n\) Steuerungsinputs \(u_1, …, n_n\) und die durch die dynamischen constraints beschränkten Zustände \(x_1, …, x_n\). Es handelt sich um ein Optimierungsproblem mit \(nd+nm\) Variablen.
Es kann reformuliert werden als lineares Programm mit der Zielfunktion \(\|x‑f\|_1+\|u\|_1=\|v^{\Delta}\|_1+\|v^u\|_1\) wobei \(x=[x_1^T, …, x_n^T]^T\) und \(u=[u_1^T, …, u_n^T]^T\) mit \(v^{\Delta} \in \mathbb{R}^{nd}\) und \(v^u\in \mathbb{R}^{nm}\) den Vektoren der Absolutbeträge der Elemente von \(x‑f\) und \(u\).
$$ \begin{align} \min_{x_1, …, x_n, u_1, …, u_n, v^{\Delta}, v^u} ~~~& \sum_{k=1}^n\sum_{l=1}^d v^{\Delta}_{kl}+ \sum_{k=1}^n \sum_{l=1}^m v^u_{kl} \\ \text{s.t.} ~~~&x_{k+1}=Ax_k+Bu_k~~~ k=1, …, n \\ ~~~& v^{\Delta} \ge x‑f ~~~ v^{\Delta}\ge -(x‑f) \\ ~~~& v^u\ge u ~~~~~~~~~~~ v^u \ge ‑u \end{align}$$
Die erste Ungleichung repräsentiert die Dynamik des Systemes während die letzten zwei Paare von die Positivität der Absolutresiduen \(v^{\Delta}\) und \(v^u\) sicherstellen [1, p. 294].
Beispiel: Antriebssteuerung
Eine Drohne sei so zu steuern, dass sie von ihrer jetzigen 3‑dimensionalen Position \(pos_1=[x_{start}, y_{start}, z_{start}]\) aus innerhalb von \(n\) Zeitschritten an der Zielposition \(pos_n=[x_{Ziel}, y_{Ziel}, z_{Ziel}]\) mit einer Gewschwindigkeit von \(v_n=[v^x_{Ziel}, v^y_{Ziel}, v^z_{Ziel}]\) eintrifft. Das (möglichst klein zu haltende) Steuerungssignal \(u\) wird direkt in Beschleunigung übersetzt, sodass der Zusammenhang
$$x_{k+1}= \begin{bmatrix} pos_{k+1} \\ v_{k+1} \\ a_{k+1}\end{bmatrix} = \underbrace{\begin{bmatrix} I & \Delta t I & 0 \\ 0 & I & \Delta tI \\ 0 & 0 & \Delta t I\end{bmatrix}}_{A} \underbrace{\begin{bmatrix} pos_k \\ v_k \\ a_k\end{bmatrix}}_{x_k}+\underbrace{\begin{bmatrix} 0 \\ 0 \\ \Delta t I \end{bmatrix}}_{B} \underbrace{\begin{bmatrix}u_x \\ u_y\\ u_z\end{bmatrix}}_{u_k}$$
gilt. Dabei ist \(I\) die \(3 \times 3\) Einheitsmatrix, \(\Delta t\) die Länge eines Zeitschrittes, \(pos\) steht für die Position, \(v\) für Geschwindigkeiten, und \(a\) für Beschleunigungen. Jeder Zustandsvektor weist demnach 9 Komponenten auf.
Lösung und Praktisches
Das zugehörige Optimierungsproblem ist
$$ \begin{align} \min_{x_1, …, x_n, u_1, …, u_n}
~~~& \sum_{k=1}^n\|u_k\|_1 \\ \text{s.t.} ~~~&x_{k+1}=Ax_k+Bu_k~~~ k=1,
…, n \\ ~~~& pos_1=[x_{Start}, y_{Start}, z_{Start}]^T ~~~~pos_n=[x_{Ziel}, y_{Ziel}, z_{Ziel}]^T \\~~~& v_1=[v^x_{Start}, v^y_{Start}, v^z_{Start}]^T ~~~~~~~~~~~~v_n=[v^x_{Ziel}, v^y_{Ziel}, v^z_{Ziel}]^T\\ ~~~& u_{min}\le u_k \le u_{max} ~~~k=1, …,n .\end{align}$$
Eine Illustration des Problemes bedindet sich in der nachfolgenden Abbildung. Man beachte, dass letztendliche Steuerungsinputs und Trajektorie signifikant von den Startbedingungen und möglichen Steuerungsinputbeschränkungen abhängen.
Das Problem wird mit hilfe der frei verfügbaren Software CVXOPT [2] und CVXPY [3] auf einem handelüblichen Laptop innerhalb weniger Millisekunden gelöst. Es existieren diverse Erweiterung. Die Zielfunktion enthält üblicherweise quadratische Terme und es ist möglich, Unsicherheiten in Systemdynamik und Umwelt durch zufällige Grössen zu Modellieren. Dies führt auf die linear-quadratisch Gausschen Zustandsregler (LQG) [4, pp. 164–207]. Um komplexe Optimierungen zu vermeiden wird häufig gefordert, dass \(u\) direkt als Funktion von \(x\) darstellbar sei mit \(u=Kx\) und einer konstanten Matrix \(K\); siehe z.B. [5, pp. 421–441].
Code & Quellen
Beispielcode: OC_vehicle_control_3.py in unserem Tutorialfolder.
[1] Boyd, S., & Vandenberghe, L. (2004). Convex Optimization. Cambridge: Cambridge University Press.
[2] Andersen, M. S., , Dahl, J., & Vandenberghe, L. (2022) . CVXOPT: A Python package for convex optimization, version 1.3
[3] Diamond S., & Boyd S., (2016). CVXPY: A Python-embedded modeling language for convex optimization. Journal of Machine Learning Research, 17(83), 1–5.
[4] Anderson, B. D. O., & Moore, J. B. (2007). Optimal Control: Linear Quadratic Methods. New York: Courier Corporation.
[5] Wolkowicz, H., Saigal, R., & Vandenberghe, L. (2012). Handbook of Semidefinite Programming: Theory, Algorithms, and Applications. Berlin Heidelberg: Springer Science & Business Media.