Skip to content

RICM4 PS

Quelques remarques générales:

  • Beaucoup d'entre vous donnent des explications vraiment pas claires pour ce qui est du calcul de l'espérance du gain de la stratégie mixte. Je le réécris donc proprement: Dans cette stratégie, on tire la machine \(M_t\) à pile ou face. Autrement dit, \(P[M_t==A]=0.5\) et \(P[M_t==B]=0.5\). Du coup, \(P[X_{M_t,t}=1] = P[M_t=A].P[X_{A,t}=1] + P[M_t=B].P[X_{B,t}=1] = 0.5 p_A + 0.5 p_B\). De même, on obtient \(P[X_{M_t,t}=0] = 1-0.5(p_A+p_B)\). C'est ce qu'on appelle la loi (la probabilité de chaque valeur) de \(X_{M_t,t}\) et on en déduit que l'espérance de \(X_{M_t,t}\) est \(E[X_{M_t,t}=0] = 0.5(p_A+p_B)\).

Le gain cumulé est \(G(T) = \sum_{t=1}^T X_{M_t,t}\) et on en déduit son espérance: \(E[G(T)] = E[\sum_{t=1}^T X_{M_t,t}] = \sum_{t=1}^T E[X_{M_t,t}] = T/2.(p_A+p_B)\).

  • Autre petite remarque pour ceux qui auraient calculé le regret avec une boucle for. Il y a plus "élégant". Si X est le tableau du gain de la machine jouée aux étapes 1 à T, il suffit d'écrire: R=cumsum(X)/(1:T). Je vous renvoie à mes explications rapides sur le DM pour une mise en œuvre concise.

  • Lorsque l'on joue une machine fixe \(M\), notre gain moyen (le gain cumulé divisé par T) est une variable aléatoire dont la loi est concentrée autour de \(p_M\). En fait, il est facile de montrer que l'espérance du gain moyen est alors exactement \(p_M\).

  • Si \(A\) est la meilleur machine, jouer systématiquement est la meilleur stratégie et l'espérance de son gain moyen est donc \(p_A\). Toute autre stratégie aura une espérance de gain moyen d'une stratégie plus basse et le regret mesure donc la différence avec celui de la stratégie optimale. Le regret est donc forcément positif (à moins de déjà connaître la meilleur stratégie bien sûr) et une bonne stratégie est une stratégie dont le regret à l'étape \(T\) tend vers 0 quand \(T\) tend vers l'infini.

  • Ainsi, si on considère la stratégie qui joue systématiquement la machine \(B\), on a un regret de \(p_B-p_A>0\). Si on joue aléatoirement avec même probabilité (ou si on alterne systématiquement) entre la machine \(A\) et la machine \(B\), on aura un regret de \((p_B-p_A)/2\). Et si on joue une fois sur 10 sur la machine \(B\), on on aura un regret de \((p_B-p_A)/10>0\). Toute stratégie qui joue "trop" sur la machine B aura un regret qui tendra vers une valeur strictement positive.

  • Comme la plupart d'entre vous l'ont remarqué, la stratégie \(m_L\) qui apprend pendant \(\epsilon.T\) étapes puis joue systématiquement sur la machine qui semble la meilleur, conduit à deux types de trajectoires: celles (nombreuses) qui sélectionnent \(A\) et tirent le regret vers 0, et celles (peu nombreuses mais significatives, surtout si la phase d'exploration est courte) qui sélectionnent \(B\) et tirent le regret vers une valeur non nulle. Cette stratégie ne peut donc être optimale. En fait, toute stratégie qui ne jouerait \(B\) qu'un nombre fini de fois ne peut être certaine d'avoir identifié la meilleur machine. Il faut donc jouer chaque machine une infinité de fois mais pas trop souvent la mauvaise machine car elle augmente le regret.

  • La stratégie \(m_G\) qui joue gloutonnement mais continue à essayer de temps en temps l'autre machine a la bonne propriété que l'estimation de la probabilité de gain des deux machine s'améliore bien au cours du temps (puisque les deux machines vont être jouées une infinité de fois). Seulement en continuant à jouer avec proba \(\epsilon\) l'autre machine, le regret ne pourra jamais dépasser \(\epsilon(p_A-p_B)>0\). Cette stratégie ne peut être optimale.

  • La dernière stratégie (échantillonnage dit «de Thompson», qui utilise la loi beta) permet de jouer une infinité de fois chaque machine (et ainsi d'affiner les estimations des probabilité de gain de chaque machine) mais joue bien plus fréquemment la machine la plus prometteuse d'où un regret qui va tendre vers 0 quand \(T\) tend vers l'infini. Comme certains l'ont remarqué, l'ensemble des trajectoire est également bien plus stable que pour les stratégies précédentes.

Dans l'ensemble, c'est plutôt bien. Certain ayant même fait du très bon travail. Voici maintenant des corrections individuelles.

Ancrenaz Vincent (A)

OK. RAS, code lisible, explications claires mais un peu trop concises.

  • Dans Q1, vous auriez pu vérifier que les simulations étaient conformes à vos calculs.
  • Le regret de la stratégie 1 ne peut pas tendre vers 0. Vous avez eu "de la chance" (ou pas) dans votre graphique car même avec epsilon1 à 0.05, il arrive que la machine B soit sélectionnée.
  • Vous auriez du mettre un peu de transparence sur vos trajectoires pour qu'on arrive mieux à distinguer ce qu'il se passe.

Pelisson Schanen (A)

Explications claires. Bon travail d'étude d'\(\epsilon\)-greedy.

  • Dans votre fonction calcul_regret, vous auriez pu vouloir utiliser la fonction cumsum ou bien incrémenter la somme plutôt que d'appeler Tmax fois la fonction sum.
  • C'est bien d'avoir joué avec les différents paramètres (pa, pb, e) pour comprendre comment le système se comportait.
  • Vous auriez du mettre un peu de transparence sur vos trajectoires pour qu'on arrive mieux à distinguer ce qu'il se passe.
  • Vos deux dernières courbes/appels sont identiques. Attention, en général, on sépare les fonctions de simulation (coûteuses) des fonctions d'affichage (de façon à pouvoir facilement les adapter).

Badat Cuau (A)

Bonne modélisation, et explications très claires. Quelques erreurs d'interprétation cependant.

  • Pour bien faire, pA , pB, N et Tmax devraient être des paramètres de la fonction simuler.
  • Le reste du code est bien malgré quelques répétitions qui auraient pu être évitées.
  • La modélisation est très bien, tout à fait rigoureuse. Par contre, je ne suis pas vraiment d'accord avec votre interprétation de "E[Gm(t)]/t" en terme de probabilité de la stratégie m et de machine “virtuelle”.
  • Attention, le regret de la première stratégie ne peut tendre vers 0 puisque vous avez identifié qu'une fraction non nulle de trajectoires choisit définitivement la machine B. Si vous réexécutiez plusieurs fois ces simulations vous verriez que la courbe rouge se stabilise assez souvent au dessus de 0. Le fait qu'elle se stabilise légèrement en dessous ici est un "coup de chance".
  • Attention, le regret de votre deuxième stratégie ne tend pas vers 0 puisque cette stratégie continue à jouer systématiquement avec proba \(\epsilon\) la machine B.

Bardou Bres (A)

Bonne utilisation de la vectorisation.

  • J'ai mis un moment à comprendre le code de strat_L (en particulier à cause de cet appel à rbinom où deux probabilités sont données) mais c'est correct.
  • Attention, en général, on sépare les fonctions de simulation (coûteuses) des fonctions d'affichage (de façon à pouvoir facilement les adapter).
  • À propos d'\(\epsilon\)-greedy (strat_G), vous concluez que le regret tend vers 0 alors qu'il est strictement supérieur à 0. Vous en auriez eu le coeur net en augmentant Tmax. En effet, la machine B, qui est moins bonne, continue d'être joué avec une probabilité fixe \(\epsilon\) et donc ça compte dans le regret… Votre dernier commentaire à ce sujet "qui témoignent que dans certains cas, la machine \(M_B\) a mieux fonctionné que \(M_A\)," est assez peu clair.

Betend Baptiste (A-/B+)

  • Votre code est difficile à lire car vos variables sont mal nommées (res, res2, resBis, temp, tempBis, …). Nommer une variable T en R est une mauvaise idée car T, c'est l'abréviation de TRUE.
  • "/!\ Vers le point 50 les courbe se regroupe, cela n’est pas normal mais impossible de trouver pourquoi dans le code /!\. C'est bien d'avoir remarqué qu'il y avait un problème. Le temps 50 correspond à la fin de la phase d'exploration. Votre regret n'a effectivement aucune raison de passer à 0 à ce moment là. C'est dû au fait que vous avez oublié d'ajouter tempBis à votre res2 (calculé avec le cumsum) pour prendre en compte les gains obtenus pendant l'exploration.
  • C'est bien d'avoir remarqué que pour mG, certaines trajectoires continuaient à être mauvaises alors que pour mT, il n'y avait plus ce problème, qu'elles convergeaient toutes vers un regret proche de zéro. En fait, ça converge bien vers zéro, ce qui n'est pas le cas de mG.
  • Quel dommage que vous n'ayez pas rajouté la moyenne des trajectoires sur chacune de vos courbes. C'est ce qui vous empêche de conclure vraiment sur la performance des différentes stratégies.

Bonaspetti Decamps (A)

Bon travail. Code clair. Bonnes intuitions confirmées par des analyses rigoureuses.

  • utilisez plutôt sample ou rbinom plutôt que runif
  • "10% du temps, nous choisirons la mauvaise machine. Cette méthode n’aura jamais tendance à tendre vers 0". Très bien.
  • Les effets de moiré étranges au début de vos graphiques sont dûs à l'utilisation de geom_point plutôt que geom_line.
  • Je ne comprenais pas pourquoi votre implémentation de la 3ème stratégie n'avait pas un regret tendant vers 0. C'est parce que vous avez utilisé dbeta au lieu de rbeta… Quel dommage.

Chabre Coscia (A)

Bon travail.

  • Votre modélisation et calcul de probabilité est confus. Regardez ce que j'ai écrit au début de ce document.
  • Mettre vos courbes en annexe n'est pas une bonne idée. Ça ne facilite pas la lecture de vos analyses.
  • Attention, en général, on sépare les fonctions de simulation (coûteuses) des fonctions d'affichage (de façon à pouvoir facilement les adapter).
  • À propos de la dernière stratégie et des "quelques courbes qui sont nettement au-dessus de 0 donc une moyenne plus haute." Avec cette stratégie, toute trajectoire converge vers 0 avec probabilité 1. Il aurait fallu utiliser geom_line avec un peu de transparence au lieu de geom_point pour le voir plus clairement.

Chasseguet Lattard (A-/B+)

Codes et analyse corrects.

  • Votre modélisation et calcul de probabilité est confus. Regardez ce que j'ai écrit au début de ce document.
  • "ce qui donne lieu à quelques courbes qui sont légèrement au-dessus de 0." En fait, l'ensemble des courbes sera légèrement au dessus de 0 puisque toute trajectoire continue à jouer régulièrement (avec proba \(\epsilon\)) la machine B.
  • "On remarque effectivement que la grande majorité des courbes semblent tendre vers 0." Bonne remarque. En fait toute trajectoire tend vers 0 avec probabilité 1.
  • Quel dommage que vous n'ayez pas rajouté la moyenne des trajectoires sur chacune de vos courbes. C'est ce qui vous empêche de conclure vraiment sur la performance des différentes stratégies.

Cordat-auclair Houbron et Houbron Cordat-auclair (B)

Travail sérieux mais vous êtes passés à côté du fait qu'il est impossible de conclure quoi que ce soit en ne calculant que quelques trajectoires.

  • Votre explication pour la méthode 3 (Q1) est incorrecte. Il n'y aura en général pas exactement Tmax/2 tirages de A. Regardez ce que j'ai écrit au début de ce document.
  • Votre code pour Rm est très bizarre. La boucle for(i in 1:5) ne sert à rien (d'ailleurs pourquoi 5?).
  • Avez-vous la moindre idée de ce que fait la fonction geom_smooth(method = 'loess') ? Pas ce que vous croyez à mon avis, ça n'a aucun sens ici. Quoi qu'il en soit, vos graphes ne montrent en général qu'une (ou quelques) trajectoire pour chaque méthode. Du coup, vous ne pouvez pas comprendre ce qu'il se passe vraiment.
  • Dans Q2, vous avez mal calculé votre regret dans la phase d'exploration (vous prenez gEpsA ou gEpsB alors que c'est le gain total qu'il faut considérer à chaque instant) d'où l'impression de décrochage.
  • Dans Q1 et Q2, vous ne calculez que 5 trajectoires. C'est bien trop juste pour pouvoir conclure quoi que ce soit de raisonnable. Il est indispensable de calculer beaucoup de trajectoires (l'énoncé suggérait une centaine a minima) et de regarder le comportement moyen (pour estimer l'espérance du gain).

Dalaine Gauffier (B)

Code correct dans l'ensemble mais trop peu de simulations pour pouvoir conclure. Du coup vous passez à côté de comportements clés.

  • Mettre vos courbes à la fin n'est pas une bonne idée. Ça ne facilite pas la lecture de vos analyses.
  • D'ailleurs, vos commentaires ne correspondent pas à ce que je vois sur vos courbes. Par exemple "La stratégie mG est une stratégie correcte pour une valeur de Tmax faible mais son regret tend vers 0.5 assez vite". D'où ça sort ? Aucune de vos courbe ne tend vers 0.5. En fait, pour une raison pas claire, chacune de vos méthodes semble avoir un regret nul, sauf peut-être la dernière…
  • Dans votre code, pour la stratégie 1, le regret lié à l'exploration n'est pas pris en compte.
  • Vous concluez à partir de statistiques faites sur 10 trajectoires ? Vous me faites peur!

Denis De Araujo (B-)

Code confus à peu près correct. Du coup, des comportements étranges/douteux qui vous font passer à côté du sujet.

  • Vous répondez à côté pour les questions préliminaires avec les formes closes. Je ne vous demande pas de me dire que c'est une binomiale. Je vous demande de calculer l'espérance du gain pour chaque stratégie.
  • Comme d'autres, mettre vos courbes en annexe n'est pas une bonne idée. Ça ne facilite pas la lecture de vos analyses.
  • Les effets de moiré étranges au début de vos graphiques sont dûs à l'utilisation de geom_point plutôt que geom_line.
  • Vous avez oublié d'appeler la fonction set.seed.
  • Le comportement pour la stratégie qui explore au début est correct. Certaines trajectoires se fixent sur la mauvaise valeur.
  • Votre code pour mG est surcompliqué à cause de tous ces booléens. Je ne suis pas capable de me convaincre, juste en le lisant, s'il est correct ou pas. La courbe rouge (la moyenne) se stabilise en dessous de 0 et c'est étrange car cette stratégie continue à jouer régulièrement la machine B et donc son regret ne tend pas vers 0. D'ailleurs vous l'indiquez dans vos commentaires mais ça ne correspond pas à ce que vous observez.
  • Votre code pour la dernière stratégie est faux car vous utilisez dbeta au lieu de rbeta.

DumenilBétend (A-)

Code correct dans l'ensemble et relativement lisible. Explications claires.

  • The Ultimate Anwser of Life, the Universe and Everything is 42, not 4545687.
  • Les réponses aux formes closes sont correctes mais vous n'expliques pas d'où ça sort. Regardez ce que j'ai écrit au début de ce document.
  • Quel dommage que vous n'ayez pas rajouté la moyenne des trajectoires sur chacune de vos courbes. C'est ce qui vous empêche de conclure vraiment sur la performance des différentes stratégies (en particulier le fait que la stratégie de Q4 est meilleure que celle de Q3).
  • Pour Q2, le resserrement du regret à la fin de la phase d'exploration est anormal. Betend et Baptiste ont eu le même problème. C'est dû au fait que dans simulL, quand vous calculez temp2 avec cumsum, vous oubliez de rajouter le gain obtenu dans la phase d'exploration.
  • Attention votre simulation simulAB je tire pas à pile ou face à chaque étape mais au début de chaque trajectoire uniquement. Mais il est vrai que l'énoncé était ambigu.
  • L'analyse de Q2 et de Q4 sont bien mais celle de Q3 est un peu légère.

Gautier Fontfreyde (B)

Code correct mais analyse plus que superficielle.

  • Vous concluez à partir de statistiques faites sur 10 trajectoires ? Vous me faites peur!
  • Q2: vous oubliez de mentionner qu'un des trajectoires a choisi la machine B et que c'est ce qui cause un regret non nul.
  • Q3: en quoi ce commentaire est-il lié à vos observations ?
  • Q4: je ne comprends pas votre commentaire et je ne vois pas non plus en quoi il est lié à vos observations.

Gilbert-Collet Arnoux (A)

Code clair et lisible.

  • Q1: OK
  • C'est bien rédigé mais vos explications ne vont pas assez droit au but. Pour Q2 par exemple, le point important est: "Une fraction non négligeable de trajectoires se fixent sur la machine B, ce qui est sous-optimal. Le regret ne peut donc pas converger vers 0. En augmentant epsilon, on diminuera cette fraction mais on augmentera l'importance de l'inefficacité de la phase d'exploration."

Guillot (A++)

Code clair et lisible. Excellentes analyses. Bravo.

  • Votre remarque à propos de la stratégie \(\epsilon\)-greedy sur le fait d'avoir un $ϵ qui varie avec le temps est tout à fait pertinent.
  • C'est très bien d'avoir fait varier \(\epsilon\) pour voir son influence sur le comportement des stratégies. Vous êtes un des rares alors que ça me semble plutôt naturel.
  • Pour la dernière stratégie, on peut montrer que la probabilité qu'une trajectoire converge vers 0 est de 1. Comme vous avez l'air d'en avoir eu l'intuition, même la trajectoire qui est un peu à part va finir par converger vers 0.

Jalmin Dumax-vorzet (A+)

Code très clair et lisible. Étude et analyse très pertinentes et agréables à lire. Bravo.

  • Ça n'a pas grande importance mais dans Q1, vous étudiez la stratégie qui joue alternativement et en même proportion mA et mB alors que je demandais d'étudier une stratégie qui choisit au hasard entre mA et mB.
  • Q2 et Q3: Votre illustration des avantages et des inconvénients de la stratégie en fonction de son paramètre et des conditions est très pédagogique. Encore bravo. Attention cependant, pour Q3 (comme pour Q2), puisque certaines trajectoires (une fraction non négligeable) ne tendent pas vers 0, l'espérance du regret ne peut pas tendre vers 0.

Landy Reymond (A)

Bon travail. Les codes sont clairs, les analyses sont pertinentes et agréables à lire. Vous auriez juste pu creuser un peu plus l'analyse du comportement (et pas juste de leur performance) des différentes stratégies.

  • Attention dans le calcul de la 3ème stratégie de Q1 (alternance aléatoire entre A et B), le résultat est correct mais au milieu il y a un "glissement" quand vous passez de \(E[X_{C(t),t}]\) à \(1/2*E[X_{A(t),t}] + 1/2*E[X_{B(t),t}]\). Il vaut mieux passer par des calculs de probabilités sur des variables aléatoires bien choisies que faire des choses approximatives avec des espérances. Si vous tirez la machine \(M_t\) à pile ou face, alors \(P[M_t==A]=0.5\) et \(P[M_t==B]=0.5\). Du coup, \(P[X_{M_t,t}=1] = P[M_t=A].P[X_{A,t}=1] + P[M_t=B].P[X_{B,t}=1] = 0.5 p_A + 0.5 p_B\). Ensuite vous en déduirez l'espérance de \(X_{M_t,t}\) et l'espérance de G(t).
  • Les effets de moiré étranges au début de vos graphiques sont dûs à l'utilisation de geom_point plutôt que geom_line.
  • Très bonne idée d'avoir affiché la valeur numérique de la moyenne du regret sur vos graphiques. Avec un intervalle de confiance, ça aurait été encore mieux mais ça donne déjà une idée plus précise de la façon dont les trois stratégies se comparent les unes aux autres.
  • Dommage que vous n'ayez pas illustré certaines de vos remarques. Par exemple quand vous écrivez "Cependant, il n’est pas avantageux d’augmenter ϵ, car l’augmenter réduirait [..]", vous auriez pu illustrer ce qu'il se passait pour une valeur de ϵ plus importante.

Lordey Sibue (A+)

Très bon travail. Clair, agréable à lire. Bravo.

  • Commentaires mineurs:
  • Très bien d'indiquer la signification de chaque variable à côté de sa déclaration.
  • Ce que vous appelez Esp dans votre code n'est pas l'espérance. C'est le gain total.
  • Vos intuitions sont clairement énoncées et vérifiées empiriquement. Dommage que pour la stratégie \(m_G\), quand vous écrivez (très justement) "On remarque encore la présence de parties jouées sur la machine B avec un nombre de coups moins conséquents que la méthode précédente mais encore visible.", vous n'ayez pas cherché à expliquer dans quelles conditions cette situation se produisait.

Mastoura Alacali (A-)

Code correct (presque) mais explications peu claires et souvent superficielles.

  • Votre code est parfois un peu alambiqué mais dans l'ensemble correct et lisible. Attention, vous utilisez un style qui semble marcher mais qui utilise des aspects de R qui ne sont pas les plus recommandables (par exemple p[-index]). Pareil, visiblement ça marche mais je n'ai pas compris pourquoi vous écrivez
1
2
for(i in 2:N)
   lines(1:Tmax,Gm[i,])

et pas

1
2
for(i in 2:N)
   lines(1:Tmax,Gm[i*N,])
  • Votre mise en œuvre de mG ne correspond pas vraiment à ce que j'avais demandé. Normalement, au fur et à mesure que l'on continue à jouer A ou B, il fallait continuer à estimer la quelle des deux stratégies semblait la plus rentable (à la différence de mL qui n'apprend qu'au début). Du coup, il n'y a que très peu de différence entre mL et mG.

  • Vos explications au début manquent de précision. Par exemple, quand vous dite "qui nous trouve le risque s’il est élevé ou pas", ça n'est pas bien clair. De plus, le regret est défini comme la probabilité de gain de la meilleure machine moins l'espérance du gain moyen, il ne peut être négatif. Il se peut que sur une trajectoire, le gain moyen soit supérieur à la probabilité de gain de la meilleure machine, mais pas en espérance.

  • Vous dites des choses souvent incorrectes et vous mélangez des concepts. Par exemple quand vous dites loi bêta-binomiale est une loi de probabilité discrète à support fini, vous vouliez certainement dire en parlant de la loi bêta que c'était une loi continue à support borné…

  • Au delà des problèmes de clarté, il y a pas mal de typos, de fautes de français. Une petite relecture n'aurait pas fait de mal.

Bouvierserre (B)

Travail sérieux mais hélas plusieurs erreurs dans le code vous ont fait passer à côté du sujet. La façon dont vous formulez certaines de vos réflexions indique que vous avez mal compris les notions d'espérance et de variabilité d'une variable aléatoire.

  • Vous écrivez "une multiplication entre deux lois de Bernouilli". Ça n'est pas clair. Regardez ce que j'ai écrit au début de ce document.
  • Dans vos intuitions, vos explications sur le regret ne sont pas très claires (même si ça s'arrange après lorsque vous effectuez les simulations)… Le regret est défini comme la probabilité de gain de la meilleure machine (\(p_A\) dans notre cas) moins l'espérance du gain moyen (la moyenne des gains obtenus), il ne peut être négatif. Il se peut que sur une trajectoire, le gain moyen soit supérieur à la probabilité de gain de la meilleure machine, mais pas en espérance.
  • Dans votre mise en œuvre de la stratégie 2, vous avez oublié de mettre à jour les variables compteur…
  • Dans votre mise en œuvre de la stratégie 3, les paramètres que vous passez à rbeta sont incorrects. Vous faites beta(1, shape1 = success_A, shape2 = t-success_A). Hors, ce n'est pas t qu'il faut utiliser mais le nombre de fois où vous avez utilisé la machine \(A\).
  • Il y a quelque chose de bizarre avec vos graphes. Vous avez beau faire des geom_line(alpha=0.1), vous devriez distinguer les différentes trajectoires. Pour \(R_m_L\), vous devriez distinguer des trajectoires où c'est \(A\) qui a été identifiée comme la meilleure machine et des trajectoires où c'est \(N\) qui a été identifiée comme la meilleure machine.
  • Quand vous écrivez "On observe que la moyenne(en rouge sur le graphe) est superieur à 0 donc on en déduis que cette stratégie est aussi moins efficace que $MA$", je trouve qu'on voit surtout que la moyenne est hyper proche de 0, presque aussi bien que la stratégie \(m_A\).
  • Quand vous concluez "Il serait peut être préférable de laisser tomber les machine à sous pour tester le poker", je vous suggère de bien travailler vos probas avant de vous lancer… :) Blague à part, relisez ce que j'ai écris sur ces histoires d'espérance et de regret "négatif" car vous êtes passé à côté d'un certain nombre de choses.

Rakotoarimlala Zarcos (B-)

Du travail sérieux mais plusieurs erreurs de programmation vous font hélas passer complètement à côté du sujet.

  • Quand vous écrivez "On peut vouloir minimiser le regret pour ne pas beaucoup “regretter”. Mais, on peut aussi par exemple choisir de regretter un peu mais avoir gagner beaucoup seulement sur une partie du temps." Ça n'est pas très clair.

  • Le résultat pour la stratégie mixte (jouer A ou B avec probabilité ½) est exact mais j'aurais aimé que vous le détailliez pour vérifier que vous savez écrire ça correctement.

  • Quand vous écrivez Esp_gain = sum(Xa[1:t]), c'est un très mauvais choix de nom de variable. sum(Xa[1:t]) est le gain cumulé, sûrement pas l'espérance du gain… L'espérance n'est estimée qu'en faisant la moyenne sur de nombreuses trajectoires.

  • C'est bizarre ce data.frame(t = z, r = tab_r). J'ai mis un moment à réaliser que z ou Tmax étaient des ensembles (surtout quand vous écrivez que vous allez jouer z fois). D'ailleurs, la confusion est entretenue plus tard quand vous écrivez for (t in epsilon*length(Tmax)/2) car là vous itérez sur un ensemble de taille 1… Ça explique certainement vos problèmes de valeurs manquantes dans Q2.

  • Attention, quand vous regardez summary(rmt_mix), vous moyennez des choses qui n'ont pas grand chose à voir les uns avec les autres (par exemple, le "regret" au temps 12 de la trajectoire 15 avec le "regret" au temps 172 de la trajectoire 63…). Ça n'a pas de sens.

  • Dans votre mis en œuvre de la stratégie mixte il y a un certain nombre de problèmes:

  • m_jouee devrait être recalculé pour chaque trajectoire (à l'intérieur de la fonction strategie1mix).

  • Je ne suis pas sûr de où est l'autre problème dans votre code mais votre stratégie mixte a un regret qui semble converger vers 0 alors qu'il devrait converger vers \(pA-(pA+pB)/2 = 0.05\). C'est absurde.

  • Point important: vous affichez les différentes trajectoires mais pas leur moyenne (qui vous permettrait d'estimer l'espérance et donc le regret). Ça vous permettrait de savoir vraiment si le regret des différentes stratégies tend vers 0 ou pas. Je pense que c'est un des point qui vous a empêché de vérifier si ce que vous faisiez était correct ou pas.

  • Dans votre mise en œuvre de la stratégie Q2, votre gestion des indices de temps est incorrect. Au lieu de:

1
2
for (t in epsilon*length(Tmax)/2){..A..}
for (t in epsilon*length(Tmax)/2){..B..}

il aurait fallu écrire

1
2
3
Tl = epsilon*length(Tmax)/2
for (t in 1:Tl){..A..}
for (t in (Tl+1):(2*Tl)){..B..}

Ça fait une différence dans le calcul du gain moyen et donc du regret…

  • Dans Q3, vous appelez real_pa une valeur possible de pa et vous la confondez avec pa. Du coup, quand vous écrivez tir = rbinom(1, 1, real_pa), ça n'a aucun sens.

Reygrobellet Jan (C)

Un code truffé d'erreurs qui vous empêche de comprendre de quoi il retourne.

  • L'intérêt du switch, c'est si vous aviez plus factorisé votre code…. Sinon, dans l'ensemble, l'intérêt du R+Markdown, c'est de mélanger code et explications, pas d'avoir des gros tas de l'un puis des gros tas de l'autre.

  • Dans strat1, la raison du décrochement après la phase d'exploration vient du fait que vous oubliez votre gain dans le calcul du regret:

1
regret=c(regret,(pa - cumsum(x)/((e*tmax+1):tmax)))

devrait être

1
regret=c(regret,(pa - (gainA+gainB+cumsum(x))/((e*tmax+1):tmax)))      

Du coup, il est difficile de voir sur votre courbe que certaines trajectoires sélectionnent la machine A alors que d'autres sélectionnent la machine B et que le regret ne peut donc converger vers 0.

  • Dans strat2, c'est complètement incohérent. Par exemple, quand vous écrivez
1
2
pa = 1-e 
pb = e

vous bousillez les valeurs de pa et pb que vous aviez définies au tout début de votre code alors forcément, ça va pas bien se passer. Et quand vous écrivez

1
if(pa == 1-e){# machine A a la meilleure proba, donc on joue dessus

vous trichez puisque l'objectif est justement que votre stratégie découvre quelle est la meilleur machine..

  • Dans strat3 vous utilisez dbeta au lieu de qbeta (mais il aurait mieux valu utiliser directement rbeta). Vous ne comprenez pas vraiment ce que vous manipulez et du coup, votre code fait n'importe quoi. dbeta renvoie une densité (potentiellement plus grande que 1), pas une probabilité (forcément inférieure à 1). C'est de là que viennent vos problème avec votre test juste après gainA = gainA + rbinom(1,1,p1). Exemple:
1
2
rbinom(1,1,.3) # légitime
rbinom(1,1,12) # absurde
[1] 0
[1] NA
Warning message:
In rbinom(1, 1, 12) : production de NAs

Sala Solvery A

Votre code et vos explications sont très claires. Une erreur bête dans votre code (c'est vraiment dommage) et une erreur de compréhension du principe de la seconde stratégie vous empêche d'observer quoi que ce soit d'intéressant mais on voit (à la clarté de certains énoncés à ou la justesse de certaines remarques) que vous avez très bien compris tout ce dont vous parlez.

  • Attention, votre appel à set.seed(NULL), vous empêche de contrôler la reproductibilité de votre exécution.
  • Votre code est dans l'ensemble très propre.
  • Dans RegQ2, vous avez écrit while(k > Tmax*0.025){ au lieu de while(k < Tmax*0.025){… Du coup, vous n'explorez pas et vous décidez d'utiliser A ou B sans véritable information. Il se trouve que votre test favorise le choix de la machine A et du coup, ça donne une stratégie optimale avec un regret nul… Étonnamment, vous écrivez "Cette stratégie n’est pas efficace pour un nombre de parties faible car il y a un risque d’erreur trop important sur la machine trouvé à l’aide des premiers essais." Dans l'absolu, c'est vrai mais ça ne correspond pas à vos observations…
  • Très bien la remarque et le calcul des intervalles de confiance! Notez que ça demande de connaître la différence entre pA et pB.
  • Dans RegQ3, il fallait faire l'exploration initiale pour chaque trajectoire ( et du coup itérer for(i in (nbA+nbB+1):Tmax)) et pas une seule fois pour l'ensemble des trajectoires. Du coup, ici, votre exploration initiale a détecté la machine A et ensuite, vous avez joué A avec proba \(1-\epsilon\) et B avec proba \(\epsilon\), d'où un regret égal à \(\epsilon(p_A-p_B)\) au lieu de 0.
  • L'implémentation de RegQ4 est correcte.
  • Le switch n'était utile que si vous aviez plus factorisé votre code…

Sauton Vandal (A++)

Excellent travail.

  • Bravo, vos intuitions sont justes et présentées extrêmement clairement.
  • Le code est peu factorisé mais il est clair et bien structuré.
  • Je ne pense pas que mettre les données et leur résumé dans la même data-frame soit une bonne idée/pratique (votre rbind juste avant ggplot).

Thomas Vincent (A+)

Bon travail. Tous les codes sont clairs et corrects (même si pas très factorisés). Les explications sont claires.

  • Mais pourquoi donc avez vous mis tous vos graphiques à la fin plutôt que de les mettre au fur et à mesure à côté de vos commentaires (ça oblige le lecteur à faire des allers retours)? En plus, vous me parlez de ce qu'il se passe pour la méthode 1 lorsque vous explorez 30% du temps et le graphique n'est pas présent. Tous vos commentaires sont corrects, sensés mais pourquoi donc ne pas me donner accès à ce que vous avez observé ?!?
  • Dans Q1, ça n'est pas bien grave mais vous confondez gain (cumulé) et gain moyen (gain/T). D'autre part, même si le résultat final est correct, votre calcul de \(E[G_m(T)]\) n'a pas grand sens (par exemple, qu'est ce qui vous permet d'écrire la toute première égalité ?).

Trestour Rivoire (A++)

Très bon travail. Tous les codes sont clairs et corrects (même si pas très factorisés). Les explications sont claires et vous avez bien étudié l'impact des différent paramètres pour comprendre leur influence.

  • Votre explication sur le calcul de l'espérance de la stratégie mixte n'est pas bien clair. En particulier, quand vous écrivez "Y suit la loi 12 * (Tmax,pA) + 12 * (Tmax,pB)", je ne comprends pas ce que ça veut dire. Regardez ce que j'ai écrit à ce sujet au début de ce document.
  • Note: le switch n'était utile que si vous aviez plus factorisé votre code…

Varenne Souchon (A+)

  • Même si le résultat du calcul est correct, vous n'expliquez pas vraiment pourquoi la stratégie mixte a cette espérance de gain. Regardez ce que j'ai écrit à ce sujet au début de ce document.
  • Vos intuitions sont très clairement expliquées, c'est bien.
  • Quand vous étudiez l'impact d'\(\epsilon\) pour la méthode 2, dommage que vous n'ayez pas inclue les graphiques que vous commentez.
  • Vous êtes bizarre de me dire pour la méthode 3 que "la variation de \(\epsilon\) dans cette méthode n’avait quasiment aucune influence". Vu qu'\(\epsilon\) n'est même pas passé en paramètres à cette fonction, il est normal qu'il n'ait pas (du tout) d'influence.

Wykland Masson (A++)

  • Vos intuitions sont bonnes et clairement énoncées. Comme quoi ça vaut le coup de réfléchir avant de se lancer! :)
  • Votre code est nickel.
  • À propos de votre dernier commentaire "En effet, la première et la seconde stratégie ont un regret moyen étonnamment proche, même si nous avions prédit la possibilité que la première stratégie se trompe gravement de temps en temps". Si ça se produit peu, c'est parce que vous jouez très longtemps et que la période d'exploration est donc suffisamment longue pour bien apprendre et donc peu se tromper.

Castano Laplante (A-)

  • Votre raisonnement sur la stratégie mixte est incorrect. Regardez ce que j'ai écrit à ce sujet au début de ce document.

  • Votre code est correct. C'est bien. Mais il est en général assez compliqué. Je vous invite à lire celui que d'autres ont pu écrire.

  • C'est une bonne idée d'avoir regardé à chaque fois ce qu'il se passait pour des parties courtes et pour des parties longues.

  • Quand vous dites "Ainsi avec epsilon a 0.05 on a 95 + 2.5= 97.5% des parties qui se jouent sur la machine A". Ça sort d'où ? Je ne comprend pas votre calcul. On est d'accord que ça dépend de \(T_max\)?

  • Q1: OK.

  • Q2: "cette stratégie est extremement efficace pour de grands echantillons et donneras des resultats en général extremement bon". Vous avez raison.

  • Q3: "Cette stratégie sur de grands échantillons va tendre vers la strategie précedente de parametre 2*epsilon.". Euh… pas vraiment. La discussion sur l'intérêt de cette stratégie selon que la partie est courte ou longue n'est pas très claire. Ce qui est certain par contre, c'est que même si on identifiait la bonne stratégie, on continuerait à jouer la mauvaise avec probabilité \(\epsilon\), d'où un regret d'au mieux \(\epsilon.(p_B-p_A)>0\).

  • Pour la stratégie de la question 4, vous ne trouvez pas ça bizarre quand vous écrivez:

1
2
n1_A = n1_A + b
n2_A = n2_A + b

Vous vouliez dire:

1
2
n1_A = n1_A + (b==T) # autrement dit n1_A + b
n2_A = n2_A + (b==F) # autrement dit n1_A + (1-b)

C'est pour ça que ça ne marche pas mieux que les précédentes.