强化学习智能体怎么训练?用 FrozenLake 跑通表格 Q-learning

训练并独立评估 FrozenLake 的表格策略,区分训练回报与成功率。提供演示输入、可核对结果和适用限制。

入门训练可以先选有限状态和有限动作的 FrozenLake,用 Q 表记录各状态动作的价值。下面完整训练 4000 回合,再在关闭探索的独立环境评估 100 回合。它是教学用确定性冰湖,不代表真实机器人、随机滑冰地图或多智能体问题的效果。

安装依赖并明确任务

使用 Python 3.11 与 Gymnasium 1.3.0:python -m pip install “gymnasium==1.3.0″。4×4 默认地图有 16 个状态、4 个动作,动作顺序以环境文档为准。is_slippery=False 让动作转移确定,回合仍会在落洞、到达终点或时间上限结束。成功奖励来自环境返回值,不通过猜测终止原因累计。

强化学习智能体怎么训练?用 FrozenLake 跑通表格 Q-learning

本例用学习率 0.2、折扣 0.95,探索率逐渐降低到 0.1;并列最大值随机打破,以免初始全零 Q 表总偏向编号最小动作。这些是示例设定,不是通用最佳参数。

保存脚本,完成训练和评估

保存为 train_lake.py 后运行 python train_lake.py。Q 更新只在真正 terminated 时去掉未来价值;时间截断不当成任务的吸收终态。每回合遇到 terminated 或 truncated 都结束当前采样。

import random
import gymnasium as gym
rng = random.Random(7)
train = gym.make("FrozenLake-v1", map_name="4x4", is_slippery=False)
q = [[0.0] * train.action_space.n for _ in range(train.observation_space.n)]
def greedy(state):
    best = max(q[state])
    return rng.choice([a for a, value in enumerate(q[state]) if value == best])
for episode in range(4000):
    state, _ = train.reset(seed=episode)
    epsilon = max(0.1, 1.0 - episode / 2000)
    for _ in range(100):
        action = rng.randrange(4) if rng.random() < epsilon else greedy(state)
        nxt, reward, terminated, truncated, _ = train.step(action)
        target = reward if terminated else reward + 0.95 * max(q[nxt])
        q[state][action] += 0.2 * (target - q[state][action])
        state = nxt
        if terminated or truncated:
            break
train.close()
evaluate = gym.make("FrozenLake-v1", map_name="4x4", is_slippery=False)
success = 0
for episode in range(100):
    state, _ = evaluate.reset(seed=10000 + episode)
    for _ in range(100):
        action = greedy(state)
        state, reward, terminated, truncated, _ = evaluate.step(action)
        if terminated or truncated:
            success += int(reward == 1)
            break
evaluate.close()
print("evaluation successes:", success, "/ 100")
assert len(q) == 16 and len(q[0]) == 4

先验证闭环,再讨论策略效果

成功运行应打印 evaluation successes 和 100 回合中的成功数量。检查 Q 表尺寸为 16×4;评估阶段没有更新 Q,也没有 epsilon 探索。不要用训练最后一回合成功代替整个评估集。若成功数为零,先核对奖励是否被改写、地图配置、动作编号和训练回合数,再观察 Q 表是否仍全零。

确定性地图上的高成功率只说明固定地图被学会,不能证明泛化能力。想比较算法时,应固定地图、奖励和评估口径,用多个训练随机种子分别报告结果;切换 is_slippery=True 后重新训练,不能沿用确定性结果。这里没有神经网络、经验回放或多智能体协作,下一步适合先保存 Q 表并补做另一张地图的独立评估。

资料与核对依据

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32976.html

赞 (0)
AI小管家的头像AI小管家
多智能体环境怎么调用?用 PettingZoo 对照 Parallel 与 AEC
上一篇 23小时前
多智能体奖励函数怎么设计?用双人搬运核对团队目标与个体激励
下一篇 23小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部