《强化学习:原理与Python实现》更新与勘误

(2019年8月第1版第1次印刷)

Gym 0.25版本更新了API,GitHub代码已相应更新。代码以GitHub上为准。

行数计算方法

本勘误文档中,行数计算“第i行”(i=0,1,2,)是从0开始计数的。小节标题、公式、内联代码、注意、本章要点记入行数,章标题、图、表、代码清单及它们的题注不计入行数。空行不计入行数。

第5页第19行

记为𝘙

改为

记为R

第11页第17行

动作空间是Dicrete(3)

改为

动作空间是Discrete(3)

第17页第6行

作者注: “轨道”又称为“轨迹”。本书中这两个词混用。

第20页第2行

作者注: 这种带折扣的回报定义既可以用于回合制任务,也可以用于连续性任务,是一种统一的表示。

第20页第9行

R¯=limt+E[1tτ=0tRτ]

改为

R¯=limt+E[1tτ=1tRτ]

第20页第24-27行

qπ(饿)=Eπ[Gt𝘚t=饿,𝘈t=]

qπ(饿)=Eπ[Gt𝘚t=饿,𝘈t=]

qπ()=Eπ[Gt𝘚t=,𝘈t=]

qπ()=Eπ[Gt𝘚t=,𝘈t=]

改为

qπ(饿,)=Eπ[Gt𝘚t=饿,𝘈t=]

qπ(饿,)=Eπ[Gt𝘚t=饿,𝘈t=]

qπ(,)=Eπ[Gt𝘚t=,𝘈t=]

qπ(,)=Eπ[Gt𝘚t=,𝘈t=]

第22页图2-2b)中图注

vπ(𝘴)

改为

vπ(𝘴)

第2.2节和第2.3节

有观点认为:用动作价值表示状态价值的表达式,或是用状态价值表示动作价值的表达式,不能称为Bellman方程;而用动作价值表示动作价值的表达式,或是用状态价值表示状态价值的表达式,才可以称为Bellman方程。

第22页第18行

qπ(𝘴,𝘢)=γ𝘴,rp(𝘴,r𝘴,𝘢)[r+𝘢π(𝘢|𝘴)qπ(𝘴,𝘢)]

改为

qπ(𝘴,𝘢)=𝘴,rp(𝘴,r𝘴,𝘢)[r+γ𝘢π(𝘢|𝘴)qπ(𝘴,𝘢)]

第23页第19行

[10x1x000100yy1γ01000(α1)γαγ0100βγ(β1)γ00100γ0001][vπ(饿)vπ()qπ(饿,)qπ(饿,)qπ(,)qπ(,)]=[0024α+34β21]

改为

[10x1x000100yy1γ01000(α1)γαγ0100βγ(β1)γ00100γ0001][vπ(饿)vπ()qπ(饿,)qπ(饿,)qπ(,)qπ(,)]=[0024α34β+21]

第24页代码清单2-1

代码改为

第24页第2行~第11行

求解有误,更改如下

vπ(饿)=1Δ(αγxy3αγx+4αxβγxy2βγy+γx+2γx2)

vπ()=1Δ(αγxy+αγxβγxy+2βγy4βyγyγ+y+1)

qπ(饿,)=1Δ(αγ2xyαγ2x+2αγxβγ2xy2βγy+γ2xγx+2γ2)

qπ(饿,)=1Δ(αγ2xyαγ2xαγ2y+αγ2+2αγx+αγy5αγ+4αβγ2xy+βγ2y

3βγy+γ2xγ2γx+4γ3)

qπ(,)=1Δ(αγ2xyαγ2x+2αγxβγ2xy+βγ2x+βγ2yβγ2βγx3βγy+

5βγ4βγ2y+γ2+γy3γ+2)

qπ(,)=1Δ(αγ2xy+αγxβγ2xy+βγ2y3βγyγ2y+γyγ+1)

其中

Δ=(1γ)(1(1αxβy)γ)

第25页第2行

如果对于任意𝘴S,都vπ(𝘴)v(𝘴),则称

改为

如果对于任意𝘴S都满足vπ(𝘴)v(𝘴),则称

第26页第2行和第7行

γ𝘴p(𝘴,r𝘴,𝘢)v(𝘴)

(共2处)

改为

γ𝘴p(𝘴𝘴,𝘢)v(𝘴)

第27页第0~5行

所有的下标π改为下标(共16处)。

第27页代码清单2-2

代码改为

第27页第10行~第29页第8行

求解有误,更改如下

接下来进一步分析这个方程组。比较最优价值的方程组和一般策略的价值方程组可以发现,最优策略价值方程组的解正是在一般策略方程组的解中(x,y)分别取(0,0)、(0,1)、(1,0)、(1,1)得到。所以,我们用一般策略价值方程组的解的形式来表示最优价值方程组的解,并比较其中q(,)q(,)的大小,以及q(饿,)q(饿,)的大小。在比较时,注意到x,y[0,1]并且已经假设α,β,γ(0,1)。所以可以验证

Δ=(1γ)(1(1αxβy)γ)>0

进而比较大小可以只比较分子部分。

首先来比较q(饿,)q(饿,)的大小。注意到q(饿,)q(饿,)等价于

αγ2xyαγ2x+2αγxβγ2xy2βγy+γ2xγx+2γ2

αγ2xyαγ2xαγ2y+αγ2+2αγx+αγy5αγ+4αβγ2xy+βγ2y3βγy+γ2xγ2γx+4γ3

αγ2y+αγ2+αγy5αγ+4α+βγ2yβγyγ2+2γ10

两边除以(1γ)可得

αγyαγ+4αβγy+γ10

注意到1α+(αβ)y>0,上述不等式等价于

γ14α1α+(αβ)y.

接下来比较q(,)q(,)的大小。注意到q(,)q(,)等价于 αγ2xyαγ2x+2αγxβγ2xy+βγ2x+βγ2yβγ2βγx3βγy+5βγ4βγ2y+γ2+γy3γ+2

αγ2xy+αγxβγ2xy+βγ2y3βγyγ2y+γyγ+1

αγ2xαγxβγ2x+βγx+βγ25βγ+4βγ2+2γ10

两边除以(1γ)可得

αγx+βγxβγ+4β+γ10

注意到1β+(βα)x>0,上述不等式等价于

γ14β1β+(βα)x.

综合上述分析,有以下四种情况。

情况Iq(饿,)>q(饿,)q(,)q(,)。这时有v(饿)=q(饿,)v()=q(,),以及x=0y=0。相应条件简化为γ<14α1αγ14β1β,最优价值简化为

