强化学习入门介绍--马尔可夫决策过程、最优化原理、贝尔曼方程

强化学习介绍

强化学习是一种优化智能体在环境中行为的一种方法。根据环境反馈的奖励,调整智能体的行为策略,提升智能体实现目标的能力。

以训练狗握手为例,当狗把前爪放在训练人手中,训练人会给狗食物作为奖励,否则不给食物。经长时间训练后,狗会主动和人握手。

这里,狗是智能体,训练人给的食物相当于环境反馈的奖励,狗通过这个奖励会不断调整自己的行为,主动学会握手动作。

强化学习考虑的是序贯决策过程

序贯决策过程(Sequential Decision Making):智能体处在特定的环境中产生一系列的动作,而环境能够根据这些动作改变智能体的当前状态

到这里我们可以知道,学习过程中没有明确告诉采取哪些动作是可以实现目标的,只能通过间接的奖励信号反映目标实现的情况。

所以,强化学习也称为试错法(trail-and-error),通过智能体和环境的交互得到反馈的信号。学习策略可以简单总结为强化正反馈的策略,避免负反馈的策略。强化学习不太适合于无法进行大量实验的场景,比如安全因素(开车碰撞)。但是如果能建立仿真模型且精度满足要求时,在仿真环境使用强化学习方法得到的策略依然能够在实际应用中有很好的效果。

在强化学习中,奖励是一个很重要的概念。智能体通过环境反馈的奖励去调整行为决策。

奖励是一个标量的反馈信号,表示智能体在时刻 t 下行为或所处状态的好坏,智能体的任务是最大化累加奖励。

智能体通过反馈的奖励调整行为是基于所有的目标都可以通过最大化期望累加奖励实现这一假设的。

与其他机器学习的不同

强化学习监督学习/非监督学习
产生的结果(动作)能够改变数据的分布(状态)产生的结果(输出)不会改变数据的分布
最终的目标可能要很长时间才能观察到结果是瞬时的
没有明确的标签数据要么有明确的标签数据,要么完全没有任何标签数据

马尔可夫决策过程

我们在前面讲过序贯决策过程(Sequential Decision Making),其目标是选择一组动作使未来奖励和最大化,动作可能在未来很久才会产生影响,奖励可能是延迟的,在学习中可能会牺牲短期利益从而获得长期的回报。

马尔可夫性(Markov Property)

强化学习主要研究的是具有马尔可夫性的问题。

智能体未来的状态只与当前时刻的状态 S t S_t St 有关,而与过去的状态 { S 1 , … , S t − 1 } \{S_1,\dots,S_{t-1}\} {S1,,St1} 无关,那么称智能体的模型具有马尔可夫性

P [ S t + 1 ∣ S t ] = P [ S t + 1 ∣ S 1 , … , S t ] \mathbb{P}[S_{t+1}|S_t]=\mathbb{P}[S_{t+1}|S_1,\dots,S_t] P[St+1St]=P[St+1S1,,St]

也就是说,未来只与当前有关,与历史无关,一旦当前状态确定了,历史状态也可以丢弃了,也就是说当前状态足以决定未来状态是什么样的。

S 1 : t → S t → S t + 1 : ∞ S_{1:t}\rightarrow S_t\rightarrow S_{t+1:\infty} S1:tStSt+1:

状态转移矩阵

对于一个马尔可夫状态 s s s 和后继状态 s ′ s' s,状态转移概率定义为 P s s ′ = P [ S t + 1 = s ′ ∣ S t = s ] \mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s] Pss=P[St+1=sSt=s]

状态转移矩阵 P \mathcal{P} P 定义从所有状态 s s s 到所有后继状态 s ′ s' s 的转移概率

P = [ P 11 … P 1 n ⋮ ⋱ ⋮ P n 1 … P n n ] \mathcal{P}=\begin{bmatrix}\mathcal{P}_{11} & \ldots & \mathcal{P}_{1n} \\ \vdots & \ddots & \vdots \\ \mathcal{P}_{n1} & \ldots & \mathcal{P}_{nn} \\ \end{bmatrix} P=P11Pn1P1nPnn

