Q-Learning算法也是時序差分算法的一種,和咱們前面介紹的SARAS不一樣的是,SARSA算法聽從了交互序列,根據當前的真實行動進行價值估計;Q-Learning算法沒有遵循交互序列,而是在當前時刻選擇了使價值最大的行動。python
Q-Learning算法在計算當前時刻的行動-狀態價值\(q_t(s_t,a_t)\)時選擇了當前狀態使價值最大的行動\(max_aq_{t-1}(s_{t})\)。git
Q-Learning的迭代公式在SARAS的基礎上進行了一些修改,以下:github
\[ q_{t}(s_{t},a_{t}) = q_{t-1}(s_{t-1},a_{t-1}) + \frac{1}{N}(r_t + \gamma*max_aq_{t-1}(s_t) - q_{t-1}(s_{t-1},a_{t-1})) \]算法
Q-Learning公式和SARAS的公式十分相像,因此策略提高依然沒有變化,策略評估有一點微小的修改(完整代碼GitHub)。函數
def q_learn_eval(self, agent, env): state = env.reset() prev_state = -1 prev_act = -1 while True: act = agent.play(state, self.epsilon) next_state, reward, terminate, _ = env.step(act) if prev_act != -1: # qlearning的迭代公式 return_val = reward + agent.gamma * (0 if terminate else np.max(agent.value_q[state, :])) agent.value_n[prev_state][prev_act] += 1 agent.value_q[prev_state][prev_act] += (return_val - agent.value_q[prev_state][prev_act]) / agent.value_n[prev_state][prev_act] prev_act = act prev_state = state state = next_state if terminate: break
SARSA算法和Q-Learning算法在公式上的不一樣,實際上這兩種算法表明了兩種策略評估的方式,分別是On-Policy和Off-Policy。學習
對於Q-Learning和SARSA這樣的時序差分算法,對於小型的強化學習問題是很是靈活有效的,可是在大數據時代,異常複雜的狀態和可選動做,使Q-Learning和SARSA要維護的Q表異常的大,甚至遠遠超出內存,這限制了時序差分算法的應用場景。在深度學習興起後,基於深度學習的強化學習開始占主導地位,所以從下一篇開始咱們開始討論深度強化學習的建模思路。大數據