差分和非线性系统的优化

计算科学 非线性规划
2021-12-20 04:01:48

我想最小化差分非线性系统(动态)的成本函数。这个软件可以用吗?我该怎么做?

最好的问候, 哈尼耶

1个回答

理论上,你可以在 MATLAB 中做到这一点。在实践中,您可能不能也不应该这样做,因为它可能会非常缓慢。

我知道动态优化的两种主要方法是:

  • 搭配; 使用搭配方法(Radau 搭配是一种常用方法)完全离散您的微分方程,然后求解一个非常大的线性程序
  • 区间算术+自动微分+分支定界;本质上,使用区间算术和自动微分来生成动态优化问题的凸和凹松弛,然后使用分支定界方法来解决

在实践中,这两种方法都不太可能在 MATLAB 中可行。前一种方法比后一种方法更现实。

大规模非线性规划求解器 IPOPT 本质上是为解决搭配产生的非线性程序而编写的,并且使用了一种编译语言(首先是 Fortran,然后是 C++),因为大规模非线性程序对计算的要求很高。IPOPT 确实有一个附属于它的 MATLAB 接口,因此如果您要在 MATLAB 中尝试这种方法,您也许可以使用该接口并解决您的问题。接口维护不清楚;例如,文档表明它已经在 MATLAB 7.2 (R2006a) 到 7.7 (R2008b) 中进行了测试,这意味着它没有针对过去 5 年发布的 MATLAB 版本进行测试。如果此接口有效,它可能是您使用 MATLAB 解决动态优化问题的唯一可行方法。

严格的方法(区间算术等)已经很耗时,即使一切都是用 C++ 实现的。具有 10 个左右状态变量的问题需要一两个小时才能完成,并且该算法随着状态变量的数量呈指数增长。尽管 MATLAB 存在区间算术和自动微分包,但您可能必须编写所有剩余的求解器基础结构(我不知道有任何库实现了这种方法)。假设您没有严重依赖已编译的库,MATLAB 的性能通常会慢一到三个数量级,因此解决您的问题可能需要非常长的时间(并且假设您的问题对于这种方法来说足够小) .