小琳AI课堂 探索强化学习:通过Python迷宫示例掌握Q-learning算法
大家好,这里是小琳AI课堂。今天我们通过一个Python示例来进一步理解强化学习中的Q-learning算法。这个示例将带我们穿越一个迷宫,用代码的形式展示智能体是如何通过试错来找到出口的。🔍
首先,我们需要安装两个Python库:numpy
和pandas
。如果你还没有安装它们,可以通过以下命令来安装:
pip install numpy
pip install pandas
接下来,我们定义一个迷宫环境MazeEnv
类。这个类包含了迷宫的地图、起始点和终点。我们的智能体需要在迷宫中找到通往终点的路径。
在MazeEnv
类中,我们有两个关键方法:
reset
:将智能体放回起始点,为新的回合做准备。step
:智能体在这个方法中执行动作,环境根据动作给出新的状态、奖励和是否完成标志。
import numpy as np
import pandas as pd
# 定义环境
class MazeEnv:
def __init__(self):
self.maze = np.array([
[0, 0, 0, 0, 0],
[0, -1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
])
self.start = (0, 0)
self.end = (3, 4)
def reset(self):
self.position = self.start
return self.position
def step(self, action):
if action == 'up':
new_position = (self.position[0] - 1, self.position[1])
elif action == 'down':
new_position = (self.position[0] + 1, self.position[1])
elif action == 'left':
new_position = (self.position[0], self.position[1] - 1)
elif action == 'right':
new_position = (self.position[0], self.position[1] + 1)
# 检查是否超出边界
if (new_position[0] < 0 or new_position[0] >= self.maze.shape[0]) or \
(new_position[1] < 0 or new_position[1] >= self.maze.shape[1]):
reward = -1
done = False
else:
# 更新位置
self.position = new_position
# 如果到达终点,给予奖励并结束回合
if self.position == self.end:
reward = 10
done = True
# 如果碰到障碍物,给予惩罚
elif self.maze[new_position] == -1:
reward = -10
done = True
else:
reward = -0.04
done = False
return self.position, reward, done
# Q-learning算法
def q_learning(env, episodes=1000, learning_rate=0.1, discount_factor=0.99, epsilon=0.1):
actions = ['up', 'down', 'left', 'right']
q_table = pd.DataFrame(0, index=[str(i) for i in range(env.maze.size)], columns=actions)
for episode in range(episodes):
state = str(env.reset())
done = False
while not done:
if np.random.uniform(0, 1) < epsilon:
action = np.random.choice(actions)
else:
action = q_table.loc[state].idxmax()
next_state, reward, done = env.step(action)
next_state = str(next_state)
max_future_q = q_table.loc[next_state].max()
current_q = q_table.loc[state, action]
new_q = (1 - learning_rate) * current_q + learning_rate * (reward + discount_factor * max_future_q)
q_table.loc[state, action] = new_q
state = next_state
return q_table
env = MazeEnv()
q_table = q_learning(env)
print(q_table)
MazeEnv 类:定义了一个简单的迷宫环境,其中包括迷宫地图、起始点和终点。 reset 方法:将智能体重置到起始位置,并返回当前位置。
step 方法:接收一个动作作为输入,并返回新的状态、奖励和是否完成标志。 q_learning
函数:实现了Q-learning算法,它通过不断尝试动作并更新Q-table来学习最优策略。
这个算法通过不断尝试和更新一个叫做Q-table的数据结构来学习最优策略。Q-table记录了在不同状态下,执行不同动作的预期奖励。
在Q-learning算法中,我们遍历多个回合(episodes),在每个回合中,智能体都会尝试不同的动作,并根据动作的结果更新Q-table。智能体有时会随机选择动作(探索),有时则会选择当前看起来最优的动作(利用)。
最后,我们打印出Q-table,它展示了在不同状态下,智能体应该选择哪个动作来最大化长期奖励。
这个示例虽然简单,但它展示了强化学习的基本原理:智能体通过与环境交互,不断学习如何在给定的环境中做出最优决策。这就是强化学习的魅力所在,它让机器能够通过经验来学习和适应复杂的环境。
希望这个示例能帮助你更好地理解强化学习。如果你有任何问题或想法,欢迎在评论区留言分享!👇
本期的小琳AI课堂就到这里,希望你喜欢今天的内容!下期见!👋