q(饿,)=11γ(αγ+4α+γ3)

v(饿)=q(饿,)=21γ

v()=q(,)=11γ

q(,)=11γ(βγ+4βγ+2)

情况IIq(饿,)q(饿,)q(,)q(,)。这时有v(饿)=q(饿,)v()=q(,),以及x=1y=0。相应条件简化为γ14α1αγ14β1α,最优价值简化为

q(饿,)=1ΔII(αγ2+2αγ+γ2+γ2)

v(饿)=q(饿,)=1ΔII(3αγ+4α+3γ3)

q(,)=1ΔII(αγ2+2αγ+4βγ4β+γ23γ+2)

v()=q(,)=11γ

其中

ΔII=(1γ)(1(1α)γ).

情况IIIq(饿,)>q(饿,)q(,)>q(,)。这时有v(饿)=q(饿,)v()=q(,),以及x=0y=1。相应条件简化为γ<14α1βγ<14β1β,最优价值简化为

v(饿)=q(饿,)=21γ

q(饿,)=1ΔIII(4αγ+4α+βγ23βγγ2+4γ3)

v()=q(,)=1ΔIII(2βγ4β2γ+2)

q(,)=1ΔIII(βγ23βγγ2+1)

其中

ΔIII=(1γ)(1(1β)γ).

情况IVq(饿,)q(饿,)q(,)>q(,)。这时有v(饿)=q(饿,)v()=q(,),以及x=1y=1。相应条件简化为γ14α1βγ<14β1α,最优价值简化为

q(饿,)=1ΔIV(2αγβγ22βγ+γ2+γ2)

v(饿)=q(饿,)=1ΔIV(2αγ+4α3βγ+3γ3)

v()=q(,)=1ΔIV(2αγ+βγ4β2γ+2)

q(,)=1ΔIV(αγ2+αγ3βγγ2+1)

其中

ΔIV=(1γ)(1(1αβ)γ).

第29页第13行

v(𝘴)r(𝘴,𝘢)+γ𝘴p(𝘴𝘴,𝘢)v(𝘴),𝘴S

改为

v(𝘴)r(𝘴,𝘢)+γ𝘴p(𝘴𝘴,𝘢)v(𝘴),𝘴S,𝘢A

作者注:用线性规划求解最优状态价值的详细证明可见《Markov Decision Processes: Discrete Stochastic Dynamic Programming》(Martin Puterman)的第6.9节。证明大致如下:当c(𝘴)为Markov决策过程的初始状态分布时,原问题和对偶问题的目标都是Markov决策过程的平均回合奖励,原问题的最优解是最优状态价值。对c(𝘴)做灵敏度分析可知,无论c(𝘴)取什么分布,对偶问题均有解(这利用到对偶问题的可行域就是带折扣的状态动作对组成的分布所在的空间),所以原问题的最优解都是不变的。也就是说,Markov决策过程的最优状态价值和初始状态分布无关。进一步,可以在原问题中放宽𝘴c(𝘴)=1这个限制,原问题的解依然不变,只是优化目标进行了放缩。

第29页第21行

vπ(饿)=10vπ()=834

改为

v(饿)=3511v()=5

第29页第23行

qπ(饿,)=723qπ(饿,)=10qπ(,)=6qπ(,)=834

改为

q(饿,)=611q(饿,)=3511q(,)=2111q(,)=5

第30页第4行~第25行

求解有误,更改如下

情况Iq(饿,)>q(饿,)q(,)q(,),即γ<14α1αγ14β1β。这种情况的最优策略是

π(饿)=π()=.

即饿时不吃,饱时吃。

情况IIq(饿,)q(饿,)q(,)q(,),即γ14α1αγ14β1α。这种情况的最优策略是

π(饿)=π()=.

即一直吃。

情况IIIq(饿,)>q(饿,)q(,)>q(,),即γ<14α1βγ<14β1β。这种情况的最优策略是

π(饿)=π()=.

即一直

情况IVq(饿,)q(饿,)q(,)>q(,),即γ14α1βγ<14β1α。这种情况的最优策略是

π(饿)=π()=.

饿

对于一组特定的数值,求解则更加直接。例如,当α=23β=34γ=45时,2.3.2节已经求得了最优动作价值,此时动作价值满足q(饿,)<q(饿,)q(,)<q(,)。所以,它对应的最优策略为π(饿)=π()=.

第31页第12行

回合奖励为各步奖励之。

改为

回合奖励为各步奖励之和。

第32页代码清单2-4

代码改为

第32页第10行

Bellmn期望方程为

改为

Bellman期望方程为

第33页第0行

Bellan期望方程:

改为

Bellman期望方程:

第33页代码清单2-6

题注改为

用Bellman方程求解状态价值和动作价值

代码改为

第34页第2行

v(𝘴)γ𝘴,rp(𝘴,r|𝘴,𝘢)v(𝘴)𝘴,rrp(𝘴,r|𝘴,𝘢)𝘴S

改为

v(𝘴)γ𝘴,rp(𝘴,r|𝘴,𝘢)v(𝘴)𝘴,rrp(𝘴,r|𝘴,𝘢)𝘴S,𝘢A

第34页第4页

计算这个动态规划问题

改为

计算这个线性规划问题

第35页第25行

可以应用下列线性规划求解最优动作价值

改为

可以应用下列线性规划求解最优状态价值

第36页第2行

v(𝘴)r(𝘴,𝘢)+γ𝘴p(𝘴|𝘴,𝘢)v(𝘴),𝘴S

改为

v(𝘴)r(𝘴,𝘢)+γ𝘴p(𝘴|𝘴,𝘢)v(𝘴),𝘴S,𝘢A

第38页第11行和第14行

这里的d都是指d(共3处)。

第38页第21行

d(t(𝘹),t(𝘹))<d(𝘹,𝘹)

改为

d(t(𝘹),t(𝘹))<γd(𝘹,𝘹)

第38页第24~25行

用动作价值表示动作价值的形式

改为

用状态价值表示状态价值的形式

第39页第0行

v(𝘴)

改为

v(𝘴)

第39页第5行~第7行

|tπ(v)(𝘴)tπ(v)(𝘴)|γ𝘢π(𝘢|𝘴)𝘴p(𝘴|𝘴,𝘢)max𝘴|v(𝘴)v(𝘴)|=γd(v,v)

考虑到v,v是任取的,所以有

d(tπ(v),tπ(v))γd(v,v)

