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

本文介绍了如何使用蒙特卡洛方法复现强化学习中的21点游戏。首先,通过gym环境进行随机策略的游戏测试。接着,详细阐述了蒙特卡洛预测方法来学习给定策略的状态价值函数,并提供了相应的可视化结果展示。最后,探讨了蒙特卡洛控制方法,并展示了游戏决策(停牌或要牌)的可视化效果。
摘要由CSDN通过智能技术生成

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

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(*returns
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值