【RL系列】SARSA算法的基本結構


SARSA算法嚴格上來說,是TD(0)關於狀態動作函數估計的on-policy形式,所以其基本架構與TD的$v_{\pi}$估計算法(on-policy)並無太大區別,所以這里就不再單獨闡述之。本文主要通過兩個簡單例子來實際應用SARSA算法,並在過程中熟練並總結SARSA算法的流程與基本結構。

強化學習中的統計方法(包括Monte Carlo,TD)在實現episode task時,無不例外存在着兩層最基本的循環結構。如果我們將每一個episode task看作是一局游戲,那么這個游戲有開始也有結束,統計方法是就是一局接着一局不停的在玩,然后從中總結出最優策略。Monte Carlo與TD的區別在於,Monte Carlo是玩完一局,總結一次,而TD算法是邊玩邊總結。所以這兩層基本結構的外層是以游戲次數為循環,內層則是以游戲過程為循環。

SARSA作為TD算法下的on-policy control算法,只需邊進行游戲邊更新動作值函數和Policy即可,所以SARSA算法的內層可以由TD算法細化為如下結構:

 

 

 

NumOfGames = 500
while(index < NumOfGames)
    [Q, Policy] = PlayGame(Q, Policy);
end                            

function [Q, Policy] = PlayGame(Q, Policy)
while(1)
    % Begin Game
    while(1)
        Action = ChooseAction(Policy(State));
        NextState = State + Action + windy(State);
        try
            Grid(NextState) % Check for exception
        catch
            break;
        end     
        NextAction = ChooseAction(Policy(NextState));
        Q(State, Action) = Q(State, Action) + alpha*(R + gamma*Q(NextState, NextAction)...
            - Q(State, Action));
        Policy = UpdatePolicy(Policy);
        State = NextState;
        if(State == Target)
            return;
        end    
    end
end

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM