set.seed(4545679)
library("ggplot2")

r1 = c()
t1 = c()
n1 = c()

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)
}

DM Probabilité et Simulation

Question préliminaire

Le code produit dans ce TP a été réalisé avec DUMENIL Antoine, d’ou la ressemblance. Le compte-rendu fut, lui, individuel

• m est la stratégie qui consiste à jouer systématiquement la machine MA ;
\(E[Gm(T)]= \sum_{i=1}^{T} Pa\)

df = simulA(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.1)

• m est la stratégie qui consiste à jouer systématiquement la machine MB ;
\(E[Gm(T)]= \sum_{i=1}^{T} Pb\)

df = simulB(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.1)

• m est la stratégie qui consiste à jouer la machine MA avec probabilité 1/2 et la machine MB avec probabilité 1/2.
\(E[Gm(T)]= \frac{1}{2}\sum_{i=1}^{T} Pa + \frac{1}{2}\sum_{i=1}^{T} Pb\)

df = simulAB(r1, t1, n1)
ggplot(data = df) + geom_line(aes(x = t, y = res, group = numeroSimu), size = 0.1)

• Justifier pourquoi on s’intéressera à la quantité Rm(t)= pA- (E[Gm(t)])/t , que l’on appellera regret de la stratégie m, pour évaluer l’efficacité de nos stratégies. Qu’attendrait-on d’une “bonne” stratégie ?
La formule correspond à la différence de ce qu’on a perdu par rapport a si on jouait avec la probabilité de A. C’est pour ça que l’on peu nommée ça le regret, c’est ce que l’on regrette d’avoir perdu.
On s’attendrais à ce qu’une bonne stratégie soit celle qui joue toujours avec la machine qui a la plus grande probabilité de succès pour maximiser les gains. Donc vue qu’on étudie le cas ou Pa est la plus grosse probabilité, on étudie en réalité ce qu’on a perdu par rapport à la meilleure stratégie.

On apprend (un peu) puis on exploite

• Tracer une estimation de RmL(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 mL vous semble-t-elle une bonne stratégie? Pourquoi?
On remarque que la courbe se sépare en deux, la partie superieur correspond au choix de la machine B a la fin de l’estimation (la ou le regret est le plus elevé), tandis que la partie basse correspond au choix de la machine A. On constate que cette methode est plus efficace que la strategie AB car la partie superieur avec le plus gros regret et nettement plus faible que la partie inferieur contrairement a la stategie AB qui avait deux partie a peu près equivalente. Il reste encore une bonne partie d’erreur toutefois.
/!\ Vers le point 50 les courbe se regroupe, cela n’est pas normal mais impossible de trouver pourquoi dans le code /!\

On exploite mais on se force à toujours apprendre (un peu)

• Tracer une estimation de RmG(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 mG vous semble-t-elle une bonne stratégie? Pourquoi?
La strategie mG ne cause plus de grosse separation entre les deux machine car celle ci ne se restreind pas a un choix du départ mais s’adapte a tout moment. On voit toutefois que certaines courbe aurait besoin d’un plus grand Tmax pour rejoindre un regret proche de zéro. Cette strategie est donc meilleur que la précedente mais il reste encore une marge d’erreur selon le resultat des premier lancé et selon la machine initialement utilisé.

On tire au hasard en biaisant selon nos observations

• Tracer une estimation de RmT (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 mT vous semble-t-elle une bonne stratégie? Pourquoi?
On arrive bien évidemment sur la meilleurs solution de ce sujet, on voit nettement toutes les courbes converger vers un regret proche de zéro. Cela se passe ainsi car c’est la densité des resultats précédents qui est utilisée pour trouver le meilleur prochain coup a chaque nouveau coup.