Sarsa与Q-learning

算法流程图

  • Q-learning
  • SARSA
  • 对比:Q-learning算法根据当前状态 S 选择执行一个动作A,执行后观测执行后的奖励和转移到的状态S1。在状态S1下计算采取哪个a可以获得最大的Q值,并没有真的采取这个a。Q-learning选择到新状态之后能够得到的最大的Q值来更新当前的Q值。
    而Sarsa是转移到动作S1时,真的采取了动作A1。然后根据Q(S1,A1)来更新Q值。
  • Q值更新对比:
    Sarsa:动作a的选取遵循e-greedy策略,目标Q值的计算也是根据(e-greedy)策略得到的动作a'计算得来
    Q-learning:动作a的选取遵循e-greedy策略,目标Q值的计算也是根据(e-greedy)策略得到的动作a'计算得来

代码实现:

SARSA:

代码需要的参数有:状态,选择的动作,带来的奖励,下一个状态,下一个动作。
代码步骤:

  1. 检测下一个状态是否存在于Q表中,如果不在的话就插入一个以下一个状态为索引的Series。

  2. 算出Q表中的当前状态和当前动作的Q值q_predict

  3. 如果当前状态是结束状态,q_target等于执行动作后的奖励+γ*下一个状态和下一个动作的Q值。

  4. 否则q值等于奖励

  5. 更新Q表,q值=当前Q值+学习率lr*(q_target-q_predict)
    理解:根据当前状态和选择的动作找到现在的Q表。根据下一个状态和下一个动作找到Q值1.用Q值1和当前Q值来更新目前Q值。
    Q-learning:

    代码需要的参数有:状态,选择的动作,带来的奖励,下一个状态。
    代码步骤:

  6. 检测下一个状态是否存在于Q表中,如果不在的话就插入一个以下一个状态为索引的Series。

  7. 算出Q表中的当前状态和当前动作的Q值q_predict

  8. 如果当前状态是结束状态,q_target等于执行动作后的奖励+γ*下一个状态中最大的Q值。

  9. 否则Q值等于奖励

  10. 更新Q表,q值=当前Q值+学习率lr*(q_target-q_predict)

posted @ 2021-10-18 20:12  一丨  阅读(269)  评论(0编辑  收藏  举报