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表异常的大,甚至远远超出内存,这限制了时序差分算法的应用场景。在深度学习兴起后,基于深度学习的强化学习开始占主导地位,所以从下一篇开始咱们开始讨论深度强化学习的建模思路。大数据