策略与状态价值函数

Python 中的 Gymnasium 强化学习

Fouad Trad

Machine Learning Engineer

策略

  • 强化学习目标 → 制定有效策略
  • 指定各状态应采取的动作以最大化回报

一张大型路线图。

Python 中的 Gymnasium 强化学习

网格世界示例

  • 智能体目标:到达钻石并避开山
  • 九个状态
  • 确定性移动

action_numbers_green.png

自定义环境:9 个网格,两格为山,一格为钻石。

Python 中的 Gymnasium 强化学习

网格世界示例——回报

  • 按状态给定:
    • 钻石:+10

从相邻格移动到钻石的回报为 +10。

Python 中的 Gymnasium 强化学习

网格世界示例——回报

  • 按状态给定:
    • 钻石:+10
    • 山:-2

到达山的动作回报为 -2。

Python 中的 Gymnasium 强化学习

网格世界示例——回报

  • 按状态给定:
    • 钻石:+10
    • 山:-2
    • 其他状态:-1

任何其他移动的回报为 -1。

Python 中的 Gymnasium 强化学习

网格世界示例:策略

# 0: left, 1: down, 2: right, 3: up
policy = {
    0:1, 1:2, 2:1, 
    3:1, 4:3, 5:1,
    6:2, 7:3
}

state, info = env.reset() terminated = False while not terminated: action = policy[state] state, reward, terminated, _, _ = env.step(action)

用箭头表示状态间移动的策略图。

Python 中的 Gymnasium 强化学习

状态价值函数

  • 评估状态的价值
  • 从该状态出发、遵循策略的期望回报

状态价值函数公式:从状态 s 出发按策略的折扣回报。

Python 中的 Gymnasium 强化学习

网格世界示例:状态价值

用箭头表示状态间移动的策略图。

  • 九个状态 → 九个状态价值
  • 折扣因子:$\gamma = 1$
Python 中的 Gymnasium 强化学习

目标状态的价值

智能体处于目标状态。

  • 从目标状态开始,智能体不再移动
  • $V(\text{goal state}) = 0$

目标状态的价值为 0

Python 中的 Gymnasium 强化学习

状态 5 的价值

智能体处于状态 5。

  • 从 5 开始,智能体到达目标
  • $V(5) = 10$

状态 5 的价值为 10

Python 中的 Gymnasium 强化学习

状态 2 的价值

智能体处于状态 2。

  • 从 2 开始,回报:$-1, 10$
  • $ V(2) = (1 \times -1) + (1 \times 10) = 9$

状态 2 的价值为 9。

Python 中的 Gymnasium 强化学习

全部状态价值

环境 9 个状态的全部状态价值。

Python 中的 Gymnasium 强化学习

贝尔曼方程

  • 递归公式
  • 用于计算状态价值

贝尔曼方程:当前状态的即时回报 + 下一状态的折扣价值。

Python 中的 Gymnasium 强化学习

计算状态价值

def compute_state_value(state):

if state == terminal_state: return 0
action = policy[state]
_, next_state, reward, _ = env.unwrapped.P[state][action][0]
return reward + gamma * compute_state_value(next_state)

贝尔曼方程:当前状态的即时回报 + 下一状态的折扣价值。

Python 中的 Gymnasium 强化学习

计算状态价值

terminal_state = 8
gamma = 1

V = {state: compute_state_value(state) for state in range(num_states)}
print(V)
{0: 1, 1: 8, 2: 9, 
 3: 2, 4: 7, 5: 10, 
 6: 3, 7: 5, 8: 0}

环境 9 个状态的全部状态价值。

Python 中的 Gymnasium 强化学习

更换策略

# 0: left, 1: down, 2: right, 3: up
policy_two = {
    0:2, 1:2, 2:1,
    3:2, 4:2, 5:1,
    6:2, 7:2
}

V_2 = {state: compute_state_value(state) for state in range(num_states)} print(V_2)

用箭头表示状态间移动的策略图。

Python 中的 Gymnasium 强化学习

比较策略

策略 1 的状态价值

{0: 1, 1: 8, 2: 9, 
 3: 2, 4: 7, 5: 10, 
 6: 3, 7: 5, 8: 0}

策略 1 的状态价值图。

策略 2 的状态价值

{0: 7, 1: 8, 2: 9, 
 3: 7, 4: 9, 5: 10, 
 6: 8, 7: 10, 8: 0}

策略 2 的状态价值图。

Python 中的 Gymnasium 强化学习

开始练习!

Python 中的 Gymnasium 强化学习

Preparing Video For Download...