Dymos:将 ODE 拆分为两个组件时恢复失败

问题描述 投票:0回答:1

我一直在构建一个类似于文档中赛车示例的最优控制模拟(https://openmdao.org/dymos/docs/latest/examples/racecar/racecar.html)。在我的模型中,有一个车辆动力学模型,它根据轮胎产生的力和车辆当前的速度计算车辆参考系中的加速度。

轮胎力由第二个分量计算,该分量使用简单的线性关系(纵向力与扭矩成线性关系,横向力与滑移角成线性关系)获取车辆速度(状态)和施加的扭矩(控制)。最后还有第三个组件,它根据摩擦圆计算轮胎的抓地力极限。请参阅下面的 XDSM:

XDSM

当我尝试运行此程序时,我发现 IPOPT 恢复失败。检查复杂步骤的总导数给出了这个输出:

 'traj.phase0.collocation_constraint.defects:r'    | 'traj.phase0.states:n'  |  9.8677e-02 |  9.8723e-02 |  3.0820e-03 |  3.1218e-02 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:r'    | 'traj.phase0.states:r'  |  1.0607e+01 |  1.0607e+01 |  2.3431e-03 |  2.2091e-04 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:r'    | 'traj.phase0.states:u'  |  7.0988e-02 |  7.1729e-02 |  4.4107e-03 |  6.1491e-02 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:r'    | 'traj.phase0.states:v'  |  2.7646e-02 |  2.9618e-02 |  3.5225e-03 |  1.1893e-01 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:r'    | 'traj.phase0.states:xi' |  1.6765e+00 |  1.6593e+00 |  5.8082e-02 |  3.5004e-02 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:v'    | 'traj.phase0.states:n'  |  1.3974e+00 |  1.3982e+00 |  7.9276e-03 |  5.6700e-03 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:v'    | 'traj.phase0.states:r'  |  4.4467e+01 |  4.4466e+01 |  6.6054e-03 |  1.4855e-04 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:v'    | 'traj.phase0.states:u'  |  7.9225e-01 |  7.9746e-01 |  1.1748e-02 |  1.4732e-02 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:v'    | 'traj.phase0.states:v'  |  1.0619e+01 |  1.0620e+01 |  9.0666e-03 |  8.5377e-04 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+
| 'traj.phase0.collocation_constraint.defects:v'    | 'traj.phase0.states:xi' |  1.2890e+01 |  1.2893e+01 |  1.3847e-01 |  1.0740e-02 |  >ABS_TOL >REL_TOL |
+---------------------------------------------------+-------------------------+-------------+-------------+-------------+-------------+--------------------+

我已经使用复杂的步骤方法检查了所有的部分,就像在 baristochrome 示例中所做的那样,它们应该都是正确的。

当我将车辆动力学和轮胎力计算块合并到一个块中时,优化运行得很好,没有任何问题。这让我认为可能缺少用于计算轮胎力的滑移角偏导数的信息,因此我尝试将滑移角计算移至 TireForce 组件。但这并没有解决问题,所以这里可能还有其他问题。

openmdao ipopt
1个回答
0
投票

当部分正确但总计错误时,这强烈表明模型中有反馈,但没有合适的非线性求解器来收敛非线性系统,也没有合适的线性求解器来求解全导数。

我建议将 DiectSolver 添加到可能包含反馈循环的最小组,以及 NewtonSolver 或 NonlinearBlockGS 求解器。

回想一下,OpenMDAO 用于求解导数的理论意味着,一旦任何残差被驱动到相当接近于零,就求解线性方程组。当不涉及反馈时,默认求解器对于常见情况是高性能的,但当存在反馈时需要其他求解器。

© www.soinside.com 2019 - 2024. All rights reserved.