其中,矩阵的每行和等于1。

马尔可夫过程(Markov Process)

一个马尔可夫过程是一个无记忆的随机过程,即一组具有马尔可夫性的随机状态序列 S 1 , S 2 , … S_1,S_2,\dots S1,S2,

定义

一个马尔可夫过程(或马尔可夫链)可以用一组 < S , P > <\mathcal{S,P}> <S,P> 表示

  • S \mathcal{S} S 是(有限)状态集
  • P \mathcal{P} P 是状态转移概率矩阵 P s s ′ = P [ S t + 1 = s ′ ∣ S t = s ] \mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s] Pss=P[St+1=sSt=s]

马尔可夫奖励过程(Markov Reward Process)

一个马尔可夫奖励过程是一个马尔可夫链加上奖励。

定义

一个马尔可夫奖励过程由一组 < S , P , R , γ > <\mathcal{S,P,R},\gamma> <S,P,R,γ> 构成

  • S \mathcal{S} S 是一组有限状态集
  • P \mathcal{P} P 是状态转移概率矩阵 P s s ′ = P [ S t + 1 = s ′ ∣ S t = s ] \mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s] Pss=P[St+1=sSt=s]
  • R \mathcal{R} R 是奖励函数, R s = E [ R t + 1 ∣ S t = s ] \mathcal{R}_s=\mathbb{E}[R_{t+1}|S_t=s] Rs=E[Rt+1St=s]
  • γ \gamma γ 是折扣因子, γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]

回报(Return)

定义

回报 G t G_t Gt 代表从 t 时刻往后所有的折扣奖励
G t = R t + 1 + γ R t + 2 + ⋯ = ∑ k = 0 ∞ γ k R t + k + 1 G_t=R_{t+1}+\gamma R_{t+2}+\dots=\sum_{k=0}^{\infty}\gamma^kR_{t+k+1} Gt=Rt+1+γRt+2+=k=0γkRt+k+1

  • 折扣因子 γ ∈ [ 0 , 1 ] \gamma \in[0,1] γ[0,1] 代表未来的奖励在当前时刻贡献的价值
  • k + 1 k+1 k+1 时刻后的奖励 R R R 对当前回报的贡献只有 γ k R \gamma^k R γkR
  • 这种定义形式更重视近期的奖励,忽视远期的奖励
    • γ \gamma γ越接近0,回报越是“目光短浅”
    • γ \gamma γ越接近1,回报越是“目光长远”

大部分的马尔可夫奖励和决策过程都使用折扣因子,为什么?

  1. 如果想要调整奖励的重要性,数学上方便实现
  2. 在循环马尔可夫过程问题中能避免无穷回报

但是使用折扣因子有可能会忽视未来奖励,如果奖励代表金钱,近期的奖励会比远期的奖励产生更多的收益。自然界的人类或动物行为模式更倾向于近期奖励,有时候也会使用无折扣的马尔可夫奖励过程,例如所有事件序列都有终止状态。

价值函数与MRPs的贝尔曼方程(Bellman Equation)

价值函数 v ( s ) v(s) v(s) 代表智能体在状态 s s s 下的长期价值。

定义

一个马尔可夫奖励过程的状态价值函数等于从状态 s 出发的期望回报
v ( s ) = E [ G t ∣ S t = s ] v(s)=\mathbb{E}[G_t|S_t=s] v(s)=E[GtSt=s]

将价值函数拆分成两部分

  • 瞬时奖励 R t + 1 R_{t+1} Rt+1
  • 后继状态的折扣价值 γ v ( S t + 1 ) \gamma v(S_{t+1}) γv(St+1)

