Durant ce devoir, j’ai travaillé avec Baptiste Bétend pour faire le code R de nos stratégies.
Pour la stratégie m1 :
Pour la stratégie un, on joue que sur la machine A donc si la probabilité de celle ci est bonne c’est une bonne stratégie. Cependant si la probabilité associé à cette machine a une moins bonne probabilité que la machine B, cette stratégie est pas optimisé.
Pour la stratégie m2 :
Pour la stratégue deux, on joue que sur la machine B donc cela sera la même chose que pour la stratégie 1, il se peut que cette stratégie soit la meilleur si la machine B a une plus grosse probabilité de gagner.
Pour la stratégie m3 :
Pour cette stratégie, on joue un coup sur deux sur chaque machine donc cette stratégie est mieux que si on joue tout le temps sur la machine avec la probabilité la plus basse mais moins bien que l’inverse. Mais ça permet un entre deux si on connait pas les probabilités.
Pour la stratégie mL:
Pour la cette stratégie, on fait un échantillon de 50 sur les 2 machines en alternant pour voir celle qui gagne le plus et on joue le reste sur la machine qui a le meilleur ratio. Sur un échantillon de 50 il y a quand même des chance que l’on joue le reste sur la machine B même si ça doit être inférieur au nombre de simulation où on joue le reste sur la machine A. Elle semble être bonne même si plus l’échantillon est grand plus on va pouvoir savoir laquelle des deux machine a la meilleure probabilité.
Pour la stratégie mG :
Cette stratégie effectue des ratios pendant tous les tirages et au fur et à mesure on va avoir la machine la plus prometteuse qui va ressortir donc cette stratégie semble meilleur car elle va évoluer pendant tout le tirage et même si le tirage commence mal il peut se rattraper à tout moment.
Pour la stratégie mT :
Cette stratégie est assez similaire avec la précédente, sauf qu'on va comparer avec les valeurs de la densité à chaque tirage. Cependant le résultat devrait être très ressemblant avec la stratégie précédente.
set.seed(4545687) # The Ultimate Anwser of Life, the Universe and Everything
library("ggplot2")
pa = 0.65
pb = 0.55
Tmax = 1000
nloops = 100
varTest = 0.05
epsilon = 0.1
regret = c()
simulA <- function(res, t, numeroSimu) {
for(j in 1:nloops){
res[(j-1)*Tmax+1:(j*Tmax)] = (pa-(cumsum(rbinom(1:Tmax,1,pa)) /(1:Tmax)))
t[(j-1)*Tmax+1:(j*Tmax)] = (1:Tmax)
numeroSimu[(j-1)*Tmax+1:(j*Tmax)] = j
}
df<-data.frame(res, t, numeroSimu)
return(df)
}
simulB <- function(res, t, numeroSimu) {
for(j in 1:nloops){
res[(j-1)*Tmax+1:(j*Tmax)] = (pa-(cumsum(rbinom(1:Tmax,1,pb)) /(1:Tmax)))
t[(j-1)*Tmax+1:(j*Tmax)] = (1:Tmax)
numeroSimu[(j-1)*Tmax+1:(j*Tmax)] = j
}
df<-data.frame(res, t, numeroSimu)
return(df)
}
simulAB <- function(res, t, numeroSimu) {
for(j in 1:nloops){
if (runif(1, 0, 1)>0.5) {
p = pa
} else { p = pb }
res[(j-1)*Tmax+1:(j*Tmax)] = (pa-(cumsum(rbinom(1:Tmax,1,p)) /(1:Tmax)))
t[(j-1)*Tmax+1:(j*Tmax)] = (1:Tmax)
numeroSimu[(j-1)*Tmax+1:(j*Tmax)] = j
}
df<-data.frame(res, t, numeroSimu)
return(df)
}
simulL <- function(res, t, numeroSimu) {
T = (varTest*Tmax)
res2 = c()
n = c()
for(j in 1:nloops){
resBis = c()
i=1
gain1 = 0
gain2 = 0
temp = 0
tempBis = 0
while (i<T) {
temp = (rbinom(1,1,pa))
tempBis = tempBis + temp
resBis = c(resBis, pa-(tempBis)/i)
if(temp){
gain1 = gain1+1
}
temp = (rbinom(1,1,pb))
tempBis = tempBis + temp
resBis = c(resBis, pa-(tempBis)/(i+1))
if(temp){
gain2 = gain2+1
}
i = i+2
}
if(gain1>gain2){p = pa}else{p = pb}
temp2 = (cumsum(pa-rbinom((T+1):Tmax,1,p)))
res2 = (temp2)/((T+1):Tmax)
res = c(res, resBis, res2)
t = (1:Tmax)
t = c(t, t)
n[1:Tmax] = j
numeroSimu = c(numeroSimu, n)
}
df<-data.frame(res, t, numeroSimu)
return(df)
}
simulG <- function(res, t, numeroSimu) {
res = c()
n = c()
for(j in 1:nloops){
tempBis = 0
i=1
nbA=0
nbB=0
victoirA=0
victoirB=0
while(i<=Tmax){
rA = victoirA/(nbA+1)
rB = victoirB/(nbB+1)
marge=rbinom(1,1,1-epsilon)
if(((rA>rB) && marge) || ((rA<rB) && !marge)){
temp = rbinom(1,1,pa)
victoirA = victoirA + temp
tempBis = tempBis + temp
res = c(res, pa - tempBis/i)
nbA = nbA+1
}else{
temp = rbinom(1,1,pb)
victoirB = victoirB + temp
tempBis = tempBis + temp
res = c(res, pa - tempBis/i)
nbB = nbB+1
}
i = i+1
}
t = (1:Tmax)
t = c(t, t)
n[1:Tmax] = j
numeroSimu = c(numeroSimu, n)
}
df<-data.frame(res, t, numeroSimu)
return(df)
}
simulT <- function(res, t, numeroSimu) {
res = c()
n = c()
for (j in 1:nloops) {
n1A=0
n2A=0
n1B=0
n2B=0
i=1
tempBis=0
while (i<=Tmax) {
probaA = rbeta(1, n1A+1, n2A+1)
probaB = rbeta(1, n1B+1, n2B+1)
if(probaA>=probaB){
temp = rbinom(1,1,pa)
n1A = n1A + temp
n2A = n2A +(1-temp)
tempBis = tempBis + temp
res = c(res, pa - tempBis/i)
}else{
temp = rbinom(1,1,pb)
n1B = n1B + temp
n2B = n2B +(1-temp)
tempBis = tempBis + temp
res = c(res, pa - tempBis/i)
}
i = i+1
}
t = (1:Tmax)
t = c(t, t)
n[1:Tmax] = j
numeroSimu = c(numeroSimu, n)
}
df<-data.frame(res, t, numeroSimu)
return(df)
}
r1 = c()
t1 = c()
n1 = c()
Formes closes
Forme m1:
\(E[Gm(T)]= \sum_{i=1}^{T} Pa\)
Forme m2:
\(E[Gm(T)]= \sum_{i=1}^{T} Pb\)
Forme m3:
\(E[Gm(T)]= \frac{1}{2}\sum_{i=1}^{T} Pa + \frac{1}{2}\sum_{i=1}^{T} Pb\)
• Justifier pourquoi on s’intéressera à la quantité \(R m (t) = p A − E[G m t]\), que l’on appellera regret de la stratégie m, pour évaluer l’efficacité de nos stratégie. Qu’attendrait-on d’une “bonne” stratégie ?
On utilise le regret car c’est un très bon indicatif de la meilleur stratégie que l’on peut avoir en fonction de toute les simulations que l’on va faire. Cela nous permet de représenté graphiquement. Sachant que le résultat idéal est 0 cela voudra dire que l’on a une bonne stratégie. On pourra le voir dans les graphique ci dessous qui représente le regret des 3 premières stratégie.
Stratégie m1
df = simulA(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.1)
On peut voir sur ce graphe les simulations convergé vers 0 ce qui veut dire que notre solution est très bonne, c’est normal vu que l’on prend la machine avec la meilleur probabilité.
Stratégie m2
df = simulB(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.1)
On peut voir ici que ça converge vers 0,1 ce qui veut dire que notre stratégie n’est pas bonne.
Stratégie m3
df = simulAB(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.1)
On voit ici 2 types de simulations, certaines suivent la probabilité de la machine A donc ils tendent vers 0 et d’autres suivent la probabilité de la machine B donc ils tendent vers 0,1. Cette stratégie n’est pas bonne du tout.
Stratégie mL • Tracer une estimation de \(R m L (t)\) au cours du temps t.
df = simulL(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.05)
• La stratégie \(m L\) vous semble-t-elle une bonne stratégie ? Pourquoi ?
Sur ce graphe on peut que toutes les simulations ne sont pas pareil et qu’il y a de groupe qui se forme, on y retrouve la où la machine A a été choisi, la ou le trait est plus épais au environ de 0 car c’est la meilleur solution de choisir la machine A. Cependant il y a quand même une bonne partie des simulations qui sont parties vers la machine B après avoir fait l’échantillon, on les remarque par l’amas de simulations qui tendent vers 0,1. C’est un solution qui n’est pas très bonne car il y a quand même un nombre important de simulation qui ont finit sur la machine B.
Stratégie mG
• Tracer une estimation de \(R m G (t)\) au cours du temps t.
df = simulG(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.05)
• La stratégie \(m G\) vous semble-t-elle une bonne stratégie ? Pourquoi ?
On observe déjà un graphique qui tend beaucoup plus vers 0 donc une solution qui serait à priori meilleur que la solution vu précédemment. On observe encore quelques simulations qui se détache un peu mais on voit quand même un amélioration. Avec cette solution la machine A a été chosi beaucoup plus vite dans ce cas car elle a une meilleure probabilité donc avec les ratios. Cela reste des simulations donc on a des résultats différents à chaque fois mais on obtient un résultat plus satisfaisant. C’est une bonne solution.
Stratégie mT
• Tracer une estimation de \(R m T (t)\) au cours du temps t.
df = simulT(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.05)
• La stratégie \(m G\) vous semble-t-elle une bonne stratégie ? Pourquoi ?
On voit une legère amélioration par rapport à la stratégie précédente, la seule différence que l’on peut voir c’est la vitesse de stabilisation est supérieur, c’est lié à l’utilisation de la densité de probabilité.
On a pu voir dans ce tp différentes stratégie afin de déterminer la meilleur stratégie pour jouer au casino avec 2 machines dont on ne connait pas les probabilités. La meilleur solution est la stratégie m1 dans notre cas. Cependant quand on ne connait pas les probabilités, on voit que la meilleure solution est la dernière mais si la précédente était déja très bonne par rapport à la 3eme et mL. Les résultats sont a peu près ce que nous avions pu dire dans nos intentions. Les deux dernières stratégie étaient dur a identifié sans les programmer et sans les graphes.