一个强化学习案例:Q-learning!!

2023-10-24 10:40:35 浏览数 (2)

Hi,我是Johngo~

聊一个强化学习的案例。

强化学习是一种机器学习范式,其中智能体学习通过与环境互动来选择行动以最大化累积奖励。

Q-learning是强化学习的一种算法,用于解决马尔科夫决策过程(MDP)中的问题。

案例概述:Q-learning解决迷宫问题

使用Q-learning算法来训练一个智能体,让它在一个迷宫中找到出口。迷宫是一个2D网格,其中包含障碍物、起始点和目标点。智能体将学习如何在迷宫中移动,以找到最短路径到达目标。

算法原理

Q-learning是一个值迭代算法。

通过学习Q值来选择在每个状态下采取的最佳动作。

Q值表示在特定状态下执行特定动作的长期回报的估计。

代码

实现Q-learning来解决迷宫问题:

代码语言:javascript复制
import numpy as np

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

# 定义Q表格,初始化为0
Q = np.zeros([5, 5])

# 设置超参数
learning_rate = 0.8
discount_factor = 0.95
num_episodes = 1000

# Q-learning算法
for episode in range(num_episodes):
    state = 0  # 初始状态
    while state != 4:  # 直到到达目标
        # 选择动作,使用ε-贪心策略
        if np.random.rand() < 0.5:
            action = np.argmax(Q[state, :])  # 以最大Q值选择动作
        else:
            action = np.random.choice([0, 1, 2, 3])  # 随机选择动作

        # 执行动作并观察下一个状态和奖励
        next_state = action
        reward = -1 if maze[state, action] == 0 else -5

        # 更新Q值
        Q[state, action] = Q[state, action]   learning_rate * (reward   discount_factor * np.max(Q[next_state, :]) - Q[state, action])

        state = next_state  # 进入下一个状态

# 打印训练后的Q表格
print("Q-table:")
print(Q)

# 最优策略
policy = np.argmax(Q, axis=1)
print("Optimal policy:")
print(policy)
  • 首先定义了一个5x5的迷宫,其中1表示障碍物,0表示可通过的区域。
  • 初始化Q表格为全零。
  • 使用Q-learning算法进行训练,迭代多个周期,每个周期中智能体在迷宫中选择动作,并根据奖励和下一个状态来更新Q值。
  • 最后,我们打印训练后的Q表格和最优策略。

案例演示了如何使用Q-learning算法解决迷宫问题,以找到最佳路径。通常,Q-learning可以应用于许多强化学习问题,如机器人导航、游戏策略等。

0 人点赞