v ( s ) = E [ G t ∣ S t = s ] = E [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + … ∣ S t = s ] = E [ R t + 1 + γ ( R t + 2 + γ R t + 3 + …   ) ∣ S t = s ] = E [ R t + 1 + γ G t + 1 ∣ S t = s ] = E [ R t + 1 + γ v ( S t + 1 ) ∣ S t = s ] v(s) = \mathbb{E}[G_t|S_t=s] = \mathbb{E}[R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\dots|S_t=s]=\mathbb{E}[R_{t+1}+\gamma(R_{t+2}+\gamma R_{t+3}+\dots)|S_t=s]=\mathbb{E}[R_{t+1}+\gamma G_{t+1}|S_t=s]=\mathbb{E}[R_{t+1}+\gamma v(S_{t+1})|S_t=s] v(s)=E[GtSt=s]=E[Rt+1+γRt+2+γ2Rt+3+St=s]=E[Rt+1+γ(Rt+2+γRt+3+)St=s]=E[Rt+1+γGt+1St=s]=E[Rt+1+γv(St+1)St=s]

v ( s ) = E [ R t + 1 + γ v ( S t + 1 ) ∣ S t = s ] = R s + γ ∑ s ′ ∈ S P s s ′ v ( s ′ ) v(s)=\mathbb{E}[R_{t+1}+\gamma v(S_{t+1})|S_t=s]=\mathcal{R}_s+\gamma\sum_{s'\in S}\mathcal{P}_{ss'}v(s') v(s)=E[Rt+1+γv(St+1)St=s]=Rs+γsSPssv(s)

用矩阵精确地表示贝尔曼方法

v = R + γ P v v=\mathcal{R}+\gamma\mathcal{P}v v=R+γPv

其中列向量 v v v 的每一项对应一个状态

[ v ( 1 ) ⋮ v ( n ) ] = [ R ( 1 ) ⋮ R ( n ) ] + γ [ P 11 … P 1 n ⋮ ⋱ ⋮ P n 1 … P n n ] [ v ( 1 ) ⋮ v ( n ) ] \begin{bmatrix}v(1) \\ \vdots \\ v(n) \end{bmatrix}=\begin{bmatrix}\mathcal{R}(1) \\ \vdots \\ \mathcal{R}(n) \end{bmatrix}+\gamma \begin{bmatrix}\mathcal{P}_{11} & \ldots & \mathcal{P}_{1n} \\ \vdots & \ddots & \vdots \\ \mathcal{P}_{n1} & \ldots & \mathcal{P}_{nn} \\ \end{bmatrix}\begin{bmatrix}v(1) \\ \vdots \\ v(n)\end{bmatrix} v(1)v(n)=R(1)R(n)+γP11Pn1P1nPnnv(1)v(n)

贝尔曼方程是线性方程,可以直接求解:
v = R + γ P v v=\mathcal{R}+\gamma\mathcal{P}v v=R+γPv
( I − γ P ) = R (I-\gamma\mathcal{P})=\mathcal{R} (IγP)=R
v = ( I − γ P ) − 1 R v=(I-\gamma\mathcal{P})^{-1}\mathcal{R} v=(IγP)1R

n 个状态下的计算复杂度 O ( n 3 ) O(n^3) O(n3)

对于大规模的 MRPs 问题,可以使用迭代的方法,例如

  • 动态规划
  • 蒙特卡洛估计
  • 时间差分学习

马尔可夫决策过程(Markov Decision Process)

马尔可夫决策过程是马尔可夫奖励过程中加上决策。问题的所有状态都具有马尔可夫性。

定义

一个马尔可夫决策过程由 < S , A , P , R , γ > <\mathcal{S,A,P,R},\gamma> <S,A,P,R,γ> 组成

  • S \mathcal{S} S 是有限状态集
  • A \mathcal{A} A 是有限动作集
  • P \mathcal{P} P 是状态转移概率矩阵
    P s s ′ a = P [ S t + 1 = s ′ ∣ S t = s , A t = a ] \mathcal{P}_{ss'}^a=\mathbb{P}[S_{t+1}=s'|S_t=s,A_t=a] Pssa=P[St+1=sSt=s,At=a]
  • R \mathcal{R} R 是奖励函数, R s a = E [ R t + 1 ∣ S t = s , A t = a ] \mathcal{R}_s^a=\mathbb{E}[R_{t+1}|S_t=s,A_t=a] Rsa=E[Rt+1St=s,At=a]
  • γ \gamma γ是折扣因子, γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]

强化学习主要元素

