Ipopt, lg(mu) 随着进一步迭代而增加

问题描述

我正在开发一个摩托车单圈时间模拟器,该模拟器使用 IPOPT 来解决最小化单圈时间的最佳控制问题。我遇到了一个奇怪的问题,它有几个症状。我不确定这是否与问题公式或我的优化器设置或其他方面有关。

优化器没有收敛,所以我在 30 次迭代后将其切断。我能够得到自行车时间序列的一些结果,尽管它们有点颠簸。

首先,当自行车接近一圈终点时,自行车会出现非常大的减速。虽然看起来自行车的速度没有受到影响,但时间序列中的最终值与之前的速度值大致相同。

在整个优化过程中,对偶和原始不可行性值仍然很高。

lg(mu) 值在整个问题中仍然很高,实际上在整个问题中都在增加

我认为可能是我错误地定义了问题,并且自行车正试图准确地在终点线上完成,并且使用加速度来校正速度以实现这一目标。这可能就是 lg(mu) 稳步增加的原因。虽然我不知道这是否正确。

这里有一些迭代:

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  5.0000000e+01 7.61e+00 1.06e+00   0.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  5.2354734e+01 1.25e+02 2.61e+04   1.0 3.72e+02    -  4.49e-01 1.05e-01f  2
   2  5.8209179e+01 1.13e+02 4.89e+04   1.3 5.74e+02    -  3.30e-01 2.38e-01f  1
   3  5.8427608e+01 1.09e+02 7.80e+04   1.3 2.26e+03    -  5.29e-02 3.40e-02h  1
   4  5.7286457e+01 1.05e+02 1.58e+05   1.3 3.27e+03    -  5.93e-02 4.73e-02h  1
   5  5.4742469e+01 1.00e+02 1.68e+05   1.3 1.08e+03    -  9.76e-02 9.39e-02h  1
   6  5.3103432e+01 9.65e+01 3.23e+05   1.3 8.30e+02    -  3.88e-02 4.60e-02h  1
   7  5.1403543e+01 9.27e+01 2.96e+05   1.3 3.32e+02    -  9.96e-02 4.42e-02h  1
   8  4.8435240e+01 8.68e+01 3.25e+05   1.3 9.18e+02    -  1.33e-01 7.93e-02h  1
   9  4.6636072e+01 8.34e+01 2.54e+05   1.8 1.96e+03    -  7.10e-02 4.57e-02h  1
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  10  4.5624201e+01 8.31e+01 5.34e+05   2.6 6.59e+03    -  3.66e-02 2.25e-02f  1
  11  4.5396562e+01 8.15e+01 8.21e+06  -4.4 2.19e+03    -  5.52e-02 2.13e-02h  1
  12  4.4770540e+01 8.64e+01 1.35e+06   3.1 2.09e+04    -  1.89e-02 1.28e-02f  1
  13  4.3376367e+01 9.29e+01 1.63e+06   3.4 9.37e+03    -  3.07e-02 2.18e-02f  1
  14  4.3629802e+01 1.05e+02 9.69e+06   3.3 3.05e+03    -  3.69e-02 2.34e-02f  1
  15  4.3981118e+01 1.03e+02 3.18e+06   3.3 5.75e+03    -  8.46e-02 4.62e-02f  1
  16  4.4061311e+01 1.01e+02 3.15e+06   3.6 5.42e+03    -  4.83e-02 2.46e-02f  1
  17  4.4041548e+01 1.00e+02 3.58e+06   3.6 2.39e+03    -  6.00e-02 3.60e-03h  1
  18  4.3262006e+01 8.41e+01 3.57e+07   3.2 3.70e+03    -  2.31e-02 3.58e-02h  1
  19  4.4835984e+01 9.57e+01 4.87e+07   4.4 3.48e+04    -  3.97e-02 1.57e-02f  1
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  20  4.4439370e+01 9.39e+01 5.39e+07   3.2 5.56e+03    -  4.40e-03 8.81e-03h  2
  21  4.3925581e+01 9.28e+01 5.73e+07   3.2 8.07e+03    -  3.75e-02 1.32e-02h  1
  22  4.2768412e+01 1.03e+02 1.72e+08   3.2 5.42e+03    -  2.22e-02 3.43e-02h  1
  23  4.2551257e+01 1.02e+02 2.15e+08   3.6 5.82e+03    -  8.74e-02 7.16e-03h  1
  24  4.2023292e+01 9.45e+01 3.90e+08   3.7 3.55e+03    -  2.65e-02 4.02e-02h  1
  25  4.1719605e+01 9.26e+01 1.44e+08   4.2 4.45e+03    -  7.99e-02 5.57e-02f  1
  26  4.1331097e+01 8.89e+01 2.64e+07   2.9 2.85e+03    -  5.92e-02 3.60e-02h  1
  27  4.1143710e+01 8.75e+01 4.59e+07   3.7 2.73e+03    -  6.33e-02 1.50e-02h  1
  28  4.2020100e+01 2.19e+02 4.59e+08   4.6 1.56e+04    -  2.37e-03 7.91e-02f  1
  29  4.1767670e+01 2.16e+02 4.52e+08   3.4 3.64e+03    -  3.53e-02 1.56e-02h  1
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  30  4.0837002e+01 2.13e+02 3.87e+08   3.4 9.14e+03    -  3.52e-02 4.11e-02h  1
  31  4.0047846e+01 2.15e+02 9.25e+08   4.4 2.67e+04    -  1.35e-01 2.10e-02h  1
  32  3.9770188e+01 2.14e+02 2.55e+08  -2.2 1.80e+04    -  1.50e-02 7.12e-03h  1
  33  3.9584783e+01 2.13e+02 3.63e+08   4.6 3.79e+04    -  5.50e-02 8.17e-03h  1
  34  3.9240198e+01 2.12e+02 4.33e+08   4.6 5.02e+04    -  4.00e-03 1.47e-02h  1
  35  3.8725727e+01 2.10e+02 2.96e+08   4.6 3.30e+04    -  5.70e-02 2.37e-02f  2
  36  3.8716577e+01 2.12e+02 2.19e+08   4.6 6.89e+03    -  6.33e-03 1.19e-02H  1
  37r 3.8716577e+01 2.12e+02 1.00e+03   4.6 0.00e+00    -  0.00e+00 2.92e-07R 16
  38r 3.8713861e+01 2.40e+02 3.60e+03  -1.5 2.46e+04    -  1.12e-01 4.00e-02f  1
  39  3.8709293e+01 2.40e+02 1.02e+05   1.9 2.12e+03    -  4.93e-01 8.65e-04f  1
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  40  4.0422833e+01 3.28e+02 8.00e+05   3.0 4.39e+04    -  4.88e-02 5.47e-02f  1

如果您想看一下,这里有一个存储库,IPOPT 选项位于 problemSolver.py 中。 https://github.com/RoryMcDonald/LTS-Help

解决方法

是的,您绝对没有收敛。我查看了您的 TrackingODE,许多输出都具有除以 (1-n*k) 形式的奇点。我注意到 IPOPT 确实不能很好地处理奇点。

在我的例子中,奇点是由 v 速度除法引起的,我在初始阶段使用不包含奇点的简化 ODE 解决了这个问题,当 v 大到不会引起问题时结束。

我认为类似的东西不会适用于您的系统,但这只是粗略地查看。也许您可以将 1/(1-x) 展开为泰勒级数 1 + x + x^2 + x^3 + ... 并忽略高于某个幂的项。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...