求解失败

在求解过程中,非线性规划求解器可能返回求解失败的结果。事实上,除非问题为凸优化问题,即:

  • 动力学方程和等式约束是仿射的
  • 目标函数和不等式约束是凸的
  • 起始和终止时间是固定的

否则无法保证求解器总是能求解成功和收敛到全局最优解。若求解失败,可尝试以下方法排查和解决问题:

问题检查

  • 问题的定义是否输入正确?
  • 问题本身是否存在可行解?
  • 是否有变量的取值过大或过小?如果有,尝试对变量进行缩放。过大或过小的变量取值可能导致非线性规划和线性方程求解数值不稳定

求解设置

  • 离散网格设置是否合理?网格不宜过大或过小,或过于不均匀。需要的网格数量取决于问题的复杂度,其分辨能力应该适应于变量的变化速率。网格的插值点数量也应适应于问题且不宜过多
  • 尝试更换插值点模式(Radau/Lobatto)
  • 尝试更换线性方程求解器

求解初值

对于非线性规划问题,给定的初值对于求解的成功与否至关重要。初值的选择应该尽可能接近问题的解,或至少为一个合理的优化起始点。注意不要忘记设定初始或终止时间的初值(若其为自由变量)。