建模成马尔可夫决策过程,动态规划方法,一般或者最优策略,对状态转移概率清楚,遍历并选择策略,评价策略好坏,更新策略
现实中无法知道环境,不知道状态,不知道概率,对于这类序列决策问题
蒙特卡洛学习 Monte-Carlo Prediction
目标:Agent Environment
寻找最优策略 使得期望Q(S,W)最大化
动态规划知道所有环境,我们需要知道环境的一个近似,MC方法从episodes开始学习,model free是生活中大多数的模型,RL分为基于值函数的学习,或者基于策略的学习。
MC complete episodes no bootstrapping
MCuses simplest possible idea value= mean return
Caveat can only apply MC to episodic MDPs
terminate
蒙特卡洛学习全球十大算法排名第二,对多次环境的采样对环境进行模拟。
Monte-Carlo Prediction: 评价当前策略好坏,一般思想:对于任意给定策略π,agent 执行action,估计相应的状态值。我们需要通过执行episode 中出现状态s的数目N(s),多次reward 值得平均值来计算相应的动作值或者状态值。计算有两种方式:第一次预见蒙特卡洛策略的评价,和每次预见蒙特卡洛的评价。
First Visit
做实验 假如每次以1/4概率选取四个选择之一,得到很多状态s,first只取预见第一个s时的at, value is estimated by mean return 趋近于标准期望。
相对于动态规划是绝对贪婪策略,找到最大的return 先用策略得到Q表 然后找到最佳策略,再去更新Q table 再更新策略。
考虑策略的方法是绝对贪婪的
蒙特卡洛 control
绝对贪婪策略的不足:
reward改变的情况下,过去积累的reward印象策略,给策略选择一个微小的随机性,
Epsilon Greedy Policy 给策略选择一个微小的随机性,使agent 更可能选择时使Q最大
Control
目的获得最优策略
On-policy learning:策略评估和改善是同步进行的,求得目标最优Q值,然后选取某一个策略,蒙特卡洛基于两步走。一套episode 系统同时探索和策略改进
Off-policy learning 两套系统 策略评估和改善不直接用于产生agent的policy 一个探索学习并成为optimal policy 另一个用来逼近上述策略。
On-policy learning 通过探索和利用Exploitation 交替迭代完成
先策略评估 e-greedy(Q)更新策略,e如何选取?
e如何选取?在agent与环境刚开始交互时,agent对环境知之甚少,这时需要大量探索;为了尽可能更多了解环境,agent动作选取需要多样化(随机选取)。2 后面的迭代 agent对环境了解足够多,后面需要选择greedy policy
e选取只要满足条件 状态度量空间是无线的 策略收敛到argmaxQk agent就是一定达到最优策略。e=1/i
算法步骤
1)初始化变量
2)通过Epsilon-greedy获得起始策略
3)进行策略评估
4)进行策略迭代
5)不断重复上述步骤直到达到收敛
Incremental Mean 增量均值
采样之后 相加求均值,写成计算机语言 需要遍历每一个episode,每一次的变化迭代,μk=μk-1 + 1/k (xk-μk-1)
满足GLIE Monte-Carlo Control算法 每次生成新的策略再不断迭代直到生成收敛的结果
2个policy 一个是target policy 一个是behavior policy 前者学习成为optimal policy 后者用于探索Exploration。
因此学习过程变化为behavior policy 不断更新参数,target policy 去逼近前者分布
21点
def generate_episode_from_limit_stochastic(bj_env):
episode = []
state = bj_env.reset()
while True:
probs = [0.8, 0.2] if state[0] > 18 else [0.2, 0.8]
action = np.random.choice(np.arange(2), p=probs)
next_state, reward, done, info = bj_env.step(action)
episode.append((state, action, reward))
state = next_state
if done:
break
return episode
episode (state, action, reward)是list,每次得到的结果都放入该list
初始选择概率是0.8和0.2,当点数>18 以0.8停牌…
每次调用一个函数得到一个episode
计算折扣系数:
discounts = np.array([gamma**i for i in range(len(rewards)+1)])
采样episode:
episode = generate_episode(env)
增量均值公式:
returns_sum[state][actions[i]] += sum(rewards[i:]*discounts[:-(1+i)])
N[state][actions[i]] += 1.0
Q[state][actions[i]] = returns_sum[state][actions[i]] / N[state][actions[i]]
随着迭代次数增加,Q趋于平衡