概述
价值学习就是学习动作价值函数和状态价值函数,除了用线性函数来作为价值函数的逼近函数外,还可以使用阶跃函数来作为近似,当然也可以使用神经网络来近似价值函数。而且由于价值函数本身自带的特殊的递推属性,可以导出用于递推计算价值函数的TD算法。当我们采用神经网络来近似动作价值函数并使用TD算法求这个神经网络的参数时得到的就是Q学习算法。此时这个神经网络就叫做DQN(Deep Q Network)。
换句话说DQN之所以叫DQN,是因为它采用的求参数的方法就是Q学习算法。而Q学习算法就是动作价值函数递推属性本身所导出的一种算法。
所以由此可见最重要的时动作价值函数本身所具有的递推性。
Q学习是TD算法(时间差分算法)的一种,是为了学习动作价值函数 Q ( a t ∣ f a , f r , f t , s t ) Q(a_t|f_a,f_r,f_t,s_t) Q(at∣fa,fr,ft,st)而提出的一种算法所以叫做Q学习算法。
动作价值函数的递推性
参考文献:
贝尔曼方程推导[2]
从上述资料中可以发现当前状态下的动作价值函数与下一时刻状态的动作价值函数是有递推关系的,同时当前状态的动作价值函数与下一时刻的状态价值函数也是有递推关系的。这就导致我们可以用TD算法来求解策略函数。
从不同的角度考虑会得到不同的TD算法,包括Q学习算法和SARSA算法。
Q学习
从最优动作价值函数出发会得到Q学习算法。
推理公式如下:
V
(
a
t
∣
f
a
∗
,
f
r
,
f
t
,
s
t
)
=
r
(
s
t
,
a
t
)
+
∑
s
t
+
1
∑
a
t
+
1
γ
V
(
a
t
+
1
∣
f
a
∗
,
f
r
,
f
t
,
s
t
+
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
∗
(
a
t
+
1
∣
s
t
+
1
)
V(a_t|f_a^*,f_r,f_t,s_t)=r(s_t,a_t)+\sum_{s_{t+1}}\sum_{a_{t+1}}\gamma{V(a_{t+1}|f_a^*,f_r,f_t,s_{t+1})}P(s_{t+1}|s_t,a_t)P^*(a_{t+1}|s_{t+1})
V(at∣fa∗,fr,ft,st)=r(st,at)+st+1∑at+1∑γV(at+1∣fa∗,fr,ft,st+1)P(st+1∣st,at)P∗(at+1∣st+1)
又由于最优策略下动作价值函数是最大的。
V
(
a
t
∣
f
a
∗
,
f
r
,
f
t
,
s
t
)
=
max
f
a
V
(
a
t
∣
f
a
,
f
r
,
f
t
,
s
t
)
=
max
f
a
[
r
(
s
t
,
a
t
)
+
∑
s
t
+
1
∑
a
t
+
1
γ
V
(
a
t
+
1
∣
f
a
,
f
r
,
f
t
,
s
t
+
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
]
=
max
P
(
a
t
+
1
∣
s
t
+
1
)
max
P
(
a
t
+
2
∣
s
t
+
2
)
max
P
(
a
t
+
3
∣
s
t
+
3
)
⋯
max
P
(
a
t
+
n
∣
s
t
+
n
)
[
r
(
s
t
,
a
t
)
+
∑
s
t
+
1
∑
a
t
+
1
γ
V
(
a
t
+
1
∣
f
a
,
f
r
,
f
t
,
s
t
+
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
]
=
r
(
s
t
,
a
t
)
+
max
P
(
a
t
+
1
∣
s
t
+
1
)
max
P
(
a
t
+
2
∣
s
t
+
2
)
max
P
(
a
t
+
3
∣
s
t
+
3
)
⋯
max
P
(
a
t
+
n
∣
s
t
+
n
)
[
∑
s
t
+
1
∑
a
t
+
1
γ
V
(
a
t
+
1
∣
f
a
,
f
r
,
f
t
,
s
t
+
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
]
=
r
(
s
t
,
a
t
)
+
γ
max
P
(
a
t
+
1
∣
s
t
+
1
)
∑
s
t
+
1
∑
a
t
+
1
[
max
P
(
a
t
+
2
∣
s
t
+
2
)
max
P
(
a
t
+
3
∣
s
t
+
3
)
⋯
max
P
(
a
t
+
n
∣
s
t
+
n
)
V
(
a
t
+
1
∣
f
a
,
f
r
,
f
t
,
s
t
+
1
)
]
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
\begin{split} V(a_t|f_a^*,f_r,f_t,s_t)&=\underset{f_a}{\max}V(a_t|f_a,f_r,f_t,s_t) \\&=\underset{f_a}{\max}[r(s_t,a_t)+\sum_{s_{t+1}}\sum_{a_{t+1}}\gamma{V(a_{t+1}|f_a,f_r,f_t,s_{t+1})}P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})] \\&=\underset{P(a_{t+1}|s_{t+1})}{\max}\underset{P(a_{t+2}|s_{t+2})}{\max}\underset{P(a_{t+3}|s_{t+3})}{\max}\cdots\underset{P(a_{t+n}|s_{t+n})}{\max}[r(s_t,a_t)+\sum_{s_{t+1}}\sum_{a_{t+1}}\gamma{V(a_{t+1}|f_a,f_r,f_t,s_{t+1})}P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})] \\&=r(s_t,a_t)+\underset{P(a_{t+1}|s_{t+1})}{\max}\underset{P(a_{t+2}|s_{t+2})}{\max}\underset{P(a_{t+3}|s_{t+3})}{\max}\cdots\underset{P(a_{t+n}|s_{t+n})}{\max}[\sum_{s_{t+1}}\sum_{a_{t+1}}\gamma{V(a_{t+1}|f_a,f_r,f_t,s_{t+1})}P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})] \\&=r(s_t,a_t)+\gamma\underset{P(a_{t+1}|s_{t+1})}{\max}\sum_{s_{t+1}}\sum_{a_{t+1}}[\underset{P(a_{t+2}|s_{t+2})}{\max}\underset{P(a_{t+3}|s_{t+3})}{\max}\cdots\underset{P(a_{t+n}|s_{t+n})}{\max}{V(a_{t+1}|f_a,f_r,f_t,s_{t+1})}]P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1}) \end{split}
V(at∣fa∗,fr,ft,st)=famaxV(at∣fa,fr,ft,st)=famax[r(st,at)+st+1∑at+1∑γV(at+1∣fa,fr,ft,st+1)P(st+1∣st,at)P(at+1∣st+1)]=P(at+1∣st+1)maxP(at+2∣st+2)maxP(at+3∣st+3)max⋯P(at+n∣st+n)max[r(st,at)+st+1∑at+1∑γV(at+1∣fa,fr,ft,st+1)P(st+1∣st,at)P(at+1∣st+1)]=r(st,at)+P(at+1∣st+1)maxP(at+2∣st+2)maxP(at+3∣st+3)max⋯P(at+n∣st+n)max[st+1∑at+1∑γV(at+1∣fa,fr,ft,st+1)P(st+1∣st,at)P(at+1∣st+1)]=r(st,at)+γP(at+1∣st+1)maxst+1∑at+1∑[P(at+2∣st+2)maxP(at+3∣st+3)max⋯P(at+n∣st+n)maxV(at+1∣fa,fr,ft,st+1)]P(st+1∣st,at)P(at+1∣st+1)
分析一下上述最大化变量的过程,可知:
max
P
(
a
t
+
k
∣
s
t
+
k
)
,
k
≥
2
\underset{P(a_{t+k}|s_{t+k})}{\max},k\geq2
P(at+k∣st+k)max,k≥2都是只对
V
(
a
t
+
1
∣
f
a
,
f
r
,
f
t
,
s
t
+
1
)
{V(a_{t+1}|f_a,f_r,f_t,s_{t+1})}
V(at+1∣fa,fr,ft,st+1)起作用,而不会影响
P
(
a
t
+
1
∣
s
t
+
1
)
P(a_{t+1}|s_{t+1})
P(at+1∣st+1),也就是说当固定
P
(
a
t
+
1
∣
s
t
+
1
)
P(a_{t+1}|s_{t+1})
P(at+1∣st+1)时,后面的最大化都是要求
V
(
a
t
+
1
∣
f
a
,
f
r
,
f
t
,
s
t
+
1
)
{V(a_{t+1}|f_a,f_r,f_t,s_{t+1})}
V(at+1∣fa,fr,ft,st+1)达到最大。也就是先最大化后面的动作价值函数,然后才有当前状态下的最优动作价值函数
V
(
a
t
∣
f
a
∗
,
f
r
,
f
t
,
s
t
)
V(a_t|f_a^*,f_r,f_t,s_t)
V(at∣fa∗,fr,ft,st)跟
r
(
s
t
,
a
t
)
+
γ
max
P
(
a
t
+
1
∣
s
t
+
1
)
∑
s
t
+
1
∑
a
t
+
1
V
(
a
t
+
1
∣
f
a
∗
,
f
r
,
f
t
,
s
t
+
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
r(s_t,a_t)+\gamma\underset{P(a_{t+1}|s_{t+1})}{\max}\sum_{s_{t+1}}\sum_{a_{t+1}}V(a_{t+1}|f_a^*,f_r,f_t,s_{t+1})P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})
r(st,at)+γP(at+1∣st+1)max∑st+1∑at+1V(at+1∣fa∗,fr,ft,st+1)P(st+1∣st,at)P(at+1∣st+1)是相等的。
而当后面的动作价值函数已经是最优的时候,此时在最大化
max
P
(
a
t
+
1
∣
s
t
+
1
)
∑
s
t
+
1
∑
a
t
+
1
V
(
a
t
+
1
∣
f
a
∗
,
f
r
,
f
t
,
s
t
+
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
\underset{P(a_{t+1}|s_{t+1})}{\max}\sum_{s_{t+1}}\sum_{a_{t+1}}V(a_{t+1}|f_a^*,f_r,f_t,s_{t+1})P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})
P(at+1∣st+1)max∑st+1∑at+1V(at+1∣fa∗,fr,ft,st+1)P(st+1∣st,at)P(at+1∣st+1)的这个过程中,
V
(
a
t
+
1
∣
f
a
∗
,
f
r
,
f
t
,
s
t
+
1
)
V(a_{t+1}|f_a^*,f_r,f_t,s_{t+1})
V(at+1∣fa∗,fr,ft,st+1)不受最大化变量
P
(
a
t
+
1
∣
s
t
+
1
)
P(a_{t+1}|s_{t+1})
P(at+1∣st+1)的影响,也就是说
V
(
a
t
+
1
∣
f
a
∗
,
f
r
,
f
t
,
s
t
+
1
)
V(a_{t+1}|f_a^*,f_r,f_t,s_{t+1})
V(at+1∣fa∗,fr,ft,st+1)相对于变量
P
(
a
t
+
1
∣
s
t
+
1
)
P(a_{t+1}|s_{t+1})
P(at+1∣st+1)来说时常量,所以最大化的过程中只有
P
(
a
t
+
1
∣
s
t
+
1
)
P(a_{t+1}|s_{t+1})
P(at+1∣st+1)可变,表达式中的其他均不可变。那么这个最大化就是动作价值函数越大的对应的概率越大,当动作价值函数最大的所对应的这个策略函数值为1时,这个表达式的值最大。所以这个表达式可以进一步优化为:
V
(
a
t
∣
f
a
∗
,
f
r
,
f
t
,
s
t
)
=
r
(
s
t
,
a
t
)
+
γ
max
P
(
a
t
+
1
∣
s
t
+
1
)
∑
s
t
+
1
∑
a
t
+
1
[
max
P
(
a
t
+
2
∣
s
t
+
2
)
max
P
(
a
t
+
3
∣
s
t
+
3
)
⋯
max
P
(
a
t
+
n
∣
s
t
+
n
)
V
(
a
t
+
1
∣
f
a
,
f
r
,
f
t
,
s
t
+
1
)
]
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
=
r
(
s
t
,
a
t
)
+
γ
max
P
(
a
t
+
1
∣
s
t
+
1
)
∑
s
t
+
1
∑
a
t
+
1
V
(
a
t
+
1
∣
f
a
∗
,
f
r
,
f
t
,
s
t
+
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
=
r
(
s
t
,
a
t
)
+
γ
∑
s
t
+
1
[
max
a
t
+
1
V
(
a
t
+
1
∣
f
a
∗
,
f
r
,
f
t
,
s
t
+
1
)
]
P
(
s
t
+
1
∣
s
t
,
a
t
)
\begin{split} V(a_t|f_a^*,f_r,f_t,s_t)&=r(s_t,a_t)+\gamma\underset{P(a_{t+1}|s_{t+1})}{\max}\sum_{s_{t+1}}\sum_{a_{t+1}}[\underset{P(a_{t+2}|s_{t+2})}{\max}\underset{P(a_{t+3}|s_{t+3})}{\max}\cdots\underset{P(a_{t+n}|s_{t+n})}{\max}{V(a_{t+1}|f_a,f_r,f_t,s_{t+1})}]P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1}) \\&=r(s_t,a_t)+\gamma\underset{P(a_{t+1}|s_{t+1})}{\max}\sum_{s_{t+1}}\sum_{a_{t+1}}V(a_{t+1}|f_a^*,f_r,f_t,s_{t+1})P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1}) \\&=r(s_t,a_t)+\gamma\sum_{s_{t+1}}[\underset{a_{t+1}}{\max}V(a_{t+1}|f_a^*,f_r,f_t,s_{t+1})]P(s_{t+1}|s_t,a_t) \end{split}
V(at∣fa∗,fr,ft,st)=r(st,at)+γP(at+1∣st+1)maxst+1∑at+1∑[P(at+2∣st+2)maxP(at+3∣st+3)max⋯P(at+n∣st+n)maxV(at+1∣fa,fr,ft,st+1)]P(st+1∣st,at)P(at+1∣st+1)=r(st,at)+γP(at+1∣st+1)maxst+1∑at+1∑V(at+1∣fa∗,fr,ft,st+1)P(st+1∣st,at)P(at+1∣st+1)=r(st,at)+γst+1∑[at+1maxV(at+1∣fa∗,fr,ft,st+1)]P(st+1∣st,at)
也就是说当后面的动作价值函数是最优的情况下,当前状态下的动作价值函数等于当前动作的奖励加上后面各个状态的动作价值函数的最大值的均值乘以折扣因子,这就是Q学习的原理。而现实中往往使用单次采样值作为期望值对动作价值函数进行调优。
我们使用一个神经网络来逼近这个最优动作价值函数,需要有最优动作价值函数的输出才能更好的训练。而根据TD算法的原理,在未知最优的动作价值函数的时候,根据奖励也可以进行动作价值函数的修正。
而我们在训练过程中,所使用的动作价值函数是非优的,所以后面的估计也是不准的,这个奖励函数的设置就很重要,要反映真实的需求。因为我们是知道最优状态是什么样子的。不过最优状态的各个属性之间的重要性是未知的。
再退一步说,假设后面的动作价值函数是正确的,我们在试验中选择一种动作只会有一种实际的状态出现,所以这个所有状态下的最优动作价值函数的最大值的均值就求不出来,只能用当次采样作为估计值。也就是蒙特卡洛法的原理,用一次采样值作为均值去使用。
综上所述可以归结为一个问题: 用什么样的奖励函数能够学到正确的动作价值函数?因为蒙特卡洛用单次作为均值使用肯定无法避免,用随机的动作价值函数去估计动作价值肯定无法避免。
SARSA算法
从普通的动作价值函数出发可以推出SARSA算法。推理过程如下:
V
(
a
t
∣
f
a
,
f
r
,
f
t
,
s
t
)
=
r
(
s
t
,
a
t
)
+
∑
s
t
+
1
∑
a
t
+
1
γ
V
(
a
t
+
1
∣
f
a
,
f
r
,
f
t
,
s
t
+
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
V(a_t|f_a,f_r,f_t,s_t)=r(s_t,a_t)+\sum_{s_{t+1}}\sum_{a_{t+1}}\gamma{V(a_{t+1}|f_a,f_r,f_t,s_{t+1})}P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})
V(at∣fa,fr,ft,st)=r(st,at)+st+1∑at+1∑γV(at+1∣fa,fr,ft,st+1)P(st+1∣st,at)P(at+1∣st+1)
同样是用单次采样值作为期望值,所以就是用单次采样出来的动作价值函数乘以折扣率加上奖励来作为TD目标来估计当前的动作价值。然后修正神经网络的参数。
多步TD算法
当我们考虑的是当前动作价值函数与下一个状态的动作价值函数时,只用了一步奖励,可以多做几步的分析。
V
(
a
t
∣
f
a
,
f
r
,
f
t
,
s
t
)
=
∑
a
t
+
1
⋯
∑
a
t
+
n
∑
s
t
+
1
⋯
∑
s
t
+
n
U
(
a
t
∣
f
a
,
f
r
,
f
t
,
s
t
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
⋯
P
(
a
t
+
n
∣
s
t
+
n
)
V(a_t|f_a,f_r,f_t,s_t)=\sum_{a_{t+1}}\cdots\sum_{a_{t+n}}\sum_{s_{t+1}}\cdots\sum_{s_{t+n}}U(a_t|f_a,f_r,f_t,s_t)P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})\cdots{P(a_{t+n}|s_{t+n})}
V(at∣fa,fr,ft,st)=at+1∑⋯at+n∑st+1∑⋯st+n∑U(at∣fa,fr,ft,st)P(st+1∣st,at)P(at+1∣st+1)⋯P(at+n∣st+n)
而对于后面第
t
+
m
t+m
t+m步有,第
t
+
m
t+m
t+m步状态的动作价值函数如下所示,单次价值的加权平均:
V
(
a
t
+
m
∣
f
a
,
f
r
,
f
t
,
s
t
+
m
)
=
∑
a
t
+
m
+
1
⋯
∑
a
t
+
n
∑
s
t
+
m
+
1
⋯
∑
s
t
+
n
U
(
a
t
+
m
∣
f
a
,
f
r
,
f
t
,
s
t
+
m
)
P
(
s
t
+
m
+
1
∣
s
t
+
m
,
a
t
+
m
)
P
(
a
t
+
m
+
1
∣
s
t
+
m
+
1
)
⋯
P
(
a
t
+
n
∣
s
t
+
n
)
V(a_{t+m}|f_a,f_r,f_t,s_{t+m})=\sum_{a_{t+m+1}}\cdots\sum_{a_{t+n}}\sum_{s_{t+m+1}}\cdots\sum_{s_{t+n}}U(a_{t+m}|f_a,f_r,f_t,s_{t+m})P(s_{t+m+1}|s_{t+m},a_{t+m})P(a_{t+m+1}|s_{t+m+1})\cdots{P(a_{t+n}|s_{t+n})}
V(at+m∣fa,fr,ft,st+m)=at+m+1∑⋯at+n∑st+m+1∑⋯st+n∑U(at+m∣fa,fr,ft,st+m)P(st+m+1∣st+m,at+m)P(at+m+1∣st+m+1)⋯P(at+n∣st+n)
由于单次价值链中存在如下关系:
U
(
a
t
∣
f
a
,
f
r
,
f
t
,
s
t
)
=
r
t
(
s
t
,
a
t
)
+
⋯
+
γ
m
−
1
r
t
+
m
−
1
(
s
t
+
m
−
1
,
a
t
+
m
−
1
)
+
γ
m
U
(
a
t
+
m
∣
f
a
,
f
r
,
f
t
,
s
t
+
m
)
U(a_t|f_a,f_r,f_t,s_t)=r_t(s_t,a_t)+\cdots+\gamma^{m-1}r_{t+m-1}(s_{t+m-1},a_{t+m-1})+\gamma^mU(a_{t+m}|f_a,f_r,f_t,s_{t+m})
U(at∣fa,fr,ft,st)=rt(st,at)+⋯+γm−1rt+m−1(st+m−1,at+m−1)+γmU(at+m∣fa,fr,ft,st+m)
所以对于动作价值函数有:
V
(
a
t
∣
f
a
,
f
r
,
f
t
,
s
t
)
=
r
t
(
s
t
,
a
t
)
+
⋯
+
γ
m
−
1
∑
a
t
+
1
⋯
∑
a
t
+
m
−
1
∑
s
t
+
1
⋯
∑
s
t
+
m
−
1
r
t
+
m
−
1
(
s
t
+
m
−
1
,
a
t
+
m
−
1
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
⋯
P
(
a
t
+
m
−
1
∣
s
t
+
m
−
1
)
+
γ
m
∑
a
t
+
1
⋯
∑
a
t
+
m
∑
s
t
+
1
⋯
∑
s
t
+
m
V
(
a
t
+
m
∣
f
a
,
f
r
,
f
t
,
s
t
+
m
)
P
(
s
t
+
1
∣
s
t
,
a
t
)
P
(
a
t
+
1
∣
s
t
+
1
)
⋯
P
(
a
t
+
m
∣
s
t
+
m
)
V(a_t|f_a,f_r,f_t,s_t)=r_t(s_t,a_t)+\cdots+\gamma^{m-1}\sum_{a_{t+1}}\cdots\sum_{a_{t+m-1}}\sum_{s_{t+1}}\cdots\sum_{s_{t+m-1}}r_{t+m-1}(s_{t+m-1},a_{t+m-1})P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})\cdots{P(a_{t+m-1}|s_{t+m-1})}+\gamma^m\sum_{a_{t+1}}\cdots\sum_{a_{t+m}}\sum_{s_{t+1}}\cdots\sum_{s_{t+m}}V(a_{t+m}|f_a,f_r,f_t,s_{t+m})P(s_{t+1}|s_t,a_t)P(a_{t+1}|s_{t+1})\cdots{P(a_{t+m}|s_{t+m})}
V(at∣fa,fr,ft,st)=rt(st,at)+⋯+γm−1at+1∑⋯at+m−1∑st+1∑⋯st+m−1∑rt+m−1(st+m−1,at+m−1)P(st+1∣st,at)P(at+1∣st+1)⋯P(at+m−1∣st+m−1)+γmat+1∑⋯at+m∑st+1∑⋯st+m∑V(at+m∣fa,fr,ft,st+m)P(st+1∣st,at)P(at+1∣st+1)⋯P(at+m∣st+m)
问题
当我们用不是最优的动作价值函数对下一个状态的动作价值函数进行估计并取相应的最大值再加上单次奖励作为对当前状态的最优动作价值的估计时,这个学习的方向即受到奖励的影响,也受到当前非最优的动作价值函数的影响
因果分析
因果分析很重要,代码想不明白都是因果不清晰。
总结
当变量发生变化时,后面不会受他影响的都相当于常量。然后这个变量变化过程中,其他量都不变。