动作价值函数

Python 中的 Gymnasium 强化学习

Fouad Trad

Machine Learning Engineer

动作价值函数(Q 值)

  • 期望回报:
    • 起始于状态 $s$
    • 采取动作 $a$
    • 遵循该策略
  • 估计各状态内动作的优劣

展示按特定策略计算某状态-动作对的q值公式:Q(s,a)等于执行动作后的即时回报与折扣后的新状态价值之和。

Python 中的 Gymnasium 强化学习

网格世界

展示自定义环境:两座山和一颗钻石。

  • 状态价值

展示我们先前为各状态计算的状态价值的图片。

Python 中的 Gymnasium 强化学习

Q 值 - 状态 4

展示智能体处于状态4的图片。

  • 智能体出生于状态4

展示我们先前为各状态计算的状态价值的图片。

Python 中的 Gymnasium 强化学习

Q 值 - 状态 4

展示智能体在状态4可执行的4个动作及其回报的图片。

  • 智能体可向上、下、左、右移动

展示我们先前为各状态计算的状态价值的图片。

Python 中的 Gymnasium 强化学习

状态4 - 动作 down

展示智能体从状态4向下移动到状态7的图片。

  • 回报:-2,状态价值:5

展示我们先前为各状态计算的状态价值的图片。

Python 中的 Gymnasium 强化学习

状态4 - 动作 down

展示智能体从状态4向下到状态7,以及对应q值为3的图片。

  • $Q(4, \text{down}) = -2 + 1 \times 5 = 3$

展示我们先前为各状态计算的状态价值的图片。

Python 中的 Gymnasium 强化学习

状态4 - 动作 left

展示智能体从状态4向左到状态3,以及对应q值为1的图片。

  • $Q(4, \text{left}) = -1 + 1 \times 2 = 1$

展示我们先前为各状态计算的状态价值的图片。

Python 中的 Gymnasium 强化学习

状态4 - 动作 up

展示智能体从状态4向上到状态1,以及对应q值为7的图片。

  • $Q(4, \text{up}) = -1 + 1 \times 8 = 7$

展示我们先前为各状态计算的状态价值的图片。

Python 中的 Gymnasium 强化学习

状态4 - 动作 right

展示智能体从状态4向右到状态5,以及对应q值为9的图片。

  • $Q(4, \text{right}) = -1 + 1 \times 10 = 9$

展示我们先前为各状态计算的状态价值的图片。

Python 中的 Gymnasium 强化学习

全部 Q 值

展示我们为所有状态-动作对计算得到的q值的图片。

Python 中的 Gymnasium 强化学习

计算 Q 值

def compute_q_value(state, action):

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

展示按特定策略计算某状态-动作对的q值公式:Q(s,a)等于执行动作后的即时回报与折扣后的新状态价值之和。

Python 中的 Gymnasium 强化学习

计算 Q 值

Q = {(state, action): compute_q_value(state, action)
     for state in range(num_states) 
     for action in range(num_actions)}

print(Q)
Python 中的 Gymnasium 强化学习

计算 Q 值

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

展示我们为所有状态-动作对计算得到的q值的图片。

Python 中的 Gymnasium 强化学习

改进策略

展示我们为所有状态-动作对计算得到的q值的图片。

Python 中的 Gymnasium 强化学习

改进策略

  • 对每个状态选择 Q 值最大的动作

展示所有状态-动作对的q值,并圈出每个状态的最大q值。

Python 中的 Gymnasium 强化学习

改进策略

展示旧策略及其对应的 Q 值的图片 旧策略

当选择通向最大 q 值的动作时的新策略图片。

Python 中的 Gymnasium 强化学习

改进策略

improved_policy = {}


for state in range(num_states-1): max_action = max(range(num_actions), key=lambda action: Q[(state, action)])
improved_policy[state] = max_action
print(improved_policy)
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 1, 
 6: 2, 7: 2}
Python 中的 Gymnasium 强化学习

Passons à la pratique !

Python 中的 Gymnasium 强化学习

Preparing Video For Download...