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