改为

|tπ(v)(𝘴)tπ(v)(𝘴)|γ𝘢π(𝘢|𝘴)𝘴p(𝘴|𝘴,𝘢)max𝘴|v(𝘴)v(𝘴)|=γd(v,v)

考虑到𝘴是任取的,所以有

d(tπ(v),tπ(v))γd(v,v)

第39页第12行~第13行

max𝘢|f(𝘢)f(𝘢)|

改为(共2处)

max𝘢|f(𝘢)f(𝘢)|

第39页第15行~第19行

t(v)(𝘴)t(v)(𝘴)

=max𝘢A[r(𝘴,𝘢)+γ𝘴Sp(𝘴𝘴,𝘢)v(𝘴)]max𝘢A[r(𝘴,𝘢)+γ𝘴Sp(𝘴𝘴,𝘢)v(𝘴)]

max𝘢A|γ𝘴Sp(𝘴𝘴,𝘢)(v(𝘴)v(𝘴))|

γ|v(𝘴)v(𝘴)|,

进而易知|t(v)(𝘴)t(v)(𝘴)|γ|v(𝘴)v(𝘴)|γd(v,v),所以t是压缩映射。

改为

t(v)(𝘴)t(v)(𝘴)

=max𝘢A[r(𝘴,𝘢)+γ𝘴Sp(𝘴𝘴,𝘢)v(𝘴)]max𝘢A[r(𝘴,𝘢)+γ𝘴Sp(𝘴𝘴,𝘢)v(𝘴)]

max𝘢A|γ𝘴Sp(𝘴𝘴,𝘢)(v(𝘴)v(𝘴))|

γmax𝘢A|𝘴Sp(𝘴|𝘴,𝘢)|max𝘴S|v(𝘴)v(𝘴)|

γd(v,v)

进而易知|t(v)(𝘴)t(v)(𝘴)|γd(v,v)。所以t是压缩映射。

第39页第21行

如果xX使得t(x)=x,则称x

改为

如果𝘹X使得t(𝘹)=𝘹,则称𝘹

第39页第22行

(fix point)

改为

(fixed point)

第42页第7行

对于两个确定性的策略

改为

对于策略

第42页第8行

vπ(𝘴)qπ(𝘴,π(𝘴)),𝘴S

改为

vπ(𝘴)𝘢π(𝘢|𝘴)qπ(𝘴,𝘢),𝘴S

作者注:这里的修改使得策略改进定理不仅可以用于确定性策略的改进。这样修改后,相关的结论就可以用于后续章节中(如第60~61页的4.1.3节)。

第42页第12行~第43页第11行

证明更新如下

不等式(3-1)等价于

vπ(𝘴)=Eπ[vπ(𝘚t)𝘚t=𝘴]Eπ[qπ(𝘚t,𝘈t)𝘚t=𝘴],𝘴S

其中的期望是针对用策略π生成的轨迹中,选取𝘚t=𝘴的那些轨迹而言的。进而有

Eπ[vπ(𝘚t+τ)|𝘚t=𝘴]=Eπ[Eπ[vπ(𝘚t+τ)|𝘚t+τ]|𝘚t=𝘴]Eπ[Eπ[qπ(𝘚t+τ,𝘈t+τ)|𝘚t+τ]|𝘚t=𝘴]=Eπ[qπ(𝘚t+τ,𝘈t+τ)|𝘚t=𝘴],𝘴S,τ=0,1,2,

考虑到

Eπ[qπ(𝘚t+τ,𝘈t+τ)|𝘚t=𝘴]=Eπ[Rt+τ+1+γvπ(𝘚t+τ+1)|𝘚t=𝘴],𝘴S,τ=0,1,2,

所以

Eπ[vπ(𝘚t+τ)|𝘚t=𝘴]Eπ[Rt+τ+1+γvπ(𝘚t+τ+1)|𝘚t=𝘴],𝘴S,τ=0,1,2,

进而有

vπ(𝘴)=Eπ[vπ(𝘚t)|𝘚t=𝘴]

Eπ[Rt+1+γvπ(𝘚t+1)|𝘚t=𝘴]

Eπ[Rt+1+γEπ[Rt+2+γvπ(𝘚t+2)|𝘚t=𝘴]|𝘚t=𝘴]

=Eπ[Rt+1+γRt+2+γ2vπ(𝘚t+2)𝘚t=𝘴]

Eπ[Rt+1+γRt+2+γ2Rt+3+γ3vπ(𝘚t+3)|𝘚t=𝘴]

Eπ[Rt+1+γRt+2+γ2Rt+3+γ3Rt+4+|𝘚t=𝘴]

=Eπ[Gt|𝘚t=𝘴]

=vπ(𝘴)

第48页3.5节

作者注:Gym 0.19版本将FrozenLake-v0改为FrozenLake-v1。

作者注:Gym 0.22删除了DiscreteEnv类,所以env.unwrapped.nS和env.unwrapped.nA不再可用。建议用env.observation_space.n替换env.unwrapped.nA,用env.action_space.n替换env.unwrapped.nA。

第49页第12行

这个函数使用theta

改为

这个函数使用tolerant

第52页代码清单3-10

代码改为

第54页第15行

1ci=1cgc

改为

1ci=1cgi

第56页第10行

同时满足{αk:k=1,2,}

改为

{αk:k=1,2,}同时满足

第57页算法4-2第1步,第58页算法4-4第1步(共2处)

初始化动作价值估计

改为

初始化状态价值估计

第58页最后一行

𝘴

改为

𝘴

第60页第17~20行

证明:对于某个ε柔性策略,用

