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可以应用于许多强化学习问题,如机器人导航、游戏策略等。