Gittins index

  • 資料
  • s成功回数、f失敗回数
  • 試行回数が大きくなるとインデックスはs/(s+f)に収束する
  • 期待値はベータ分布事後分布を用いる
  • インデックスの収束値からのずれは、その時点での予想報酬量のばらつきが多いほど、大きくなる
  • インデックスの収束値からのずれは、成功率の下での成否の値のばらつきが大きいほど、小さくなる。成功率が0、1に近いほど小さくなる
  • インデックスの収束値からのずれを近似式で提案している
  • yは成否シークエンス、aは選択アーム列、\muは報酬量、\gammaは続行確率
  • \theta = E(\theta|y,a) = (s+1)/(s+f+2)
  • v = Var(\mu|y)
  • sigma^2 = Var(y|\theta,a)
  • C=-log(\gamma)
  • \psi(s) = \sqrt{s/2} : s<=0.1
  • \psi(s) = 0.49-0.11s^(-1/2) : 0.2 < s <=1
  • \psi(s) = 0.63-0.26s^(-1/2) : 1 < s <=5
  • \psi(s) = 058.77-0.s^(-1/2) : 5 < s <=15
  • \psi(s) = (2log(s) - log(log(s)) -log(16\pi))^(1/2) : s>15

試行回数が少ないほど、その時点での予想報酬量のばらつきが多いので、

my.gitting.psi <- function(s){
	ret <- sqrt(s/2)
	ret[which(s>0.1)] <- 0.49-0.11*(s[which(s>0.1)])^(-1/2)
	ret[which(s>1)] <- 0.63-0.26*(s[which(s>1)])^(-1/2)
	ret[which(s>5)] <- 0.77-0.58*(s[which(s>5)])^(-1/2)
	ret[which(s>15)] <- (2*log(s[which(s>15)]) -log(log(s[which(s>15)])) - log(16*pi))^(1/2)
	return(ret)
}


s <- seq(from=0,to=20,length=200)


plot(s,my.gitting.psi(s))

my.E <- function(s,f){
	(s+1)/(s+f+2)
}
my.v <- function(s,f){
	(s+1)*(f+1)/((s+f+2)^2*(s+f+2+1))
}

my.sigma<- function(s,f){
	n <- s+f
	p <- my.E(s,f)
	n*p*(1-p)
}

my.BrezziLai <- function(s,f,gamma){
	E <- my.E(s,f)
	v <- my.v(s,f)
	s <- my.sigma(s,f)
	C <- -log(gamma)
	S <- v/(C*s)
	psi <- my.gitting.psi(S)
	ret <- E + v^(1/2) * psi
	return(ret)
}

s <- f <- 0:100
sf <- expand.grid(s,f)
g <- 0.999
bb <- my.BrezziLai(sf[,1],sf[,2],g)

library(rgl)
plot3d(sf[,1],sf[,2],bb)