[强化学习马里奥 MarioRL]--Q值和V值 2

在强化学习中,“Q值”和“V值”分别对应英文全称为:

  • Q值:全称为 "State-Action Value Function" 或者简称为 "Q-function"。它衡量的是在一个特定的状态下采取一个特定动作后,后续能够获得的预期累积奖励。数学上表示为 ,其中 s 是状态,a 是动作,π 是策略。

  • V值:全称为 "State Value Function"。它衡量的是在给定状态下,遵循某个策略时,后续能够获得的预期累积奖励。数学上表示为 ,其中 s 是状态,π 是策略。

这些值函数是强化学习算法的核心组成部分,用于评估策略的好坏以及指导策略的改进。

Q值和V值是两种用于评估状态和行动的价值指标,它们对于决策过程至关重要。以下是关于Q值和V值的详细解释:

Q值(动作价值函数)概念

Q值衡量了在特定状态采取特定行动后的期望回报。它是一个状态-动作对的函数,记作Q(s, a),表示从状态s开始,采取行动a之后,后续序列的期望累计奖励。

在强化学习中,Q值通常通过某种形式的经验回放和更新规则来估计,比如Q-Learning中的Bellman方程:

这里,α是学习率,γ是折扣因子,r是即时奖励,而Q(s', a')是对下一个状态S'所有可能动作的最大Q值。

V值(状态价值函数)概念

V值衡量的是在特定状态下的期望回报,不考虑具体采取哪种行动。它是一个状态的函数,记作V(s),表示从状态s开始,按照某个策略行动直到结束,后续序列的期望累计奖励。

V值可以通过Q值来计算:

这表示在状态s下,遵循最优策略所能得到的最大Q值。

在策略迭代或值迭代等算法中,V值也可以直接更新,例如在值迭代中:

这里,P(s'|s,a)是从状态s采取动作a转移到状态s'的概率。

Q值和V值在强化学习中分别用于评估特定状态-动作对和特定状态的价值。它们都是基于贝尔曼方程来更新的,并且在实践中,这些值的估计通常是通过智能体与环境的交互以及随后的经验学习逐步改进的。在某些算法中,如Q-Learning和SARSA,直接学习Q值;而在其他算法中,如策略迭代和值迭代,可能直接学习V值并从中导出策略。

Q值(动作价值函数)代码

import numpy as np

# 假设我们有以下参数:
num_states = 10  # 状态的数量
num_actions = 4  # 每个状态可执行的动作数量
learning_rate = 0.1  # 学习率
discount_factor = 0.9  # 折扣因子
epsilon = 0.1  # 探索与利用的平衡

# 初始化Q表为零矩阵
Q = np.zeros((num_states, num_actions))

def update_Q(state, action, reward, next_state):
    global Q
    # 计算TD误差
    td_target = reward + discount_factor * np.max(Q[next_state])
    td_error = td_target - Q[state, action]
    
    # 更新Q值
    Q[state, action] += learning_rate * td_error

def get_action(state):
    if np.random.rand() < epsilon:
        # 探索:随机选择一个动作
        return np.random.choice(num_actions)
    else:
        # 利用:选择具有最高Q值的动作
        return np.argmax(Q[state])

V值(状态价值函数)代码

# 初始化V表为零向量
V = np.zeros(num_states)

def update_V(state, reward, next_state):
    global V
    # 计算TD误差
    td_target = reward + discount_factor * V[next_state]
    td_error = td_target - V[state]
    
    # 更新V值
    V[state] += learning_rate * td_error

请注意,在实际应用中,Q值和V值的更新通常是在智能体与环境交互的过程中进行的。在每次交互后,根据接收到的奖励和下一个状态来更新相应的QV值。此外,Q值可以被用来推导出V值,即V(s) = max_a Q(s,a),这意味着在每个状态下的最大Q值就是该状态的V值。

在更复杂的情况下,如使用神经网络作为函数近似器时,Q值和V值的更新会涉及到梯度下降等优化算法。这种情况下,代码会更加复杂,需要使用深度学习框架如TensorFlow或PyTorch来实现。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值