1. 强化学习与迷宫问题的完美结合

第一次接触强化学习时,我被它"试错学习"的特性深深吸引。想象一下,如果让一个完全不懂迷宫规则的小老鼠自己摸索出路,它会怎么做?这就是强化学习最迷人的地方——不需要预先编程所有规则,智能体能在与环境互动中自主学习。

在迷宫问题中,强化学习的七大要素展现得淋漓尽致:

  • 智能体:就是那只寻找出口的小老鼠
  • 环境:整个迷宫布局,包括墙壁、通道和出口
  • 状态:老鼠当前所在的格子位置
  • 动作:老鼠能做的移动选择(上下左右)
  • 奖励:移动后的即时反馈(撞墙扣分,找到出口加分)
  • 策略:老鼠决定移动方向的"思考方式"
  • 值函数:对每个位置"好坏"的长期评估

我曾在项目中用8×8网格搭建迷宫环境,设置-20分惩罚撞墙,+10分奖励找到出口。有趣的是,最初智能体像个无头苍蝇,但经过几百次尝试后,它竟能规划出最优路径。这种从零开始的进化过程,正是强化学习的魅力所在。

2. 马尔可夫决策过程:迷宫问题的数学语言

要把迷宫问题转化为强化学习任务,我们需要马尔可夫决策过程(MDP)这个数学框架。去年做自动驾驶避障项目时,我深刻体会到MDP的重要性——它把看似复杂的决策问题,拆解成可计算的组件。

在迷宫MDP中:

  1. 状态空间:每个格子就是一个状态,用坐标(x,y)表示
  2. 动作空间:{上,下,左,右}四个基本移动
  3. 转移概率:在简单迷宫中,移动是确定的。比如执行"右"动作,必定移动到右侧格子
  4. 奖励函数:需要精心设计。我的经验是:
    • 到达出口:+10
    • 撞墙:-20
    • 普通移动:-0.01(鼓励尽快找到出口)
# 迷宫奖励矩阵示例
rewards = np.zeros((8,8)) - 0.01
rewards[7,7] = 10  # 出口
rewards[0,2] = -20 # 墙壁
rewards[3,5] = -20 # 墙壁

设计奖励函数是个技术活。太严厉的惩罚会让智能体畏手畏脚,太宽松又会导致学习效率低下。经过多次调试,我发现惩罚值设为奖励绝对值的2倍效果最佳。

3. 策略迭代:稳扎稳打的优化之道

策略迭代就像一位谨慎的棋手,每走一步都反复推演。它包含两个交替进行的阶段:

3.1 策略评估:给当前策略打分

假设智能体采用随机策略(25%概率选择每个方向),我们需要计算每个状态的价值。这需要解贝尔曼方程:

def policy_evaluation(policy, values, rewards, gamma=0.9):
    while True:
        delta = 0
        new_values = values.copy()
        for s in range(64):  # 64个状态
            v = 0
            for a in range(4):  # 4个动作
                next_s = get_next_state(s, a)
                v += policy[s][a] * (rewards[s] + gamma * values[next_s])
            delta = max(delta, abs(v - values[s]))
            new_values[s] = v
        values = new_values
        if delta < 1e-6:
            break
    return values

在实验中,我发现gamma(折扣因子)取值很关键。0.9能让智能体既关注眼前利益,又考虑长远收益。

3.2 策略改进:让策略更贪婪

评估完价值函数后,我们更新策略,让智能体在每个状态选择价值最高的动作:

def policy_improvement(values, policy, rewards, gamma=0.9):
    policy_stable = True
    for s in range(64):
        old_action = np.argmax(policy[s])
        q_values = []
        for a in range(4):
            next_s = get_next_state(s, a)
            q_values.append(rewards[s] + gamma * values[next_s])
        best_action = np.argmax(q_values)
        policy[s] = np.eye(4)[best_action]
        if old_action != best_action:
            policy_stable = False
    return policy, policy_stable

实际运行中,通常需要10-20次完整迭代才能收敛。有趣的是,前期策略改进幅度很大,后期则越来越精细。

4. 值迭代:一步到位的优化捷径

相比策略迭代的"评估-改进"循环,值迭代更加直接。它持续更新价值函数,直到收敛后再提取最优策略。这就像直接计算每个位置到出口的最短距离,再反推移动方案。

值迭代的核心公式依然是贝尔曼最优方程:

def value_iteration(rewards, gamma=0.9, theta=1e-6):
    values = np.zeros(64)
    while True:
        delta = 0
        for s in range(64):
            v = values[s]
            q_values = []
            for a in range(4):
                next_s = get_next_state(s, a)
                q_values.append(rewards[s] + gamma * values[next_s])
            values[s] = max(q_values)
            delta = max(delta, abs(v - values[s]))
        if delta < theta:
            break
    
    # 提取最优策略
    policy = np.zeros((64,4))
    for s in range(64):
        q_values = []
        for a in range(4):
            next_s = get_next_state(s, a)
            q_values.append(rewards[s] + gamma * values[next_s])
        best_action = np.argmax(q_values)
        policy[s,best_action] = 1
    return values, policy

在8×8迷宫中,值迭代通常比策略迭代快3-5倍。但有个trade-off:值迭代的中间策略不一定可用,必须等完全收敛。而策略迭代的中间结果虽然次优,但已经可以运行。

5. 实战技巧与避坑指南

在真实项目中实现这些算法时,我踩过不少坑:

学习率(α)选择:
刚开始我直接用1.0的学习率,导致Q值剧烈震荡。后来采用从0.5线性衰减到0.1的方案,既保证初期快速学习,又确保后期稳定。

探索-利用平衡:
ε-greedy策略中,固定ε=0.1会让智能体后期仍做无谓探索。更好的方案是让ε从0.5指数衰减到0.01,兼顾初期探索和后期利用。

奖励塑形:
单纯设置终点奖励会导致学习缓慢。我后来增加了"距离奖励"——离出口越近奖励越高,学习速度提升了3倍:

# 改进后的奖励函数
def get_reward(state, exit_pos):
    base = -0.01
    distance = np.linalg.norm(np.array(state)-np.array(exit_pos))
    return base - 0.1*distance  # 离出口越近,惩罚越小

收敛判断:
早期我只看值函数变化幅度,后来发现还需检查策略稳定性。现在我会同时监控两个指标:

  1. 最大状态值变化 < 1e-4
  2. 连续3次迭代策略不变

6. 超越迷宫:更复杂的应用场景

掌握迷宫问题后,我发现这套方法可以迁移到许多场景:

游戏AI开发:
用同样的框架训练游戏NPC,把地图位置作为状态,把移动、攻击作为动作。在塔防游戏中,敌人能自主学习最优进攻路线。

机器人路径规划:
把真实环境栅格化后,机器人就能自主避障。我在ROS机器人上测试时,即使临时加入障碍物,机器人也能快速重新规划。

资源调度优化:
把服务器集群状态作为状态,把任务分配方案作为动作,奖励函数设为吞吐量减去能耗。某次实验显示,这种方法的调度效率比传统算法高15%。

这些扩展应用中,状态空间可能变得很大。这时就需要用深度强化学习,用神经网络近似价值函数或策略函数。不过基础原理,依然是我们从迷宫问题中学到的这些核心思想。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