强化学习,摆python

数据挖掘 强化学习
2022-03-17 13:04:49

我很难为钟摆问题找到一个好的奖励函数,我正在使用的函数:x20.25(xdot2) 这是顶部的二次误差。x代表摆的当前位置和xdot角速度。

使用此功能需要很长时间,有时甚至不起作用。有人有其他建议吗?我一直在谷歌上寻找,但没有找到任何我可以使用的东西

2个回答

您可以使用Openai的倒立摆使用的相同奖励函数:

costs=(Δ2πθ)20.1(θ˙)20.001u2

在哪里(Δ2πθ)是使用模数执行的当前角位置和所需角位置之间的差异2π. 变量u表示扭矩(RL 代理的动作)。最佳方案是尽可能接近零成本。

这里的想法是你有一个控制问题,你可以提出一个二次“能量”或成本函数,告诉你在每个时间步执行一个动作的成本。在本文(第 33 页第 5.2 节)中,您可以找到详细说明。

我已经在这个目标函数中测试了 RL 算法,我在 MATLAB 和 Python 中都没有遇到任何收敛问题。如果您仍有问题,请告诉我们您实施了哪种 RL 方法以及如何编码钟摆的位置。

希望能帮助到你!

在强化学习中,您应该避免基于启发式对临时结果进行评分。与监督学习或搜索算法不同,您不是试图引导行为,而是奖励好的结果。对于倒立摆来说,一个好的结果可能只是“到目前为止还没有倒下”,尽管成本函数在最小化与理想的差异方面表示成本并没有本质上的错误,但您确实必须更加小心使用的值。

假设您正在使用折扣和连续(非偶发)方法,则奖励可以是 0 表示“没有摔倒”,-1 表示“摔倒”,然后重新设置/继续。您可以通过测量摆锤与垂直方向是否达到某个大角度(例如 45 度或更大)来检查是否坠落。

对于情节式方法,更自然的是 +1“ok”和 0 表示最终状态“跌倒”,尽管 0/-1 方案也可以工作。但是,您要避免任何“正常”的状态为负值,因为这基本上是在告诉代理快点结束这一集。在你的情况下,结束这一集很糟糕,所以你不想要那样。

如果您确实想在情节方法中奖励“完美”,那么如果您添加一个正偏移量,那么您的公式可能会更好地工作,这样代理就有动力在可能的情况下继续情节。您应该选择一个使可恢复状态为正的值。


请注意,上述分析仅适用于某些基于情节的方法。这主要取决于您将什么视为一集,以及代理是否能够采取行动来结束这一集。