一个强化学习的智能体可能包括以下一个或多个元素:

  1. 策略:智能体的行为
  2. 价值函数(值函数、性能指标函数):智能体在某一状态和/或某一动作时是好还是坏
  3. 模型:智能体对真实环境的估计

策略(Policy)

策略代表了智能体是如何行为的,是从状态到动作的映射,例如:

  • 确定性策略: a = π ( s ) a=\pi(s) a=π(s)
  • 随机性策略: π ( a ∣ s ) = P [ A t = a ∣ S t = s ] \pi(a|s)=\mathbb{P}[A_t=a|S_t=s] π(as)=P[At=aSt=s]

定义

策略 π \pi π 是状态到动作的一种分布
π ( a ∣ s ) = P [ A t = a ∣ S t = s ] \pi(a|s)=\mathbb{P}[A_t=a|S_t=s] π(as)=P[At=aSt=s]

一个策略定义了一个智能体的行为。马尔可夫决策过程(MDP)问题的策略,即策略是静态的(时不变性)。

A t ~ π ( ⋅ ∣ S t ) , ∀ t > 0 A_t~\pi(·|S_t),\forall t > 0 Atπ(St),t>0

给定一个 MDP 的 M = < S , A , P , R , γ > \mathcal{M}=<\mathcal{S,A,P,R},\gamma> M=<S,A,P,R,γ> 和策略 π \pi π,状态序列 S 1 , S 2 , … S_1,S_2,\dots S1,S2, 是一个马尔可夫过程 < S , P π > <\mathcal{S,P}^\pi> <S,Pπ>,状态和奖励序列 S 1 , R 2 , S 2 , … S_1,R_2,S_2,\dots S1,R2,S2, 是一个马尔可夫奖励过程 < S , P π , R π , γ > <\mathcal{S},\mathcal{P}^\pi,\mathcal{R}^\pi,\gamma> <S,Pπ,Rπ,γ>,其中
P s s ′ π = ∑ a ∈ A π ( a ∣ s ) P s s ′ a \mathcal{P}_{ss'}^\pi=\sum_{a\in\mathcal{A}}\pi(a|s)\mathcal{P}_{ss'}^a Pssπ=aAπ(as)Pssa
R s π = ∑ a ∈ A π ( a ∣ s ) R s a \mathcal{R}_{s}^\pi=\sum_{a\in\mathcal{A}}\pi(a|s)\mathcal{R}_{s}^a Rsπ=aAπ(as)Rsa

价值函数(Value Function)

价值函数是对未来奖励的预测,可以评估智能体在某一状态下是好还是坏,因而可以用来选择对智能体最有利的动作。
v π ( s ) = E π [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + … ∣ S t = s ] v_\pi(s)=\mathbb{E}_\pi[R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\dots|S_t=s] vπ(s)=Eπ[Rt+1+γRt+2+γ2Rt+3+St=s]

定义

  • MDP的状态-价值函数 v π ( s ) v_\pi(s) vπ(s) 定义为从状态 s 出发,在策略 π \pi π 作用下的期望回报
    v π ( s ) = E [ G t ∣ S t = s ] v_\pi(s)=\mathbb{E}[G_t|S_t=s] vπ(s)=E[GtSt=s]
  • 动作-价值函数 q π ( s , a ) q_\pi(s,a) qπ(s,a) 是从状态 s 出发,首先执行动作 a,然后在策略 π \pi π 作用下的期望回报
    q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] q_\pi(s,a)=\mathbb{E}_\pi[G_t|S_t=s,A_t=a] qπ(s,a)=Eπ[GtSt=s,At=a]

模型(model)

当环境未知时,智能体自己辨识模型来预测环境下一时刻的状态和奖励是什么样的。 P \mathcal{P} P预测下一时刻的状态, R \mathcal{R} R预测下一时刻(瞬时)的奖励。

P s s ′ a = P [ S t + 1 = s ′ ∣ S t = s , A t = a ] \mathcal{P}_{ss'}^a=\mathbb{P}[S_{t+1}=s'|S_t=s,A_t=a] Pssa=P[St+1=sSt=s,At=a]

