Q-Learning 是一种无监督的学习算法,广泛应用于强化学习领域。它通过学习状态与动作之间的最优策略,使智能体在环境中做出最优决策。
什么是 Q-Learning?
Q-Learning 是一种基于值函数的强化学习算法。它通过估计每个状态-动作对的 Q 值(即在该状态下采取该动作的期望回报),来学习最优策略。
Q-Learning 工作原理
- 初始化 Q 表:Q 表是一个二维数组,其中每个元素表示一个状态-动作对。初始时,所有 Q 值都被设置为 0。
- 选择动作:在某个状态下,智能体根据 ε-贪婪策略选择动作。ε-贪婪策略是指以一定概率随机选择动作,以探索未知动作。
- 更新 Q 表:根据智能体执行的动作和得到的奖励,更新 Q 表中对应状态-动作对的 Q 值。
- 重复步骤 2 和 3:重复以上步骤,直到达到停止条件(如达到最大步数或智能体达到目标状态)。
Q-Learning 示例
假设有一个简单的环境,其中智能体可以选择向上、向下、向左或向右移动。智能体的目标是到达终点并获得奖励。
# 示例代码(Python)
import random
# 初始化 Q 表
Q = [[0, 0, 0, 0] for _ in range(5)]
# 定义动作和奖励
actions = ['up', 'down', 'left', 'right']
rewards = {'end': 10, 'hit_wall': -1}
# Q-Learning 算法
def q_learning(Q, actions, rewards, episodes=1000):
for episode in range(episodes):
state = 0
while True:
action = choose_action(Q, state, actions)
next_state, reward = step(state, action, rewards)
Q[state][action] = Q[state][action] + 0.1 * (reward + 0.9 * max(Q[next_state]) - Q[state][action])
state = next_state
if state == 4:
break
# 选择动作
def choose_action(Q, state, actions):
if random.random() < 0.1:
return random.choice(actions)
else:
return max(range(len(Q[state])), key=lambda i: Q[state][i])
# 执行动作
def step(state, action, rewards):
if action == 'up':
next_state = state - 1
elif action == 'down':
next_state = state + 1
elif action == 'left':
next_state = state - 1
elif action == 'right':
next_state = state + 1
else:
next_state = state
if next_state < 0 or next_state >= len(Q):
next_state = state
reward = rewards['hit_wall']
else:
reward = rewards['end']
return next_state, reward
# 运行 Q-Learning 算法
q_learning(Q, actions, rewards)
扩展阅读
更多关于 Q-Learning 的内容,您可以参考以下链接:
希望这份教程能帮助您更好地理解 Q-Learning。😊