强化学习示例 | AI生成和翻译
下面我将通过几个简单的概念示例来介绍强化学习(RL),并附上一个基于简单场景的基础Python代码示例。强化学习涉及智能体通过与环境交互来学习最大化奖励,因此这些示例和代码都将体现这一核心思想。
强化学习简单示例
- 孩童学步
- 智能体:孩童
- 环境:地面或房间
- 动作:迈步、爬行或静止
- 奖励:向前移动(+1)、摔倒(-1)
- 学习机制:孩童通过试错学习保持平衡迈步才能前进
- 训练机械臂抓取物体
- 智能体:机械臂
- 环境:放置物体的桌面
- 动作:上下左右移动或抓取
- 奖励:成功抓取(+10)、掉落物体(-5)
- 学习机制:机械臂通过调整动作最大化抓取成功率
- 网格世界游戏
- 智能体:网格中的角色
- 环境:含目标点与障碍物的3×3网格
- 动作:上下左右移动
- 奖励:抵达目标(+10)、撞墙(-1)
- 学习机制:角色学习前往目标的最短路径
Python代码示例:网格世界中的Q学习
以下是通过Q学习算法(一种经典RL算法)在简单一维”世界”中的基础实现。智能体通过左右移动抵达目标,并根据奖励更新Q表进行学习。
import numpy as np
import random
# 环境设置:5个位置的一维世界(0到4),目标位于位置4
state_space = 5 # 位置:[0, 1, 2, 3, 4]
action_space = 2 # 动作:0=左移, 1=右移
goal = 4
# 初始化Q表(状态×动作)
q_table = np.zeros((state_space, action_space))
# 超参数设置
learning_rate = 0.1
discount_factor = 0.9
exploration_rate = 1.0
exploration_decay = 0.995
min_exploration_rate = 0.01
episodes = 1000
# 奖励函数
def get_reward(state):
if state == goal:
return 10 # 抵达目标获得高额奖励
return -1 # 每步消耗小额惩罚
# 状态转移函数:执行动作并获取新状态
def step(state, action):
if action == 0: # 左移
new_state = max(0, state - 1)
else: # 右移
new_state = min(state_space - 1, state + 1)
reward = get_reward(new_state)
done = (new_state == goal)
return new_state, reward, done
# 训练循环
for episode in range(episodes):
state = 0 # 从位置0开始
done = False
while not done:
# 探索与利用权衡
if random.uniform(0, 1) < exploration_rate:
action = random.randint(0, action_space - 1) # 随机探索
else:
action = np.argmax(q_table[state]) # 利用已有知识
# 执行动作并观察结果
new_state, reward, done = step(state, action)
# 通过Q学习公式更新Q表
old_value = q_table[state, action]
next_max = np.max(q_table[new_state])
new_value = (1 - learning_rate) * old_value + learning_rate * (reward + discount_factor * next_max)
q_table[state, action] = new_value
# 转移到新状态
state = new_state
# 探索率衰减
exploration_rate = max(min_exploration_rate, exploration_rate * exploration_decay)
# 测试学习策略
state = 0
steps = 0
print("测试学习策略:")
while state != goal:
action = np.argmax(q_table[state])
state, reward, done = step(state, action)
steps += 1
print(f"步骤{steps}:移动到状态{state},动作:{'左移' if action == 0 else '右移'}")
print(f"经过{steps}步抵达目标!")
# 输出Q表
print("\n学习得到的Q表:")
print(q_table)
代码解析
- 环境:包含5个位置(0-4)的一维直线,目标位于位置4
- 动作:智能体可执行左移(0)或右移(1)
- 奖励:抵达目标奖励+10,每步消耗惩罚-1(鼓励高效路径)
- Q表:存储每个状态-动作对的预期未来奖励
- Q学习:通过公式更新Q表:
Q(s, a) = (1 - α) * Q(s, a) + α * (奖励 + γ * max(Q(s', a'))),其中:α= 学习率γ= 折扣因子s= 当前状态,a= 动作,s'= 下一状态
- 探索与利用:通过
exploration_rate控制智能体随机探索或利用Q表决策
示例输出
测试学习策略:
步骤1:移动到状态1,动作:右移
步骤2:移动到状态2,动作:右移
步骤3:移动到状态3,动作:右移
步骤4:移动到状态4,动作:右移
经过4步抵达目标!
学习得到的Q表:
[[-2.5 2.3]
[-1.8 4.5]
[-1.2 6.8]
[-0.5 9. ]
[ 0. 0. ]]
智能体学会从任意起始位置持续右移以高效抵达目标。Q表显示越接近目标位置,”右移”动作对应的值越高。
这虽然是最基础的示例,但展现了强化学习的核心思想。对于更复杂场景(如二维网格或游戏),需要相应扩展状态和动作空间!