用庞特里亚金极小值原理求解二阶系统的最优控制问题

本文主要是介绍用庞特里亚金极小值原理求解二阶系统的最优控制问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

庞特里亚金极小值原理
1
庞特里亚金极小值原理是在控制向量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=2102u2dt

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)=s1H=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)=s2H=λ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 } uH=u+λ2=0u=λ2=a1ta2
求得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=61a1t321a2t2+a3t+a4s2=21a1t2a2t+a3

将初始条件和终端条件代入可求得:
u ∗ ( t ) = 9 2 t − 5 u ^ { * } ( t ) = \frac { 9 } { 2 } t - 5 u(t)=29t5

这篇关于用庞特里亚金极小值原理求解二阶系统的最优控制问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_43795921/article/details/102754720
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/179977

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码