第二节 最优控制理论基础:变分法、庞特里亚金极小值原理、动态规划
各位同学,今天我们聊最优控制的理论基础。说实话,这三个工具——变分法、庞特里亚金极小值原理、动态规划——是搞制导控制绕不开的三座山。我当年刚接触时也觉得头大,但后来在项目中用多了,发现它们其实各有各的脾气。
一、变分法:从“找极值”到“找轨迹”
变分法解决什么问题?说白了,就是找一条最优的路径。普通微积分找的是函数在某点的极值,变分法找的是泛函——也就是“函数的函数”——的极值。
举个例子。你想想看,导弹从A点到B点,怎么飞最省燃料?这不是一个点的问题,而是一条完整轨迹的问题。变分法就是干这个的。
核心公式:欧拉-拉格朗日方程
∂L/∂x - d/dt(∂L/∂ẋ) = 0
其中L是拉格朗日函数,x是状态变量,ẋ是状态导数。
我在项目中遇到过一件事。有一次做某型导弹的末端制导律设计,用变分法推导最优攻角剖面。结果发现,如果忽略终端约束条件,算出来的轨迹根本飞不到目标点。嗯,这里要注意:变分法处理的是无约束或等式约束问题,碰到不等式约束就不好使了。
二、庞特里亚金极小值原理:带约束的“硬核”工具
庞特里亚金极小值原理(PMP)是变分法的升级版。它最大的优势是能处理控制量有界的情况——比如导弹的舵面偏转角不能超过±30°,发动机推力不能无限大。
我个人习惯把PMP看作一个“三件套”:
- 状态方程:ẋ = f(x, u, t),描述系统动态
- 协态方程:λ̇ = -∂H/∂x,描述“代价的传播”
- 极小值条件:u* = argmin H(x, λ, u, t),控制量让哈密顿函数取极小
避坑指南:我曾经在仿真中把协态方程的符号搞反了,结果算出来的控制量是“极大值”而不是“极小值”。检查了三天才发现问题。记住:PMP是极小值原理,不是极大值!
哈密顿函数H的定义是:
H = L(x, u, t) + λᵀ·f(x, u, t)
为什么叫“极小值原理”?因为最优控制u*必须让H取全局极小值。这在多导弹协同中特别有用——比如多枚导弹同时攻击,每枚导弹的控制量都受限制,PMP能给出严格的数学条件。
三、动态规划:从“全局最优”到“递推求解”
动态规划是贝尔曼搞出来的。它的核心思想就一句话:最优策略的子策略也是最优的。这叫“最优性原理”。
你想想看,如果导弹从当前位置到目标的最优轨迹已经确定,那么从这条轨迹上任意一点到目标的那一段,也一定是最优的。否则,整条轨迹就不是最优的。
贝尔曼方程(连续时间形式):
-∂V/∂t = min_u { L(x, u, t) + (∂V/∂x)ᵀ·f(x, u, t) }
其中V是值函数,代表从当前状态到目标的最小代价。
动态规划的好处是能处理非线性、非高斯的问题。但代价是什么?维数灾难。状态变量每增加一维,计算量指数增长。我记得有一次做三维空间的协同制导,状态变量有6个,直接算动态规划,服务器跑了三天没出结果。
注意:动态规划在实际工程中通常需要近似处理。比如用神经网络拟合值函数V,或者用滚动时域控制(RHC)只算未来一小段。
四、三者的关系与选择
这三个工具不是互相替代的,而是各有适用场景。我画了一张图帮大家理解:
我个人在实际项目中的经验是:
- 如果问题简单、约束少,用变分法快速得到解析解
- 如果控制量有界、需要严格最优,上庞特里亚金极小值原理
- 如果系统非线性强、状态维度低,动态规划是首选
在多导弹协同中,最常用的是PMP。为什么?因为每枚导弹的舵面、推力都有物理限制,而且协同时间约束往往是不等式约束。PMP处理这些最拿手。
一个小技巧:我在做协同制导律设计时,通常先用PMP推导最优控制的结构形式,然后用数值方法求解两点边值问题。这样既有理论支撑,又能处理实际约束。
好了,这一节的内容就到这里。三个工具各有千秋,关键是要理解它们的适用条件和核心思想。下一节我们会具体讲怎么把这些理论用到多导弹协同的制导律设计中去。