本文主要是介绍用庞特里亚金极小值原理求解二阶系统的最优控制问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
庞特里亚金极小值原理
庞特里亚金极小值原理是在控制向量u(t)受限制的情况下,使得目标函数J取极小,从而求解最优控制问题的原理和方法,又称极大值原理。λ是协态向量,系统模型有多少个变量就有多少个协态。s和u都是省略了符号t的,代表某一时刻的最优状态和最优控制,是一个常数。利用庞特里亚金极小值原理求解最优控制问题首先需要求解协态方程,也就是λ,然后再求解最优控制u*,求解完u*之后,即可得到最优状态。
下面以一个简单的二阶系统为例,简单说明如何用庞特里亚金极小值原理求解二阶系统的最优控制问题。
1. 问题描述
二阶系统的状态s为: s = [ x x ˙ ] s = \left[ \begin{array} { l } { x } \\ { \dot { x } } \end{array} \right] s=[xx˙],控制量u为: u = [ x ¨ ] u = [ \ddot { x } ] u=[x¨],可以将状态s想象成x方向的位移以及x方向上的速度,将控制量u想象成x方向上的加速度,通过输入控制量来改变系统的状态。将问题定义为:试求控制u,将系统在t=2时转移到零态,并使得J取极小值。
系统模型为:
s ˙ = [ 0 1 0 0 ] s + [ 0 1 ] u = [ 0 1 0 0 ] [ x x ˙ ] + [ 0 1 ] x ¨ \begin{aligned} \dot { s } & = \left[ \begin{array} { l l } { 0 } & { 1 } \\ { 0 } & { 0 } \end{array} \right] s + \left[ \begin{array} { l } { 0 } \\ { 1 } \end{array} \right] u = \left[ \begin{array} { l l } { 0 } & { 1 } \\ { 0 } & { 0 } \end{array} \right] \left[ \begin{array} { l } { x } \\ \dot { x } \end{array} \right] + \left[ \begin{array} { l } { 0 } \\ { 1 } \end{array} \right] \ddot { x } \end{aligned} s˙=[0010]s+[01]u=[0010][xx˙]+[01]x¨
目标函数为:
J = 1 2 ∫ 0 2 u 2 d t J = \frac { 1 } { 2 } \int _ { 0 } ^ { 2 } u ^ { 2 } d t J=21∫02u2dt
2. 求解协态方程
根据庞特里亚金极小值原理中的:
λ ˙ ( t ) = − ∇ s H ( s ∗ ( t ) , u ∗ ( t ) , λ ( t ) ) \dot { \lambda } ( t ) = - \nabla _ { s } H \left( s ^ { * } ( t ) , u ^ { * } ( t ) , \lambda ( t ) \right) λ˙(t)=−∇sH(s∗(t),u∗(t),λ(t))
先写出哈密顿函数,然后根据哈密顿函数列出协态方程,并求解。
哈密顿函数为:
H = 1 2 u 2 + λ 1 s 2 + λ 2 u H = \frac { 1 } { 2 } u ^ { 2 } + \lambda _ { 1 } s_ { 2 } + \lambda _ { 2 } u H=21u2+λ1s2+λ2u
两个λ分别乘上对应的系统模型 s ˙ \dot { s } s˙中的两个元素s2和u,其中s2就代表s的第二行的元素(同时也是 s ˙ \dot { s } s˙中第一行的元素),也就是x方向的速度。u即为控制量(同时也是 s ˙ \dot { s } s˙中第二行的元素),这样就得到了哈密顿函数。
将哈密顿函数分别对s1和s2(状态矩阵 s {s} s中的元素)求导,并将s和u这两个常量代入可得协态方程:
λ ˙ 1 ( t ) = − ∂ H ∂ s 1 = 0 ⇒ λ 1 ( t ) = a 1 \dot { \lambda } _ { 1 } ( t ) = - \frac { \partial H } { \partial s _ { 1 } } = 0 \quad \Rightarrow \lambda _ { 1 } ( t ) = a _ { 1 } λ˙1(t)=−∂s1∂H=0⇒λ1(t)=a1
λ ˙ 2 ( t ) = − ∂ H ∂ s 2 = − λ 1 ( t ) ⇒ λ 2 ( t ) = − a 1 t + a 2 \dot { \lambda } _ { 2 } ( t ) = - \frac { \partial H } { \partial s _ { 2 } } = - \lambda _ { 1 } ( t ) \Rightarrow \lambda _ { 2 } ( t ) = - a _ { 1 } t + a _ { 2 } λ˙2(t)=−∂s2∂H=−λ1(t)⇒λ2(t)=−a1t+a2
通过求解上述的微分方程即可求得λ。
3. 求解最优控制
根据庞特里亚金极小值原理中的:
u ∗ ( t ) = arg min u ( t ) H ( s ∗ ( t ) , u ( t ) , λ ( t ) ) u ^ { * } ( t ) = \arg \min _ { u ( t ) } H \left( s ^ { * } ( t ) , u ( t ) , \lambda ( t ) \right) u∗(t)=argu(t)minH(s∗(t),u(t),λ(t))
最优的u*的选取是,当哈密顿函数中的s取最优时,能够使得哈密顿函数最小的那个u即为最优控制量。令导数等于0即可:
∂ H ∂ u = u + λ 2 = 0 ⇒ u = − λ 2 = a 1 t − a 2 \frac { \partial H } { \partial u } = u + \lambda _ { 2 } = 0 \quad \Rightarrow u = - \lambda _ { 2 } = a _ { 1 } t - a _ { 2 } ∂u∂H=u+λ2=0⇒u=−λ2=a1t−a2
求得u的表达式之后,对u进行两次积分可以得到s1和s2(状态矩阵 s {s} s中的元素):
s 1 = 1 6 a 1 t 3 − 1 2 a 2 t 2 + a 3 t + a 4 s 2 = 1 2 a 1 t 2 − a 2 t + a 3 \begin{array} { l } {s _ { 1 } = \frac { 1 } { 6 } a _ { 1 } t ^ { 3 } - \frac { 1 } { 2 } a _ { 2 } t ^ { 2 } + a _ { 3 } t + a _ { 4 } } \\ { s _ { 2 } = \frac { 1 } { 2 } a _ { 1 } t ^ { 2 } - a _ { 2 } t + a _ { 3 } } \end{array} s1=61a1t3−21a2t2+a3t+a4s2=21a1t2−a2t+a3
将初始条件和终端条件代入可求得:
u ∗ ( t ) = 9 2 t − 5 u ^ { * } ( t ) = \frac { 9 } { 2 } t - 5 u∗(t)=29t−5
这篇关于用庞特里亚金极小值原理求解二阶系统的最优控制问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!