郭震 AI公众号:郭震AI

11 蒙特卡罗控制方法概述

发布日期:

最近更新:

分类: 强化学习

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点8 个
图文要点6 张
正文规模1.4k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 8 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

蒙特卡罗控制方法概述结构图查看大图
蒙特卡罗控制方法概述结构图

强化学习的核心是智能体在环境中试错,学习时要同时看状态、动作、奖励和策略更新。阅读时可以按「蒙特卡罗控制的基本概念 -> 蒙特卡罗控制的实现步骤 -> 步骤 1: 生成轨迹 -> 步骤 2: 评估QQ值函数」建立结构,再回到正文里的代码、案例或指标做验证。

蒙特卡罗控制方法概述核对图查看大图
蒙特卡罗控制方法概述核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「蒙特卡罗控制的基本概念」,再查「蒙特卡罗控制的实现步骤」。

在上一篇中,我们探讨了蒙特卡罗方法的基本原理。这一部分将深入讨论蒙特卡罗控制方法,进一步拓展我们对强化学习的理解。蒙特卡罗控制是指通过蒙特卡罗方法进行策略评估和改进的过程,它主要用于策略的优化。

蒙特卡罗控制的基本概念

蒙特卡罗控制的目标是通过对状态-动作值函数(QQ值函数)的估计来找到最优策略。它的基本流程是:

  1. 采样:使用策略生成多个轨迹(episode),每个轨迹由状态、动作和奖励序列组成。
  2. 评估:计算每一对 (s,a)(s, a)QQ值,即在状态ss下采取动作aa的期望回报。
  3. 改进:根据QQ值更新策略,使概率更高地选择在给定状态下收益更高的动作。

蒙特卡罗控制的实现步骤

步骤 1: 生成轨迹

在强化学习中,我们需要通过与环境的交互来获得轨迹。以下是一个简单的示例,展示如何在一个简单的环境中生成轨迹。

import numpy as np

def generate_episode(env, policy):
    state = env.reset()
    episode = []
    done = False
    
    while not done:
        action = policy(state)
        next_state, reward, done, info = env.step(action)
        episode.append((state, action, reward))
        state = next_state
        
    return episode

在这个代码示例中,generate_episode 函数生成一个完整的轨迹,使用给定的策略与环境进行交互。

步骤 2: 评估QQ值函数

一旦获得了多条轨迹,我们可以开始评估QQ值。在这里,我们将计算每个状态-动作对的回报。

def compute_Q(episodes, num_states, num_actions, discount_factor=0.9):
    Q = np.zeros((num_states, num_actions))
    returns = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))
    
    for episode in episodes:
        G = 0  # 回报
        multiplier = 1  # 折扣因子
        for state, action, reward in reversed(episode):
            G += reward * multiplier
            multiplier *= discount_factor
            
            # 更新返回值与计数
            returns[state, action] += G
            returns_count[state, action] += 1
            Q[state, action] = returns[state, action] / returns_count[state, action]  # 计算平均
            
    return Q

在这个函数中,我们计算每个状态-动作对的QQ值,通过回报的累积进行评估。

步骤 3: 改进策略

基于更新后的QQ值,我们可以通过ϵ\epsilon-贪婪策略来改进当前策略。这是强化学习中常用的策略改进方法。

蒙特卡罗控制方法判断卡查看大图
蒙特卡罗控制方法判断卡

学习蒙特卡罗控制时,先看回合采样、动作价值估计、探索策略、策略改进和收敛条件。

def epsilon_greedy_policy(Q, epsilon=0.1):
    def policy(state):
        if np.random.rand() < epsilon:
            return np.random.choice(len(Q[state]))  # 随机动作
        else:
            return np.argmax(Q[state])  # 选择最佳动作
    return policy

在上述代码中,epsilon_greedy_policy函数定义了一个ϵ\epsilon-贪婪策略,这种策略在探索 (选择随机动作) 和利用 (选择Q值最高的动作)之间平衡。

循环迭代

最终,我们可以将这些步骤放在一个循环中,迭代进行策略评估与改进,直到策略收敛。

def monte_carlo_control(env, num_episodes, discount_factor=0.9):
    Q = np.zeros((env.observation_space.n, env.action_space.n))
    policy = epsilon_greedy_policy(Q)
    
    for episode_num in range(num_episodes):
        episode = generate_episode(env, policy)
        Q = compute_Q([episode], env.observation_space.n, env.action_space.n, discount_factor)
        policy = epsilon_greedy_policy(Q)
    
    return policy, Q

实际案例:简单的网格世界

为了更好地理解蒙特卡罗控制方法,我们可以考虑一个简单的网格世界环境,其中代理可以在一个5×55 \times 5的网格中移动,每个格子可以得到相应的奖励。

强化学习阅读地图卡查看大图
强化学习阅读地图卡

《蒙特卡罗控制方法概述》适合边看图边读正文。先确认问题和判断标准,再看概念解释与练习步骤,信息会更容易连成一条线。

class GridWorld:
    def __init__(self):
        self.grid_size = 5
        self.state = (0, 0)
        
    def reset(self):
        self.state = (0, 0)
        return self.state
    
    def step(self, action):
        # 定义动作:上, 下, 左, 右
        if action == 0:  # 上
            next_state = (max(0, self.state[0] - 1), self.state[1])
        elif action == 1:  # 下
            next_state = (min(self.grid_size - 1, self.state[0] + 1), self.state[1])
        elif action == 2:  # 左
            next_state = (self.state[0], max(0, self.state[1] - 1))
        else:  # 右
            next_state = (self.state[0], min(self.grid_size - 1, self.state[1] + 1))
        
        self.state = next_state
        # 设定奖励
        reward = -1 if self.state != (self.grid_size - 1, self.grid_size - 1) else 0
        done = self.state == (self.grid_size - 1, self.grid_size - 1)
        
        return self.state, reward, done, {}

# 使用网格世界环境进行蒙特卡罗控制
env = GridWorld()
optimal_policy, Q_values = monte_carlo_control(env, num_episodes=5000)

在这个示例中,代理在网格中移动,获取奖励,最终通过蒙特卡罗控制方法学习到一个近似最优的策略。

蒙特卡罗控制方法概述应用复盘卡查看大图
蒙特卡罗控制方法概述应用复盘卡

如果《蒙特卡罗控制方法概述》还没完全消化,可以从这张卡片的四个动作重新走一遍。

蒙特卡罗控制方法概述应用检查卡查看大图
蒙特卡罗控制方法概述应用检查卡

回看《蒙特卡罗控制方法概述》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。

总结

蒙特卡罗控制方法是通过采样生成轨迹并使用QQ值进行策略评估与改进的有力工具。它稳健且易于实现,适合用于强化学习的各种应用场景。在我们下一篇的内容中,我们将进一步讨论如何进行区间估计,以提高对强化学习模型的评估与理解。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

蒙特卡罗控制方法概述适合谁读?

这是 强化学习入门 系列第 11 / 28 篇,适合正在学习强化学习入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇强化学习入门教程要多久?

按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...