π(𝘢𝘴)={1ε+ε|A|,𝘢=argmax𝘢qπ(𝘴,𝘢)ε|A|,𝘢argmax𝘢qπ(𝘴,𝘢)

改进后的策略为π,则有

qπ(𝘴,𝘢)=𝘢π(𝘢|𝘴)qπ(𝘴,𝘢)=ε|A(𝘴)|𝘢qπ(𝘴,𝘢)+(1ε)max𝘢qπ(𝘴,𝘢)

改为

证明:考虑在ε柔性策略π上进行如下方式改进得到的ε柔性策略π

π(𝘢|𝘴)={1ε+ε|A|,𝘢=argmax𝘢qπ(𝘴,𝘢)ε|A|,𝘢argmax𝘢qπ(𝘴,𝘢)

在3.2.2节策略改进定理的证明过程中,我们已经证明,只要

𝘢π(𝘢|𝘴)qπ(𝘴,𝘢)vπ(𝘴),𝘴S

就有ππ。接下来验证上述不等式。考虑到

𝘢π(𝘢𝘴)qπ(𝘴,𝘢)=ε|A(𝘴)|𝘢qπ(𝘴,𝘢)+(1ε)max𝘢qπ(𝘴,𝘢)

第61页第4行

qπ(𝘴,𝘢)=ε|A(𝘴)|𝘢qπ(𝘴,𝘢)+(1ε)max𝘢qπ(𝘴,𝘢)

改为

𝘢π(𝘢|𝘴)qπ(𝘴,𝘢)=ε|A(𝘴)|𝘢qπ(𝘴,𝘢)+(1ε)max𝘢qπ(𝘴,𝘢)

第63页第13行

回报是等概率出现的是。

改为

回报是等概率出现的。

第64页第3行

vv+1c(gv)

改为

vv+ρc(gv)

第64页第9行

算法4-7给出了每次方法加权重要性采样

改为

算法4-7给出了每次访问加权重要性采样

第64页算法4-7第2.4.2步

w[Gq(𝘚t,𝘈t)]2

改为

ρ[Gq(𝘚t,𝘈t)]2

第65页算法4-8第2.2步

𝘚0,𝘈0,R1,𝘚1,𝘈1,R1,,𝘚T1,𝘈T1,RT,𝘚T

改为

𝘚0,𝘈0,R1,𝘚1,𝘈1,R2,,𝘚T1,𝘈T1,RT,𝘚T

第66页4.3节

作者注:Gym 0.20版本将Blackjack-v0改为Blackjack-v1。

第67页第3行

范围为3~21的int型数值

改为

范围为4~21的int型数值

第67页第5行

是有将1张A牌计算为11点。

改为

是否将1张A牌计算为11点。

第71页第7行

最优价值和最优价值函数

改为

最优策略和最优价值函数

第72页4.3.4节正文第1行,第73页正文第0行

evaluate_action_monte_carlo_importance_resample

改为

evaluate_monte_carlo_importance_sample

第72页代码清单4-7第0行,第73页正文第7行

evaluate_monte_carlo_importance_resample

改为

evaluate_monte_carlo_importance_sample

第73页代码清单4-8第0行,第74页正文第0行,第74页正文第3行

monte_carlo_importance_resample

改为

monte_carlo_importance_sample

第75页第8行

ρt:T1=k=tT1π(𝘈t|𝘚t)b(𝘈t|𝘚t)

改为

ρt:T1=τ=tT1π(𝘈τ|𝘚τ)b(𝘈τ|𝘚τ)

第77页第2行

Ut:t+1(q)=Rt+1+γq(𝘚t+1,𝘈t+n)

改为

Ut:t+1(q)=Rt+1+γq(𝘚t+1,𝘈t+1)

第77页第15行

Ut:t+1(q)={Rt+1+γRt+2++γn1Rt+n+γnq(𝘚t+1,𝘈t+n),t+n<T,Rt+1+γRt+2++γTt1RT,t+nT.

改为

Ut:t+n(q)={Rt+1+γRt+2++γn1Rt+n+γnq(𝘚t+n,𝘈t+n),t+n<T,Rt+1+γRt+2++γTt1RT,t+nT.

第79页算法5-2第2.1步

2.1(初始化状态动作对)

改为

2.1(初始化状态)

第81页算法5-4输出

输出:动作价值估计

改为

输出:状态价值估计

第81页算法5-4第2.2.1步

URt+1+γRt+2++γn1Rt+n+γnv(𝘚t+n,γnv𝘚t+n)

改为

URt+1+γRt+2++γn1Rt+n+γnv(𝘚t+n)

第84页算法5-8步骤2.2

前一个步骤2.2的编号应为2.1。

第85页第11行

=τ=tt+n1π(𝘈τ|𝘚τ)b(𝘈τ|𝘚τ)

改为

=τ=t+1t+n1π(𝘈τ|𝘚τ)b(𝘈τ|𝘚τ)

第85页算法5-10输入

输入:环境(无数学描述)、策略π

改为

输入:环境(无数学描述)、如果是策略评估还需要输入策略π

第85页算法5-10输出

若是最优策略控制则还是输出策略

改为

若是最优策略控制则还要输出策略

第85页算法5-10第2.3.1步

根据π(𝘚t+n)决定

改为

根据b(𝘚t+n)决定

第87页算法5-11第2.1步

初始化状态动作对

改为

初始化状态

第87页第14行

使得从𝘴状态更倾向于选择

改为

使得从𝘴开始更倾向于选择

第88页算法5-12第2.1步

2.1(初始化状态动作对)

改为

2.1(初始化状态)

第88页算法5-12第2.2.4步

UR+γq(1i)(𝘚t+1,argmax𝘢q(i)(𝘚t+1,𝘢))

改为

UR+γq(1i)(𝘚,argmax𝘢q(i)(𝘚,𝘢))

第89页图5-3子图a和子图b(共2处)

(1λ)λTt1

改为

λTt1

第90页第8行

时序差分目标Utn:t的权重是(1λ)λn

改为

时序差分目标Utn:t的权重是(1λ)λn1

第90页第13行

对的单步自益结果

改为

的单步自益结果

第90页第20行

Uτ:t=Rτ+1++γtτ1Ut:t+1,所以Ut:t+1

改为

Uτ:t=Rτ+1++γtτ1Ut1:t,所以Ut1:t

第91页算法5-13参数部分、第92页算法5-14参数部分

参数:资格迹参数β

改为

参数:资格迹参数λβ

第91页算法5-13

将第1步的

初始化资格迹e(𝘴,𝘢)0,𝘴S,𝘢A(𝘴)

移动到2.1步

第91页算法5-13第2.2.2步~2.2.5步

改为

2.2.2 根据输入策略π(|𝘚)或是迭代的最优价值函数q(𝘚,)确定动作𝘈

2.2.3(更新资格迹)e(𝘴,𝘢)γλe(𝘴,𝘢),𝘴S,𝘢A(𝘴)e(𝘚,𝘈)1+βe(𝘚,𝘈)

2.2.4(计算回报的估计值)UR+γq(𝘚,𝘈)

2.2.5(更新价值)q(𝘴,𝘢)q(𝘴,𝘢)+αe(𝘴,𝘢)[Uq(𝘚,𝘈)],𝘴S,𝘢A(𝘴);

第92页算法5-14第1步

删去

初始化资格迹c(𝘴)0,𝘴S

第92页算法5-14第2.1步

2.1(初始化状态动作对)选择状态v(𝘴)

改为

2.1(初始化状态和资格迹)选择状态𝘚,初始化资格迹e(𝘴)0,𝘴S

第92页算法5-14第2.3.3步

𝘴S,𝘢A

改为

𝘴S

第92页算法5-14第2.2.5步

改为

2.2.5(更新价值)v(𝘴)v(𝘴)+αe(𝘴)[Uv(𝘚)],𝘴S

第92页第11行、第93页第12行、第94页代码清单5-1第1行

Taxi-v2

改为

Taxi-v3

(共3处。Gym 0.15.2版本Taxi-v2变更地图为Taxi-v3)

第93行图5-5

改为

(Gym 0.15.2版本Taxi-v2变更地图为Taxi-v3)

第96页代码清单5-6第14行

改为

第98页第2行

DoubleQLearnignAgent

改为

DoubleQLearningAgent

第99页代码清单5-12

改为

第100页第12行

Ut(i)=Rt+1+γq(i)(𝘚t+1,argmax𝘢q(1i)(𝘚t+1,𝘢))

改为

Ut(i)=Rt+1+γq(1i)(𝘚t+1,argmax𝘢q(i)(𝘚t+1,𝘢))

第100页第16行

形式为Ut=Rt+1+q(𝘚t+1,𝘈t+1)

改为

形式为Ut=Rt+1+γq(𝘚t+1,𝘈t+1)

第102页第5行

回合的损失为t=0T[Gtq(𝘚t,𝘈t;w)]2。如果我们沿着t=0T[Gtq(𝘚t,𝘈t;w)]2

改为

回合的损失为t=0T1[Gtq(𝘚t,𝘈t;w)]2。如果我们沿着t=0T1[Gtq(𝘚t,𝘈t;w)]2

第102页第12行

t=0T[Gtv(𝘚t;w)]2

改为

t=0T1[Gtv(𝘚t;w)]2

第103页第5行

t=0T[Utq(𝘚t,𝘈t;w)]2

改为

t=0T1[Utq(𝘚t,𝘈t;w)]2

第104页算法6-3第2.2.4步

ww+α[Gq(𝘚,𝘈;w)]q(𝘚,𝘈;w)

改为

ww+α[Uq(𝘚,𝘈;w)]q(𝘚,𝘈;w)

第104页算法6-4第2.1步

2.1(初始化状态动作对)选择状态𝘚,再根据输入策略π选择动作𝘈

改为

2.1(初始化状态)选择状态𝘚

第104页算法6-4第2.2.3步、第106页算法6-7第2.2.3步(共2处)

删去此步

第104页算法6-4第2.2.4步、第106页算法6-7第2.2.4步(共2处)

如果是动作价值评估

改为

如果是状态价值评估

第104页算法6-4第2.2.5步,第106页算法6-7第2.2.6步(共2处)

(更新动作价值函数)

改为

(更新价值函数)

第104页第5行

算法6-5

改为

算法6-3

第105页算法6-5

删去该算法

第105页第9~10行

ww+α[Uq(𝘚t,𝘈t)]z, 更新动作价值

ww+α[Uv(𝘚t)]z, 更新状态价值

改为

ww+α[Uq(𝘚t,𝘈t;w)]z, 更新动作价值

ww+α[Uv(𝘚t;w)]z, 更新状态价值

第105页算法6-5第2.1步

增加

初始化资格迹z0

第106页算法6-7第2.1步

2.1(初始化状态动作对)选择状态𝘚,再根据输入策略π选择动作𝘈

改为

2.1(初始化状态和资格迹)选择状态𝘚,初始化资格迹z0

第109页算法6-8输出和第1步

q(𝘴t,𝘢t;w)

改为

q(𝘴,𝘢;w)

第109页算法6-8第2.2步

决定确定性策略

改为

决定策略

第111页算法6-9第2.1步、第113页算法6-10第2.1步(共2处)

2.1(初始化状态动作对)

改为

2.1(初始化状态)

第112页第12行

Pi=pikpk

改为

pikpk

第112页第14行

其中δi是时序差分误差,

改为

其中δi是时序差分误差(定义为δt=Utq(𝘚t,𝘈t;w)δt=Utv(𝘚t;w)),

第114页6.4.4节

本节将“duel network”译作“对偶网络”有误。可译为“决斗网络”。相应的“对偶Q网络”、“对偶深度Q网络”可改为“决斗Q网络”、“决斗深度Q网络”。

第118页

作者注:

砖瓦编码是一种历史悠久的特征构造方法,可用于回归、分类等问题。目前学术界倾向于用神经网络代替砖瓦编码来构造特征。由于砖瓦编码和强化学习没有直接关联,本书没有用过多的篇幅介绍砖瓦编码。

实际使用砖瓦编码时,不需要精确计算砖瓦的数量,常随意的大致估计砖瓦的数量作为特征数。如果设置的特征数大于真实的砖瓦数量,那么有些特征永远不会取到,有些浪费;如果设置的特征数小于真实的砖瓦数量,那么有多个砖瓦需要共享特征,具体逻辑可以见代码清单6-3中“冲突处理”部分。这些浪费和冲突往往不会造成明显的性能损失。

第118页砖瓦数计算:每个大网格的网格宽度刚好是整个取值范围的1/8。所以,第0层大网格每个维度有8个大网格;第1~7层由于有偏移,每个维度需要有9个大网格才能覆盖整个取值范围。第117页图6-3b的情况略有不同:这个图中每个维度的取值范围不是大网格的长度的整数倍。所以有些层偏移后,不需要更多的大网格也可以覆盖整个取值范围。

第126页第10行

再配合其他一些容易活动的

改为

再配合其他一些容易获得的

第126页最后一行

=𝘴Pr[𝘚t=𝘴]vπ(θθ)(𝘚t)

改为

=𝘴Pr[𝘚t=𝘴]vπ(θθ)(𝘴)

第127页第10行

=E[𝘢qπ(θθ)(𝘚0,𝘢)π(𝘢|𝘚0;θθ)]+E[𝘢γqπ(θθ)(𝘚1,𝘢)π(𝘢|𝘚1;θθ)]+γ2E[vπ(θθ)(𝘚1)]

改为

=E[𝘢qπ(θθ)(𝘚0,𝘢)π(𝘢|𝘚0;θθ)]+E[𝘢γqπ(θθ)(𝘚1,𝘢)π(𝘢|𝘚1;θθ)]+γ2E[vπ(θθ)(𝘚2)]

第127页第18行

=E[γtqπ(θθ)(𝘚t,𝘈t)π(𝘈t|𝘚t;θθ)]

改为

=E[γtqπ(θθ)(𝘚t,𝘈t)lnπ(𝘈t|𝘚t;θθ)]

第127页第20行

E[𝘢γtqπ(θθ)(𝘚t,𝘢)π(𝘢|𝘚t;θθ)]=E[γtqπ(θθ)(𝘚t,𝘈t)π(𝘈t|𝘚t;θθ)]=E[γtGtπ(𝘈t|𝘚t;θθ)]

改为

E[𝘢γtqπ(θθ)(𝘚t,𝘢)π(𝘢|𝘚t;θθ)]=E[γtqπ(θθ)(𝘚t,𝘈t)lnπ(𝘈t|𝘚t;θθ)]=E[γtGtlnπ(𝘈t|𝘚t;θθ)]

第128页第10行

增量αγtGtπ(𝘈t|𝘚t;θθt)

改为

增量αγtGtπ(𝘈t|𝘚t;θθ)

第128页算法7-1输入和第130页算法7-2输入(共2处)

输入:环境(无数学描述)、策略π

改为

输入:环境(无数学描述)。

第128页算法7-1第2步和第130页算法7-2第2步(共2处)

2.(时序差分更新)

改为

2.(回合更新)

第129页第10~11行

=𝘢γt(GtB(𝘚t))π(𝘈t|𝘚t;θθ)

=𝘢γtGtπ(𝘈t|𝘚t;θθ)

改为

=𝘢γt(GtB(𝘚t))π(𝘢|𝘚t;θθ)

=𝘢γtGtπ(𝘢|𝘚t;θθ)

第129页第15行

随机变量B(𝘚)=τ=1t1γτtRτ

改为

随机变量B(𝘚)=τ=0t1γτtRτ+1

第129页第24行

值函数的估计是可以得到的。

改为

值函数的估计。

第130页算法7-2第2.3.3步

更新θθ以减小γt[Gv(𝘚t;w)]lnπ(𝘈t|𝘚t;θθ)

改为

更新θθ以减小γt[Gv(𝘚t;w)]lnπ(𝘈t|𝘚t;θθ)

第130页第4行

E[2γt(GtB(𝘚t))[lnπ(𝘈t|𝘚t;θθ)]2]

改为

E[2γ2t(GtB(𝘚t))[lnπ(𝘈t|𝘚t;θθ)]2]

第130页第11行

不过,由于梯度lnπ(𝘈t|𝘚t;θθ)并不会预先知道,所以实际应用时

改为

但是,在实际应用中,无法事先知道这个值,所以

第131页算法7-3第2.3步

2.3(初始化回报和权重)

改为

2.3(初始化回报)

第139页第17行

减了基线b(𝘴)=vπ(𝘴)

改为

减去基线B(𝘴)=vπ(𝘴)

第137页代码清单7-1中learn()函数

改为

第139页第18行

加上基线b(𝘴)=vπ(𝘴)

改为

减去基线B(𝘴)=vπ(𝘴)

第139页第13行和第18行(2处)

Rt+γvπ(𝘚t+1)

改为

Rt+1+γvπ(𝘚t+1)

第140页第4行

Rt+vπ(𝘚t+1;w)

改为

Rt+1+γvπ(𝘚t+1;w)

第140页算法8-1第2.2步

2.2(决定初始动作)用π(|𝘚;θθ)得到动作𝘈

改为

2.2(决定初始状态动作对)选择状态𝘚,用π(|𝘚;θθ)得到动作𝘈

第140页算法8-1第2.3.1步

得到采样R

改为

得到奖励R

第141页第4行和第5行

Rt+γvπ(𝘚t+1;w)

改为

Rt+1+γvπ(𝘚t+1;w)

第141页算法8-2的第2.2步至第2.3.3步,第143页算法8-4的第2.2步至第2.3.3步

2.2(决定初始动作)用π(|𝘚;θθ)得到动作𝘈

2.3 如果回合未结束,执行以下操作:

2.3.1(采样)根据状态𝘚和动作𝘈得到采样R和下一状态𝘚

2.3.2(执行)用π(|𝘚;θθ)得到动作𝘈

2.3.3(估计回报)UR+γq(𝘚,𝘈;w)

改为

2.2(决定初始状态)选择状态𝘚

2.3 如果回合未结束,执行以下操作:

2.3.1(采样)用π(|𝘚;θθ)得到动作𝘈

2.3.2(执行)执行动作𝘈,得到奖励R和观测𝘚

2.3.3(估计回报)UR+γv(𝘚;w)

第141页算法8-2的第2.3.7步,第143页算法8-4的第2.3.9步

𝘚𝘚𝘈𝘈

改为

𝘚𝘚

第142页算法8.3第2.3.2步

作者注:这里的更新式子遵循了论文原文而没有考虑累积折扣。推导出现折扣是正确的;更新时考虑折扣也是正确和合理的。

第143页第5行,第143页算法8.4第2.3.4步(共2处)

lnπ(𝘈𝘚;w)

改为

lnπ(𝘈𝘚;θθ)

第143页算法8-4

将第1步的

初始化资格迹z(θθ)0z(w)0

移动到第2.1步

第143页算法8-4第2.2步

2.2(决定初始动作)用π(|𝘚;θθ)得到动作𝘈

改为

2.2(决定初始状态)选择状态𝘚

第144页第5~9行

Eπ(θθ)[t=0+γtaπk(𝘚t,𝘈t)]

=Eπ(θθ)[t=0+γt(Rt+γvπ(θθk)(𝘚t+1)vπ(θθk)(𝘚t))]

=Eπ(θθ)[vπ(θθk)(𝘚0)+t=0+γtRt]

=E𝘚0[vπ(θθk)(𝘚0)]+Eπ(θθ)[t=0+γtRt]

=Eπ(θθk)[G0]+Eπ(θθ)[G0].

改为

Eπ(θθ)[t=0+γtaπ(θθk)(𝘚t,𝘈t)]

=Eπ(θθ)[t=0+γt(Rt+1+γvπ(θθk)(𝘚t+1)vπ(θθk)(𝘚t))]

=Eπ(θθ)[vπ(θθk)(𝘚0)+t=0+γtRt+1]

=E𝘚0[vπ(θθk)(𝘚0)]+Eπ(θθ)[t=0+γtRt+1]

=Eπ(θθk)[G0]+Eπ(θθ)[G0].

第144页第13行和第16行(共2处)

E𝘚t,𝘈tπ(θθ)[aπk(𝘚t,𝘈t)]

改为

E𝘚t,𝘈tπ(θθ)[aπ(θθk)(𝘚t,𝘈t)]

第145页算法8-5第2.3步

更新θθ以减小

改为

更新θθ以增大

第145页算法8-5第2.4步

最小化[Gtv(𝘚t,𝘈t;w)]2

改为

最小化[Gtv(𝘚t;w)]2

第147页图8-1中间线的注记

l(θθ)

改为

l(θθ)

第148页第7行

minimize

改为

maximize

第149页第7行

如果它们满足piFpj=0

改为

如果它们满足piTFpj=0

第150页第5行

αk(12(xk+αkpk)TF(xk+αkpk)gT(xk+αpk))=αkpkTFpkpkT(Fxkg)

改为

αk(12(xk+αkpk)TF(xk+αkpk)gT(xk+αkpk))=αkpkTFpk+pkT(Fxkg)

第150页第7行

αk=pkT(Fxkg)pkTFpk

改为

αk=pkT(gFxk)pkTFpk

第150页算法8-7第2.1步

2.1 zFx

改为

2.1 zFp

第151页第6行

minimize

改为

maximize

第154页算法8-10第2.2步

2.2(决定初始动作)用b(|𝘚)得到动作𝘈

改为

2.2(决定初始状态动作对)选择状态𝘚,用b(|𝘚)得到动作𝘈

第154页算法8-10第2.3.2步

得到动作A

改为

得到动作𝘈

第155页第27行

=𝘢π(𝘢|𝘚t;θθEMA)π(𝘢|𝘚t;θθ).

改为

=𝘢π(𝘢𝘚t;θθEMA)π(𝘢𝘚t;θθ)θθπ(𝘢𝘚t;θθ).

第156页第14~16行

将前式代入后式可得λt=ktTgδktTkt。由于Lagrange乘子应当大等于0,所以Lagrange乘子应

max{ktTgδktTkt,0},优化问题的最优解为

zt=gtmax{bfktTgδktTkt,0}kt

改为

将前式代入后式可得λt=ktTgtδktTkt。由于Lagrange乘子应当大等于0,所以Lagrange乘子应

max{ktTgtδktTkt,0},优化问题的最优解为

zt=gtmax{ktTgtδktTkt,0}kt

第157页算法8-11第3.2.3步

k=θθdKL(π(𝘚t;θθEMA)||π(𝘚t;θθ))zt=gtmax{ktTgδktTkt,0}kt

改为

kθθdKL(π(|𝘚t;θθEMA)||π(𝘚t;θθ))zgmax{kTgδkTk,0}k

第157页算法8-11

将第3.3步重新编号为第3.2.4步。

第158页第19行,第159页第1~2行

𝘈t=a

改为

𝘈t=𝘢

第159页第8行

和最优动作价值函数。

改为

和最优状态价值函数。

第159页第27行

其中目标Ut(q)=Rt+1+γv(𝘚;w目标(v))

改为

其中目标Ut(q)=Rt+1+γv(𝘚;w目标(v))

第160页算法8-12第2.2.2步

对应的回报Ut(q)=Rt+1+γv(𝘚;w目标(v))

改为

对应的回报Ut(q)=Rt+1+γv(𝘚;w目标(v))

第161页第4~5行

作者注:“动作价值网络和策略网络往往采用矢量形式的输出”指的是动作空间是离散动作空间的情况。如果动作空间是连续动作空间,往往用Gaussian形式的策略,详见GitHub代码。包括SAC算法在内的使用策略梯度的算法采用Gaussian形式策略后,策略被限制为了单峰(unimodal)形式。如果需要策略具有多峰(multimodal)形式,可以使用混合Gaussian模型(Gaussian Mixture Model,GMM)。

第161页8.6节

作者注:这个案例的动作空间是离散的。同时,本章介绍的算法,包括但不限于PPO、SAC等算法,也可用于动作空间是连续空间的情况。

第162页第7行

D=12cosΘ+54

改为

Dt=12cosΘt+54

第162页第11~12行

使得角速度有界Θ˙1[4π,4π]Θ˙2[9π,9π]

改为

使得角速度有界Θ˙t[4π,4π]Θ˙t[9π,9π]

第162页第17行

单5-7中的qlearning()函数

改为

单5-3中的play_sarsa()函数

第163页代码清单8-1

其中的learn()函数代码改为

第164页第1行

中的qlearning()函数

改为

中的play_qlearning()函数

第164页代码清单8-2

其中的learn()函数代码改为

第168页第3行

qlearning()函数联合起来

改为

play_qlearning()函数联合起来

第172页第17行

qπ(θθ)(𝘴,π(𝘴;θθ))=r(𝘴,π(𝘴;θθ))+γsp(𝘴|𝘴,π(θθ))vπ(θθ)(𝘴),𝘴S

改为

qπ(θθ)(𝘴,π(𝘴;θθ))=r(𝘴,π(𝘴;θθ))+γ𝘴p(𝘴|𝘴,π(𝘴;θθ))vπ(θθ)(𝘴),𝘴S

第173页第2~4行、第6行、第10行(共5处)

𝘴p(𝘴|𝘴;π(θθ))vπ(θθ)(𝘴)

改为

𝘴p(𝘴|𝘴,π(𝘴;θθ))vπ(θθ)(𝘴)

第173页第9行

vπ(θθ)(𝘚t)

改为

vπ(θθ)(𝘴)

第173页第20行

=E[π(𝘚0;θθ)[𝘢qπ(θθ)(𝘚0,𝘢)]𝘢=π(𝘚0;θθ)]+γE[π(𝘚1;θθ)[𝘢qπ(θθ)(𝘚1,𝘢)]𝘢=π(𝘚1;θθ)]+γ2E[vπ(θθ)(𝘚1)]

改为

=E[π(𝘚0;θθ)[𝘢qπ(θθ)(𝘚0,𝘢)]𝘢=π(𝘚0;θθ)]+γE[π(𝘚1;θθ)[𝘢qπ(θθ)(𝘚1,𝘢)]𝘢=π(𝘚1;θθ)]+γ2E[vπ(θθ)(𝘚2)]

第174页第4行

ρπ(𝘴)=𝘴0Sp𝘚0(𝘴0)t=0+γtPr[𝘚t|𝘚0=𝘴0;θθ]d𝘴0

改为

ρπ(θθ)(𝘴)=t=0+γtPr[𝘚t=𝘴;π(θθ)], 𝘴S

作者注:从严格意义上说,有折扣的状态分布并不是概率分布,因为它的和不总是1。针对有折扣的状态分布的期望也只是采用了期望的形式。

第174页第7~11行

=t=0+𝘴p𝘚t(𝘴)γtπ(𝘴;θθ)[𝘴qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘚t;θθ)d𝘴

=t=0+𝘴(𝘴0𝘴0p𝘚0(𝘴0)Pr[𝘚t=𝘴|𝘴0=𝘴0;θθ]d𝘴0)γtπ(𝘴;θθ)[𝘴qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)d𝘴

=𝘴(𝘴0p𝘚0(𝘴0)t=0+γtPr[𝘚t=𝘴|𝘴0=𝘴0;θθ]d𝘴0)π(𝘚t;θθ)[𝘢qπ(θθ)]𝘢=π(𝘴;θθ)d𝘴

=𝘴ρπ(θθ)(𝘴)π(𝘴;θθ)[𝘢qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)d𝘴

=Eρπ(θθ)[π(𝘴;θθ)[𝘢qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)]

改为

=t=0+𝘴Pr[𝘚t=𝘴;π(θθ)]γtπ(𝘴;θθ)[𝘢qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)

=𝘴(t=0+γtPr[𝘚t=𝘴;π(θθ)])π(𝘴;θθ)[𝘢qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)

=𝘴ρπ(θθ)(𝘴)π(𝘴;θθ)[𝘢qπ(θθ)]𝘢=π(𝘴;θθ)

=Eρπ(θθ)[π(𝘚;θθ)[𝘢qπ(θθ)(𝘚,𝘢)]𝘢=π(𝘚;θθ)]

第175页第7行

其中𝘈min𝘈max是动作的最小取值和最大取值

改为

其中𝘈low𝘈high是动作的最小取值和最大取值

第175页算法9-1第2.2步

2.2(决定初始动作)

改为

2.2(初始化状态动作对)选择状态𝘚

第176页第8行

方差为σ22θ(1e2θ)

改为

方差为σ22θ(1e2θt)

第176页第12行

σ2eθ(t+s)E[0teθτdBt0seθτdBt]

改为

σ2eθ(t+s)E[0teθτdBτ0seθτdBτ]

第176页到第177页9.2节正文

改为

对于连续的动作空间,我们希望能够找到一个确定性策略,使得每条轨迹的回报最大。同策确定性算法利用策略π(θθ)生成轨迹,并在这些轨迹上求得回报的平均值,通过让平均回报最大,使得每条轨迹上的回报尽可能大。事实上,如果每条轨迹的回报都要最大,那么对于任意策略b采样得到的轨迹,我们都希望在这套轨迹上的平均回报最大。所以异策确定性策略算法引入确定性行为策略b,将这个平均改为针对策略b采样得到的轨迹,得到异策确定性梯度为Eρb[qπ(θθ)(𝘚,π(𝘚;θθ))]=Eρb[π(𝘚;θθ)[aqπ(θθ)(𝘚,𝘢)]𝘢=π(𝘚;θθ)]。这个表达式与同策的情形相比,期望运算针对的表达式相同。所以,异策确定性算法的迭代式与同策确定性算法的迭代式相同。

异策确定性算法可能比同策确定性算法性能好的原因在于,行为策略可能会促进探索,用行为策略采样得到的轨迹能够更加全面的探索轨迹空间。这时候,最大化对轨迹分布的平均期望时能够同时考虑到更多不同的轨迹,使得在整个轨迹空间上的所有轨迹的回报会更大。

与非确定性策略梯度相比,非确定性异策算法的迭代式中含有重采样因子π(𝘈t|𝘚t;θθ)b(𝘈t|𝘚t),而确定性异策算法中没有。这是因为,确定性的行为策略b并不对于确定性的目标策略π(θθ)绝对连续,重采样因子没有定义,所以不包括重采样因子。

第177页算法9-2第2.1步和2.2步之间

增加

2.2(初始化状态)选择状态𝘚

2.3(确定行为策略)确定行为策略b

第177页算法9-2第2.2.1步

2.2.1(执行)用b(𝘚)得到

改为

2.4.1(执行)用b(𝘚)得到

第178页算法9-3第2.2.2步

UR+γq(𝘚,π(𝘚;θθ))

改为

UR+γq(𝘚,π(𝘚;θθ目标);w目标)

第179页算法9-4第2.2.3步

U=R+γmini=0,1q(𝘚,π(𝘚;θθ目标);w(i))

改为

UR+γmini=0,1q(𝘚,𝘈;w目标(i))

第180页9.3节

作者注:Gym 0.21版本将Pendulum-v0改为Pendulum-v1。

第180页图9-1

改为

第180页第4行

X轴是水平向下的,Y轴是水平向右的。

改为

X轴是水平向上的,Y轴是水平向左的。

第180页第8行

下一观测(cosΘt+1,sinΘt+1,Θ˙)

改为

下一观测(cosΘt+1,sinΘt+1,Θ˙t+1)

第180页表9-1最右边一列

倒立摆(Pendulum-v0)
[π,π)×[4π,4π]×[9π,9π]
[1,1]2×[4π,4π]×[9π,9π]
[2,2]
[π26.404,0]

改为

倒立摆(Pendulum-v0)
[π,π)×[8,8]
[1,1]2×[8,8]
[2,2]
[π26.404,0]

第180页第18-19行

Θt+1Θt+0.05(Θ˙0.75sinΘ0.15𝘈t)[π,+π)的主值区间

Θ˙t+1clip(Θ˙t0.75sinΘt0.15𝘈t,8,+8)

改为

Θt+1Θt+0.05(Θ˙t+0.75sinΘt+0.15𝘈t)[π,+π)的主值区间

Θ˙t+1clip(Θ˙t+0.75sinΘt+0.15𝘈t,8,+8)

第181页第1行

|Θ˙|

改为

|Θ˙t|

第189页

gym[atari]已官方支持Windows。Gym <=0.20:在Windows、macOS、Linux系统下均只需用下列命令就可以完成gym[atari]的安装:Gym 0.21又更改了安装方式,需要再下载ROM。

第191页表10-1(共4处)

NoFrameSkip

改为

NoFrameskip

第204页第5~6行

极大极小算法(monimax)

改为

极大极小算法(minimax)

第207页图11-3

改为