强化学习算法复现(三):蒙特卡洛方法_21点游戏

相关知识结构如下:在这里插入图片描述
参考资料:

https://oneraynyday.github.io/ml/2018/05/24/Reinforcement-Learning-Monte-Carlo/#first-visit-monte-carlo

在本次复现中,使用的gym中的21点游戏模块

part1、环境测试:以随机策略玩n局游戏

import gym

env = gym.make('Blackjack-v0')
# print(env.observation_space)
# print(env.action_space)


# 以随机策略玩n局
def random_play(n):
    for i_episode in range(n):
        state = env.reset()  # 状态随机初始化
        while True:
            print(state)  # 此刻的状态

            action = env.action_space.sample()  # 随机选择动作

            # 环境对此动作的反馈 【状态,回报,是否完成游戏,信息】
            state, reward, done, info = env.step(action)

            # 游戏结束,显示结果
            if done:
                print('End game! Reward: ', reward)
                print('You won :)\n') if reward > 0 else print('You lost :(\n')
                break
    return

part2 蒙特卡洛预测方法:给定策略,学习其状态价值函数

def MC_perdiction(max_hit, discount,i):
    # 初始化
    V = []    # 储存V(St)
    player_trajectory = []
    returns = []        # Returns

    # 这一幕状态初始化
    state = env.reset()
    while True:
        # step1、在目前状态下,根据策略选择动作
        action = 1
        if state[0] >= max_hit:
            action = 0

        # step2、根据动作,从环境中获得反馈。并储存采样数据【目前状态,动作,回报】
        next_state, reward, done, info = env.step(action)
        player_trajectory.append((state, action, reward))  # 幕序列【S0,A0,R1】

        # step3、状态更新
        state = next_state  # 状态更新

        # 得出幕序列:S0 A0 R1 S1 A1 R2 …… S(T-1) A(T-1) RT
        if done:
            break

    # print("回合%d结束,幕序列为:" % i, player_trajectory)
    G = 0

    states, actions, rewards = zip(*player_trajectory)
    discounts = np.array([discount ** i for i in range(len(rewards) + 1)]) # 形成折扣系数矩阵

    # 使用每次访问型MC预测算法
    for j, state in enumerate(states):
        # print("估计状态", j, state)
        G = sum(rewards[j:] * discounts[:-(1 + j)])
        returns.append((state, G))

    state, v = zip
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
强化学习中的蒙特卡洛方法是一种model-free的学习方法,它不需要对环境的动态进行建模。蒙特卡洛方法是根据与环境进行交互的样本序列来估计值函数或者策略函数。 简单来说,蒙特卡洛方法通过多次实验得到在不同状态下的回报样本,然后利用这些样本来估计值函数或者策略函数。蒙特卡洛方法的核心思想是根据样本的平均回报来近似真实的值函数。 蒙特卡洛方法有多种算法,其中最简单的是MC Basic算法。MC Basic算法的核心步骤包括: 1. 首先,通过与环境进行交互来生成样本序列。在每个样本序列中,采取一系列的动作,并观察环境的反馈,包括奖励和下一个状态。 2. 接下来,根据样本序列计算每个状态的回报。回报是从当前状态开始,经历一系列的动作和环境的反馈后所获得的累计奖励。 3. 然后,利用回报样本来估计值函数。对于每个状态,将其对应的回报样本求平均值作为值函数的估计。 4. 最后,根据值函数来改进策略。根据估计的值函数,选择在每个状态下具有最高值的动作作为最优策略。 这样,通过多次实验和样本的平均回报,MC Basic算法可以逐渐学习到值函数和策略函数,并不断优化策略来实现更好的决策。 除了MC Basic算法,还有其他蒙特卡洛方法,如MC Exploring Starts和ϵ-Greedy算法。这些算法在具体实现上有所差异,但都基于蒙特卡洛方法的核心思想。 综上所述,蒙特卡洛方法是一种model-free的强化学习算法,通过样本序列来估计值函数或策略函数,从而实现更好的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值