伪代码
中文逻辑
算法1 Douzero的Actor过程
- Input: 对于每一次entry,共享buffer B L , B U , B D B_L, B_U, B_D BL,BU,BD有B个entries,size为 S S S,探索超参数为 ϵ \epsilon ϵ,折扣为 γ \gamma γ
- 初始化本地Q-networks Q L , Q U , Q D Q_L,Q_U,Q_D QL,QU,QD,本地buffers D L , D U , D D D_L,D_U,D_D DL,DU,DD
- for 迭代=1,2,…,T do
- 用learner过程异步化 Q L , Q U , Q D Q_L,Q_U,Q_D QL,QU,QD
- for t = 1,2,…,T do #生成一个回合
- Q ← \leftarrow ← 基于一个位置, Q L , Q U , Q D Q_L,Q_U,Q_D QL,QU,QD其中的一个
- a t ← { a r g m a x a Q ( s t , a ) , w i t h p r o b ( 1 − ϵ ) 随 机 动 作 , w i t h p r o b ϵ a_t \leftarrow \begin{cases}argmax_aQ(s_t,a), with\ prob (1-\epsilon)\\随机动作, with\ prob\ \epsilon \end{cases} at←{argmaxaQ(st,a),with prob(1−ϵ)随机动作,with prob ϵ
- 执行 a t a_t at,观察到 s t + 1 s_{t+1} st+1和奖励 r t r_t rt
- 存 { s t , a t , r t } \{s_t,a_t,r_t \} {st,at,rt}进相应的 D L , D U , D D D_L,D_U,D_D DL,DU,DD
- end for
- for t=T-1,T-2,…,1 do #获得累计奖励
- r t ← r t + γ r t + 1 r_t \leftarrow r_t+\gamma r_{t+1} rt←rt+γrt+1然后更新 D L , D U , D D D_L,D_U,D_D DL,DU,DD中的 r t r_t rt
- end for
- for
p
∈
{
L
,
U
,
D
}
p\in \{L,U,D \}
p∈{L,U,D}do #多线程优化
- if
D
p
.
l
e
n
g
t
h
≥
L
D_p.length \ge L
Dp.length≥L then
- 请求并等待 B p B_p Bp的一个空entry
- 从 D p D_p Dp中移动大小为 L L L的 { s t , a t , r t } \{s_t,a_t,r_t\} {st,at,rt}到 B p B_p Bp
- end if
- if
D
p
.
l
e
n
g
t
h
≥
L
D_p.length \ge L
Dp.length≥L then
- end for
- end for
算法2 Douzero的Learner过程
- Input: 对于每一次entry,共享buffer B L , B U , B D B_L, B_U, B_D BL,BU,BD有B个entries,size为 S S S, batch size M M M,学习率为 ψ \psi ψ
- 初始化全局Q-networks Q L g , Q U g , Q D g Q^g_L,Q^g_U,Q^g_D QLg,QUg,QDg
- for 迭代=1,2,… 知道收敛 do
- for
p
∈
{
L
,
U
,
D
}
p\in \{L,U,D \}
p∈{L,U,D} do #多线程优化
- if
B
p
B_p
Bp中的full entries的数目
≥
M
\ge M
≥M then
- 从 B p B_p Bp中抽样一个 M × S 实 例 { s t , a t , r t } M\times S实例\{s_t,a_t,r_t\} M×S实例{st,at,rt}的一个batch然后释放entris
- 用MSE loss和学习率 ψ \psi ψ更新 Q p g Q^g_p Qpg
- end if
- if
B
p
B_p
Bp中的full entries的数目
≥
M
\ge M
≥M then
- end for
- for
p
∈
{
L
,
U
,
D
}
p\in \{L,U,D \}
p∈{L,U,D} do #多线程优化
- end for