如何在数值上最小化一个函数?

计算科学 优化 pde
2021-11-27 22:14:03

如何在数值上最小化一个函数,例如,

J[y]=x1x2L(x,y(x),y(x))dx

一个等价的问题是求解这个泛函作为微分方程的欧拉方程。但是有没有一种数值方法可以在不求解微分方程的情况下直接最小化这个函数?

1个回答

像这样的变分问题是最优控制问题的特例,有大量关于求解方法的文献和大量可用的软件。为了用最优控制中使用的标准形式来表达它,我们可以写t而不是x并考虑“系统动力学”

y˙=u
在哪里u是(虚构的)系统输入。然后我们可以将成本泛函写为
J=t1t2L(t,y,u) dt
这将通过选择我们的系统输入来最小化,u. 在最优控制问题中,通常存在更复杂的问题,例如不等式约束y要么u,所以这实际上比您提出的原始变分法问题更普遍。

数值求解方法有很多,但在实践中最常用的是“直接”方法,将成本表示为总和,而不是通过某种离散化过程的积分。最常见的方法被称为直接搭配(参见例如https://doi.org/10.2514/3.20223)和多重拍摄(例如https://doi.org/10.1016/S1474-6670(17)61205-9)。在此之后,我们得到一个非线性规划 (NLP) 问题,这是一个可以使用标准求解器解决的优化问题。

如果你对解决实际问题感兴趣,我建议你看看开源工具包 ACADO,它通过多次射击来解决最优控制问题,或者 CasADi,它是一个为动态优化而设计的自动微分工具包,可以与常见的接口NLP 求解器,例如 IPOPT。