我正在尝试使用 Python 中的 Hamilton-Jacobi-Bellman 方程来解决一个简单的最优控制问题。这被证明是相当困难的,因为我最终不得不解决以下问题:
请您帮助指导我如何解决这个问题。我不太清楚我的方法是否正确。请建议资源或帮助我制定可行的方案。
我正在尝试使用 Python 中的 Hamilton-Jacobi-Bellman 方程来解决一个简单的最优控制问题。这被证明是相当困难的,因为我最终不得不解决以下问题:
请您帮助指导我如何解决这个问题。我不太清楚我的方法是否正确。请建议资源或帮助我制定可行的方案。
我自己还没有解 HJB 方程,但是根据我对其他 PDE 的经验,我可以想到两件事你可以尝试。
使用“逆风”近似,而不是中心差分方案。这等式中的术语表明,随着时间的推移,信息在系统中从左到右流动(假设)。因此,更有意义的是构建近似使用和它左边的节点,因为那是信息的来源。最简单的近似是:
使用隐式时间推进方案,而不是显式方案。明确的时间推进方案,例如您正在使用的方案,具有严重限制您可以采取的时间步长大小的稳定性条件。事实上,如果您将时间步长减小一些较大的因素,您的方法很有可能会起作用(或存活更长时间)。但是对于许多实际问题,这种时间步长约束实在是太严格了,因为它增加了获得最终解决方案所需的成本/时间。
相反,对于许多问题,隐式方法是无条件稳定的,这意味着对于您选择的任何时间步长,解决方案都是有界的。然而,没有免费的午餐。额外的稳定性是以必须在每个时间步求解方程组为代价的。这是因为所有解的未知数 ('s) 参与空间离散化现在在时间进行评估, 而不是在时间. 为了更清楚,这是使用隐式时间推进方法的离散方程的样子,
请注意,右侧的所有术语都是在 time 评估的,所以你的解决方案未知等式出现在等式的两边。上面的方程代表了一个非线性方程组,需要在每个时间步求解,可能使用类似于牛顿法的方法。
PS我认为您在等式的最后一项中缺少2倍。中心差异为需要除以.