R s a = E [ R t + 1 ∣ S t = s , A t = a ] \mathcal{R}_s^a=\mathbb{E}[R_{t+1}|S_t=s,A_t=a] Rsa=E[Rt+1St=s,At=a]

贝尔曼期望方程

状态价值函数同样可以分解成瞬时奖励和后继状态的折扣价值的和

v π ( s ) = E [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] v_\pi(s)=\mathbb{E}[R_{t+1}+\gamma v_\pi(S_{t+1})|S_t=s] vπ(s)=E[Rt+1+γvπ(St+1)St=s]

类似地,动作价值函数分解成

q π ( s , a ) = E π [ R t + 1 + γ q π ( S t + 1 , A t + 1 ) ∣ S t = s , A t = a ] q_\pi(s,a)=\mathbb{E}_\pi [R_{t+1}+\gamma q_\pi(S_{t+1},A_{t+1})|S_t=s,A_t=a] qπ(s,a)=Eπ[Rt+1+γqπ(St+1,At+1)St=s,At=a]

所以,

v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) ) v_\pi(s)=\sum_{a\in\mathcal{A}}\pi(a|s)\big(\mathcal{R}_s^a+\gamma\sum_{s'\in\mathcal{S}}\mathcal{P}^a_{ss'}v_\pi(s')\big) vπ(s)=aAπ(as)(Rsa+γsSPssavπ(s))

q π ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) q_\pi(s,a)=\mathcal{R}_s^a+\gamma\sum_{s'\in\mathcal{S}}\mathcal{P}^a_{ss'}\sum_{a'\in\mathcal{A}}\pi(a'|s')q_\pi(s',a') qπ(s,a)=Rsa+γsSPssaaAπ(as)qπ(s,a)

贝尔曼期望方程可以在对应的马尔可夫奖励过程下表示为矩阵形式

v π = R π + γ P π ( v π ) v_\pi=\mathcal{R}^\pi+\gamma\mathcal{P}^\pi(v_\pi) vπ=Rπ+γPπ(vπ)

方程的解

v π = ( I − γ P π ) − 1 R π v_\pi=(I-\gamma\mathcal{P}^\pi)^{-1}\mathcal{R}^\pi vπ=(IγPπ)1Rπ

最优化原理

最优价值函数

定义

在所有策略中价值函数最大的称之为最优状态-价值函数 v ∗ ( s ) v_*(s) v(s)
v ∗ ( s ) = max ⁡ π v π ( s ) v_*(s)=\max_\pi v_\pi(s) v(s)=maxπvπ(s)
在所有策略中动作价值函数最大的称之为最优动作-价值函数 q ∗ ( s , a ) q_*(s,a) q(s,a)
q ∗ ( s , a ) = max ⁡ π q π ( s , a ) q_*(s,a)=\max_\pi q_\pi(s,a) q(s,a)=maxπqπ(s,a)

最优价值函数代表了智能体在该智能体在该 MDP 问题下最好的性能,如果得到了最优值函数,那么 MDP 问题就已经求解了。

最优策略

定义一个关于策略的比较操作

π ≥ π ′  if  v π ( s ) ≥ v π ′ ( s ) , ∀ s \pi\ge\pi'~\text{if}~v_\pi(s)\ge v_{\pi'}(s),\forall s ππ if vπ(s)vπ(s),s

定理

对任意马尔可夫决策过程

  • 总是存在一个最优策略 π ∗ \pi_* π 比其它所有策略都不差 π ∗ ≥ π , ∀ π \pi_*\ge\pi,\forall\pi ππ,π
  • 所有最优策略的价值函数都相等,且等于最优价值函数, V π ∗ ( s ) = v ∗ ( s ) V_{\pi_*}(s)=v_*(s) Vπ(s)=v(s)
  • 所有最优策略的动作-价值函数都相等,且等于最优动作-价值函数, q π ∗ ( s , a ) = q ∗ ( s , a ) q_{\pi_*}(s,a)=q_*(s,a) qπ(s,a)=q(s,a)

寻找最优策略

一个最优策略可以通过最大化 q ∗ ( s , a ) q_*(s,a) q(s,a) 来确定

π ∗ ( a ∣ s ) = { 1 if  a = argmax a ∈ A q ∗ ( s , a ) 0 otherwise \pi_*(a|s)=\left\{\begin{array}{rl}1&\text{if }a=\text{argmax}_{a\in\mathcal{A}}q_*(s,a)\\0&\text{otherwise}\end{array}\right. π(as)={10if a=argmaxaAq(s,a)otherwise

对任何 MDP 都存在一个确定性的最优策略,如果 q ∗ ( s , a ) q_*(s,a) q(s,a) 已知,即可得到最优策略。

最优化原理

强化学习目标是找到一组时间序列的动作 A 0 , A 1 , … {A_0,A_1,\dots} A0,A1,,使得智能体从 S 0 S_0 S0 出发得到的期望累加奖励最大化

v ∗ ( S 0 ) = E [ max ⁡ A 0 , A 1 , … ( R 1 + γ R 2 + γ 2 R 3 + …   ) ] v^*(S_0)=\mathbb{E}[\max_{A_0,A_1,\dots}(R_1+\gamma R_2+\gamma^2 R_3+\dots)] v(S0)=E[maxA0,A1,(R1+γR2+γ2R3+)]

v ∗ v_* v 称为最优价值函数。

贝尔曼最优化原理

一个最优策略具有如下性质:不论初始状态和初始决策(第一步决策)如何,以第一步决策所形成的阶段和状态作为初始条件来考虑时,余下的决策对余下的问题而言也必构成最优策略

v ∗ ( S 0 ) = E [ max ⁡ A 0 , A 1 , … ( R 1 + γ R 2 + γ 2 R 3 + …   ) ] = max ⁡ A 0 E [ R 1 + γ max ⁡ A 1 , A 2 , … ( R 2 + γ R 3 + …   ) ] = max ⁡ A 0 E [ R 1 + γ E [ v ∗ ( S 1 ) ] ] v_*(S_0)=\mathbb{E}[\max_{A_0,A_1,\dots}(R_1+\gamma R_2+\gamma^2 R_3+\dots)]=\max_{A_0}\mathbb{E}[R_1+\gamma\max_{A_1,A_2,\dots}(R_2+\gamma R_3+\dots)]=\max_{A_0}\mathbb{E}[R_1+\gamma\mathbb{E}[v_*(S_1)]] v(S0)=E[maxA0,A1,(R1+γR2+γ2R3+)]=maxA0E[R1+γmaxA1,A2,(R2+γR3+)]=maxA0E[R1+γE[v(S1)]]

  • 关于 v ∗ v_* v 的贝尔曼最优方程
    v ∗ ( s ) = max ⁡ a ( R s a + γ ∑ s ′ ∈ S P s s ′ a v ∗ ( s ′ ) ) v_*(s)=\max_a(\mathcal{R}_s^a+\gamma\sum_{s'\in S}\mathcal{P}_{ss'}^av_*(s')) v(s)=maxa(Rsa+γsSPssav(s))
  • 关于 q ∗ q_* q 的贝尔曼最优方程
    q ∗ ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a max ⁡ a ′ q ∗ ( s ′ , a ′ ) q_*(s,a)=\mathcal{R}_s^a+\gamma\sum_{s'\in S}\mathcal{P}_{ss'}^a \max_{a'}q_*(s',a') q(s,a)=Rsa+γsSPssamaxaq(s,a)
  • 确定性的最优策略
    π ∗ ( s ) = argmax a ∈ A q ∗ ( s , a ) = argmax a ∈ A R s a + γ ∑ s ′ ∈ S P s s ′ a v ∗ ( s ′ ) \pi_*(s)=\text{argmax}_{a\in\mathcal{A}}q_*(s,a)=\text{argmax}_{a\in\mathcal{A}}\mathcal{R}_s^a+\gamma\sum_{s'\in S}\mathcal{P}_{ss'}^a v_*(s') π(s)=argmaxaAq(s,a)=argmaxaARsa+γsSPssav(s)
  • 13
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值