基础符号
符号 | 说明 |
---|---|
t t t | 时刻 |
i ∈ { 1 , 2 , 3... n 0 } i \in \{1,2,3...n_0\} i∈{1,2,3...n0} | 选择(options、levels) |
i ∗ i_* i∗ | 最佳选择(optimal option) |
j ∈ { 1 , 2 , 3... n A } j \in \{1,2,3...n_A\} j∈{1,2,3...nA} | 玩家(agents) |
N j t \mathcal N_j^t Njt | 与玩家 j j j在时刻 t t t进行交流的邻居集合( j ∈ N j t j \in \mathcal N_j^t j∈Njt) |
φ i t ∈ { 1 , 2 , 3... n 0 } \varphi _i^t \in \{1,2,3...n_0\} φit∈{1,2,3...n0} | 玩家 i i i在时刻 t t t做出的选择 |
X i t X_i^t Xit | 在时刻 t t t选择了 i i i,对应的收益(reward) |
Π { φ j t = i } ∈ { 0 , 1 } \Pi_{\{\varphi _j^t=i\}} \in \{0,1\} Π{φjt=i}∈{0,1} | 玩家 j j j在时刻 t t t是否选择了 i i i |
ϵ i j t ≜ { 1 , i f ( ∑ k ∈ N j t Π { φ k t = i } ) ≠ 0 0 , i f ( ∑ k ∈ N j t Π { φ k t = i } ) = 0 \epsilon _{ij}^t \triangleq \left\{\begin{matrix}1, & if \left ( \sum_{k \in \mathcal N_j^t} \Pi_{\{\varphi _k^t=i\}} \right ) \neq 0\\0, & if \left ( \sum_{k \in \mathcal N_j^t} \Pi_{\{\varphi_k^t=i\}} \right ) = 0\end{matrix}\right. ϵijt≜⎩⎨⎧1,0,if(∑k∈NjtΠ{φkt=i})=0if(∑k∈NjtΠ{φkt=i})=0 | 玩家 j j j及其邻居是否有人在时刻 t t t选择了 i i i |
N i j ( t ) ≜ ∑ v = 1 t ϵ i j v = N i j ( t − 1 ) + ϵ i j t N_{ij}(t) \triangleq \sum_{v=1}^t \epsilon _{ij}^v=N_{ij}(t-1)+\epsilon _{ij}^t Nij(t)≜v=1∑tϵijv=Nij(t−1)+ϵijt | 玩家 j j j及其邻居在时间 [ 1 , 2... t ] [1,2...t] [1,2...t]内选择 i i i的总次数 |
S j ( T ) ≜ ∑ i = 1 n 0 ∑ t = 1 T X i t Π { φ j t = i } S_j(T) \triangleq \sum_{i=1}^{n0}\sum_{t=1}^{T}X_i^t\Pi_{\{\varphi _j^t=i\}} Sj(T)≜i=1∑n0t=1∑TXitΠ{φjt=i} | 累计收益(cumulative reward) |
R j ( T ) ≜ E ( ∑ i ≠ i ∗ n 0 ∑ t = 1 T ( X i ∗ t − X i t ) Π { φ j t = i } ) ) R_j(T) \triangleq E\left (\sum_{i \neq i_*}^{n_0} \sum_{t=1}^{T}(X_{i_*}^t-X_i^t) \Pi_{\{\varphi _j^t=i\}}) \right ) Rj(T)≜E⎝⎛i=i∗∑n0t=1∑T(Xi∗t−Xit)Π{φjt=i})⎠⎞ | 损失(regret) |
- 每个选择在某一时刻对应的收益是由高斯分布( μ , ν \mu, \nu μ,ν)确定的,与玩家无关,每个玩家在同一时刻选择同一个,收益是一样的
- 目标:累积收益的期望值 E ( X ) E(X) E(X)达到最大、损失regret达到最小
- 变量加上标 s s s表示自我的,即玩家 j j j自己相关的,如 R j s ( T ) R_j^s(T) Rjs(T)、 S j s ( T ) S_j^s(T) Sjs(T)、 N i j s ( T ) N_{ij}^s(T) Nijs(T) S i j s ( T ) ≜ ∑ t = 1 T X i t Π { φ j t = i } R i j s ( T ) = E ( ∑ t = 1 T ( X i ∗ t − X i t ) Π { φ j t = i } ) ) ≤ Δ ˉ E ( ∑ t = 1 T Π { φ j t = i } ) = Δ ˉ E ( N i j s ( T ) ) S_{ij}^s(T) \triangleq \sum_{t=1}^TX_i^t\Pi_{\{\varphi _j^t=i\}} \\ R_{ij}^s(T)= E\left ( \sum_{t=1}^{T}(X_{i_*}^t-X_i^t) \Pi_{\{\varphi _j^t=i\}}) \right ) \leq \bar{\Delta}E \left(\sum_{t=1}^{T} \Pi_{\{\varphi _j^t=i\}} \right)=\bar{\Delta}E \left(N_{ij}^s(T) \right) Sijs(T)≜t=1∑TXitΠ{φjt=i}Rijs(T)=E(t=1∑T(Xi∗t−Xit)Π{φjt=i}))≤ΔˉE(t=1∑TΠ{φjt=i})=ΔˉE(Nijs(T))其中有 Δ ≤ E ( X i ∗ r ) − E ( X i r ) ≤ Δ ˉ \Delta \leq E(X_{i*}^r)-E(X_{i}^r) \leq \bar{\Delta} Δ≤E(Xi∗r)−E(Xir)≤Δˉ,即 Δ ˉ \bar{\Delta} Δˉ是 E ( X i ∗ r ) − E ( X i r ) E(X_{i*}^r)-E(X_{i}^r) E(Xi∗r)−E(Xir)的最大值
- 变量加上标
c
c
c表示邻居的(communication),即除
j
j
j本身以外的邻居,如
R
j
c
(
T
)
R_j^c(T)
Rjc(T)、
S
j
c
(
T
)
S_j^c(T)
Sjc(T)、
N
i
j
c
(
T
)
N_{ij}^c(T)
Nijc(T)
如果有多个邻居选择了 i i i,则只计一次 S i j c ( T ) ≜ ∑ t = 1 T X i t Π { φ j t ≠ i & ϵ i j t = 1 } R i j c ( T ) = E ( ∑ t = 1 T ( X i ∗ t − X i t ) Π { φ j t ≠ i & ϵ i j t = 1 } ) ) ≤ Δ ˉ E ( ∑ t = 1 T Π { φ j t ≠ i & ϵ i j t = 1 } ) S_{ij}^c(T) \triangleq \sum_{t=1}^TX_i^t\Pi_{\{\varphi _j^t \neq i \, \&\, \epsilon _{ij}^t=1 \}} \\ R_{ij}^c(T)= E\left ( \sum_{t=1}^{T}(X_{i_*}^t-X_i^t) \Pi_{\{\varphi _j^t \neq i \, \&\, \epsilon _{ij}^t=1 \}}) \right ) \leq \bar{\Delta}E \left(\sum_{t=1}^{T} \Pi_{\{\varphi _j^t \neq i \, \&\, \epsilon _{ij}^t=1 \}} \right) Sijc(T)≜t=1∑TXitΠ{φjt=i&ϵijt=1}Rijc(T)=E(t=1∑T(Xi∗t−Xit)Π{φjt=i&ϵijt=1}))≤ΔˉE(t=1∑TΠ{φjt=i&ϵijt=1})
UCB算法
进行选择
每个选择的得分由两部分决定, e x p l o i t a t i o n exploitation exploitation和 e x p l o r a t i o n exploration exploration Q i j t = X ^ i j t + C i j t Q_{ij}^t=\widehat{X}_{ij}^t+C_{ij}^t Qijt=X ijt+Cijt 其中 C i j t = Ψ j k ( t ) N i j k ( t ) C_{ij}^t=\sqrt{\frac{\Psi _{jk}(t)}{N_{ijk}(t)}} Cijt=Nijk(t)Ψjk(t), Ψ j k ( t ) ≈ l o g ( t ) \Psi _{jk}(t) \approx log(t) Ψjk(t)≈log(t)
e x p l o i t a t i o n exploitation exploitation是玩家 i i i对选择 j j j的收益的估计值,是 j j j和邻居在时间 [ 1 , 2... t ] [1,2...t] [1,2...t]内对于 j j j的总收益的平均值 X ^ i j t ≜ 1 N i j ( t ) ( ∑ τ = 1 t X i τ ϵ i j τ ) \widehat{X}_{ij}^t \triangleq \frac{1}{N_{ij}(t)} \left ( \sum_{\tau =1}^t X^{\tau }_i \epsilon _{ij}^{\tau } \right ) X ijt≜Nij(t)1(τ=1∑tXiτϵijτ)
寻找邻居
在时刻 t t t,玩家 j j j对于选择 i i i和另一个玩家 k k k的得分定义为 Q i j k t = X ^ i j k t + Ψ j k ( t ) N i j k ( t ) Q_{ijk}^t=\widehat{X}_{ijk}^t+\sqrt{\frac{\Psi _{jk}(t)}{N_{ijk}(t)}} Qijkt=X ijkt+Nijk(t)Ψjk(t)其中 X ^ i j k t \widehat{X}_{ijk}^t X ijkt是 j j j从 k k k处获取的对于选择 i i i的收益平均值
- 玩家
j
j
j每个时刻要选择
n
j
n_j
nj(预先定义好的量)个邻居,首先在每个
k
k
k内部,对
j
j
j进行排序,选择一个最大的值作为
k
k
k的得分,之后对
k
k
k进行排序,选择
T
o
p
(
n
j
)
Top(n_j)
Top(nj)作为本次选择的邻居
每轮与邻居交换的信息包括邻居的选择和相应的收益 - 随着时间的推移,玩家会趋向于 e x p l o i t a t i o n exploitation exploitation,而选择邻居时,希望选择 e x p l o r a t i o n exploration exploration程度更大的玩家
部分代码
self.k = [ (1/((8*self.reward_variance[i])**2)*2) for i in range(self.no_bandits)]
def pick(self):
Qij_T = [0 for i in range(self.no_bandits)]
for i in range(self.no_bandits):
k = self.k[i]
alpha = 3/(2*k)
gamma = alpha*log(self.T)
Qij_T[i] = self.X_ij_T[i] + sqrt(gamma/self.Nij_T[i])
self.Q = Qij_T
sorted_choice = argsort(Qij_T)
m = sorted_choice[-1]
m_c = 1
for i in range(1, self.no_bandits):
if Qij_T[sorted_choice[-(i+1)]] != Qij_T[m]:
break
else:
m_c += 1
if m_c == 1: # 只有一个最大值
index = 1
else: # 有多个最大值,随机选择一个
index = random.randint(1, m_c)
choice = sorted_choice[-index]
return choice