强化学习:通过试错学习最优策略---示例:使用Q-Learning解决迷宫问题

强化学习(Reinforcement Learning, RL)是一种让智能体(agent)在与环境交互的过程中,通过最大化某种累积奖励来学习如何采取行动的学习方法。它适用于那些需要连续决策的问题,比如游戏、自动驾驶和机器人控制等。

强化学习的关键概念
  • 代理 (Agent): 学习并作出决策的实体。
  • 环境 (Environment): 代理与其交互的世界。
  • 状态 (State): 描述环境中当前情况的信息。
  • 动作 (Action): 代理可以执行的行为。
  • 奖励 (Reward): 环境对代理行为的反馈,用于指导学习过程。
  • 策略 (Policy): 决定给定状态下应采取何种动作的规则。
  • 价值函数 (Value Function): 预期未来奖励的估计。
示例:使用Q-Learning解决迷宫问题

将通过一个简单的迷宫问题来展示如何实现一个基本的强化学习算法------Q-Learning。在这个例子中目标是让代理找到从起点到终点的最短路径。

环境设置 我们首先定义迷宫的结构。假设迷宫是一个4x4的网格,其中包含墙壁、空地以及起始点和终点。

python 复制代码
import numpy as np

# 定义迷宫布局
maze = np.array([
    [0, 1, 0, 0],
    [0, 1, 0, 0],
    [0, 0, 0, 1],
    [0, 0, 0, 0]
])

# 定义起始点和终点
start = (0, 0)
end = (3, 3)

# 动作空间
actions = ['up', 'down', 'left', 'right']

Q-Learning算法实现

python 复制代码
# 初始化Q表
q_table = np.zeros((maze.shape[0], maze.shape[1], len(actions)))

# 参数设置
alpha = 0.1  # 学习率
gamma = 0.95  # 折扣因子
epsilon = 0.1  # 探索概率
num_episodes = 1000  # 训练回合数

def choose_action(state, q_table, epsilon):
    if np.random.uniform(0, 1) < epsilon:
        action = np.random.choice(actions)  # 探索
    else:
        action_idx = np.argmax(q_table[state])
        action = actions[action_idx]  # 利用
    return action

def get_next_state(state, action):
    row, col = state
    if action == 'up' and row > 0 and maze[row - 1, col] == 0:
        next_state = (row - 1, col)
    elif action == 'down' and row < maze.shape[0] - 1 and maze[row + 1, col] == 0:
        next_state = (row + 1, col)
    elif action == 'left' and col > 0 and maze[row, col - 1] == 0:
        next_state = (row, col - 1)
    elif action == 'right' and col < maze.shape[1] - 1 and maze[row, col + 1] == 0:
        next_state = (row, col + 1)
    else:
        next_state = state
    return next_state

def update_q_table(q_table, state, action, reward, next_state, alpha, gamma):
    action_idx = actions.index(action)
    best_next_action_value = np.max(q_table[next_state])
    q_table[state][action_idx] += alpha * (reward + gamma * best_next_action_value - q_table[state][action_idx])

# 训练过程
for episode in range(num_episodes):
    state = start
    while state != end:
        action = choose_action(state, q_table, epsilon)
        next_state = get_next_state(state, action)
        
        # 假设到达终点时获得正奖励,否则无奖励
        reward = 1 if next_state == end else 0
        
        update_q_table(q_table, state, action, reward, next_state, alpha, gamma)
        
        state = next_state

# 测试最优策略
state = start
path = [state]
while state != end:
    action_idx = np.argmax(q_table[state])
    action = actions[action_idx]
    state = get_next_state(state, action)
    path.append(state)

print("Path from start to end:", path)
  • maze数组表示迷宫的布局,其中0代表空地,1代表墙。
  • q_table是一个三维数组,用来存储每个状态-动作对的价值。
  • choose_action函数根据ε-greedy策略选择动作,允许一定程度的探索。
  • get_next_state函数根据当前状态和动作返回下一个状态。
  • update_q_table函数更新Q表中的值,采用贝尔曼方程进行迭代更新。
  • 在训练过程中,代理会不断尝试不同的动作,并通过接收奖励来调整其行为策略。
  • 最后测试经过训练后的策略,输出从起点到终点的最佳路径。

在实际问题中,可能还需要考虑更多复杂的因素,如更大的状态空间、连续的动作空间以及更复杂的奖励机制等。还有许多其他类型的强化学习算法,如Deep Q-Network (DQN)、Policy Gradients、Actor-Critic方法等,可以处理更加复杂的问题。

相关推荐
sel_99 小时前
【PEFT】参数高效微调(PEFT)技术详解:从原理到 LoRA/QLoRA 实战
人工智能·python·深度学习·算法·机器学习·参数高效微调
阳明山水10 小时前
Mamba与两阶段XGBoost的融合架构:面向间歇性需求的双路径预测框架
人工智能·深度学习·算法·机器学习·架构
千里码aicood11 小时前
基于SNMP+LLDP的某企业网络设备管理系统的设计与实现
机器学习
XR12345678811 小时前
办公大楼组网选型决策树:TCO 与三大品牌优劣对比总结
算法·决策树·机器学习
阳明山水11 小时前
Mamba路径如何建模长程时序依赖
人工智能·深度学习·算法·机器学习·架构
咖啡星人k12 小时前
2026 Text-to-SQL:一句话让 AI 写 SQL,自然语言直接查数据库(MonkeyCode 云端实战)
数据库·机器学习·语言模型·自然语言处理
jay神13 小时前
一文讲清楚YOLOv26模型
人工智能·深度学习·yolo·机器学习·计算机视觉
Rocky Ding*14 小时前
【三年面试五年模拟】2026-08-16_拼多多_笔试题与题解全解析
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·拼多多
宣宣猪的小花园.14 小时前
【控制理论】稳定性为什么是一切控制的前提?
人工智能·嵌入式硬件·机器学习
爱分享的康康15 小时前
自动驾驶 HiL 测试选型|主流方案、供应商评估与仿真技术解析
人工智能·机器学习·自动驾驶