Start_python’s diary

ふたり暮らし

アラフィフ夫婦のフリーランスプラン

SARSA法による倒立振子 (Q値を見える化)

gymの倒立振子を使って強化学習SARSA法

 

Q-learningとSARSA法の違い

次のアクション(next_action)を学習の前に求める(SARSA法)か、学習の後で決定する(Q-learning)かが違います。先に求めるSARSA法だとε-greedy法によりランダムになる場合が出てきます。

むずかしいことはわかりませんが、Q-learningのメリットははランダム要素が少なく結果が早く収束することだと思います。SARSA法のメリットはランダム要素により収束まで時間はかかりますが最適な方向へより安定した結果を出せることだと思います。(間違ってたらごめんなさい)

まとめるとSARSA法はわざと多くの失敗を経験して同じ失敗を繰り返さないことでしょうか。

車の自動運転なら、Q-learningは最短距離で走るレース用、SARSA法は事故を起こさない安全運転用になるのかと思います。

f:id:Start_python:20191128103151g:plain

20試行回数くらいの様子です。Q-learning(Q学習)に比べるとマイナスが多いです。

 

プログラムのコード

# [3]Qテーブルを更新する関数(SARSA) *Qlearningと異なる* -------------------------------------
def update_Qtable_sarsa(q_table, state, action, reward, next_state, next_action):
    gamma = 0.99
    alpha = 0.5
    q_table[state, action] = (1 - alpha) * q_table[state, action] +
            alpha * (reward + gamma * q_table[next_state, next_action])

    return q_table

前回のQ-learningとはこの部分が変わっています。

Q-learningのときはこちらのコードです。

# [3]Qテーブルを更新する関数 -------------------------------------
def update_Qtable(q_table, state, action, reward, next_state):
    gamma = 0.99
    alpha = 0.5
    next_Max_Q=max(q_table[next_state][0],q_table[next_state][1] )
    q_table[state, action] = (1 - alpha) * q_table[state, action] +
            alpha * (reward + gamma * next_Max_Q)

    return q_table

 

80試行回数くらいの様子です。

f:id:Start_python:20191128103811g:plain
60試行回数くらいで棒は倒れなくなり80試行回数ではかなり安定しています。

 

 

次回はモンテカルロ法について勉強していきたいと思います。

 


参考サイト

qiita.com

qiita.com

 

 

保存ファイル

lesson46.py

 

 

文責:Luke