TD 5 : Le dilemme du prisonnier - Ens
TD 5 : Le dilemme du prisonnier - Ens
TD 5 : Le dilemme du prisonnier - Ens
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>TD</strong> 5 <strong>Le</strong> Dilemme <strong>du</strong> Prisonnier<br />
<strong>TD</strong> 5 : <strong>Le</strong> <strong>dilemme</strong> <strong>du</strong> <strong>prisonnier</strong><br />
Décembre 2011<br />
Dans ce <strong>TD</strong>, on modélisera avec Maple le <strong>dilemme</strong> <strong>du</strong> <strong>prisonnier</strong>, un des exemples les plus<br />
connus de situation étudiée par la théorie des jeux, qui montre simplement que même quand<br />
coopérer est dans leur intérêt commun, deux indivi<strong>du</strong>s ne collaborent pas forcément.<br />
On tentera ensuite de programmer des stratégies efficaces pour la version répétée <strong>du</strong> jeu et de<br />
les faire s’affronter entre elles.<br />
<strong>Le</strong> <strong>dilemme</strong> <strong>du</strong> <strong>prisonnier</strong><br />
On considère deux <strong>prisonnier</strong>s (A et B) retrouvés ensemble sur les lieux d’un crime. La police,<br />
cherchant à connaître les responsabilités de chacun, leur propose (séparément) l’arrangement<br />
suivant :<br />
"Vous pouvez garder le silence et protéger votre complice ou alors le trahir et rejeter toute<br />
la faute sur lui. Si vous gardez le silence et que lui également, vous n’écoperez chacun que de 1<br />
mois de prison. Si au contraire lui vous trahit, il repartira libre, mais vous passerez 1 an en prison<br />
(l’inverse est également vrai, il passera 1 an en prison si vous le trahissez et qu’il garde le silence).<br />
Dans le cas ou vous vous dénoncez tous les deux, vous passerez chacun 3 mois en prison."<br />
Exercice 1 (Choix optimal)<br />
Que choisissez-vous ?<br />
1. Quel choix doivent faire les deux <strong>prisonnier</strong>s pour optimiser leur situation globale ?<br />
2. Pour minimiser sa propre peine de prison, qu’est-ce qu’un <strong>prisonnier</strong> va naturellement<br />
décider ?<br />
Programmation<br />
Pour implémenter ce jeu en Maple de façon interactive, on va utiliser pour la première fois des<br />
fonctions d’entrée-sortie (print et readline), ainsi que des chaînes de caractères (type string)<br />
Exercice 2 (Programmation)<br />
1. Écrire <strong>prisonnier</strong>:=proc(choixA,choixB), la procé<strong>du</strong>re qui renvoie le couple correspondant<br />
aux mois de prisons reçus par A et B selon leur choix. On représentera la coopération<br />
par la chaîne "C" et la trahison par "T"<br />
2. Écrire <strong>prisonnier</strong>_interactif:=proc(), la version interactive de la procé<strong>du</strong>re précédente.<br />
Au lieu de prendre les choix des <strong>prisonnier</strong>s en argument, celle-ci écrit avec print<br />
les questions "Que choisit le joueur A/B ?" et lit la réponse avec readline. Elle affiche<br />
ensuite le résultat sous la forme "<strong>Le</strong> joueur A va passer x mois en prison et le joueur B<br />
y" avant de renvoyer le couple demandé.<br />
Forme généralisée : le <strong>dilemme</strong> <strong>du</strong> <strong>prisonnier</strong> itéré<br />
En terme de jeu et d’élaboration de stratégie le <strong>dilemme</strong> <strong>du</strong> <strong>prisonnier</strong> n’est pas très intéressant,<br />
puisqu’un <strong>prisonnier</strong> a toujours intérêt à trahir son compagnon.<br />
On va s’intéresser à une version généralisée <strong>du</strong> jeu, où le choix entre coopérer et trahir se fait<br />
de façon répétée et où les coups successifs sont connus des participants. De cette manière il peut<br />
être intéressant de ne pas trahir pour mettre l’autre joueur en confiance et ultimement gagner plus<br />
de points.<br />
<strong>Le</strong>s règles <strong>du</strong> jeu changent un peu dans cette version. De façon moins romanesque les deux<br />
joueurs sont maintenant deux personnes tenant chacun dans leur main deux cartes : Coopérer<br />
et Trahir. À chaque étape ils pose une carte face cachée sur la table, qu’ils retournent ensuite<br />
simultanément. Ils gagnent chacun un nombre de points donné par le tableau suivant (attention,<br />
les valeurs ne sont pas exactement les mêmes que pour le <strong>dilemme</strong> simple) :<br />
paul.simon@ens.fr 1 pauldcsimon.net
<strong>TD</strong> 5 <strong>Le</strong> Dilemme <strong>du</strong> Prisonnier<br />
A,B Coopérer Trahir<br />
Coopérer (3,3) (0,5)<br />
Trahir (5,0) (1,1)<br />
<strong>Le</strong> nombre d’étapes <strong>du</strong> jeu n’est pas fixe. Si on sait quand le jeu va finir, on aura toujours intérêt<br />
à trahir au dernier tour, et donc, à l’avant-dernier tour, sachant que l’autre joueur trahira au<br />
coup suivant, à le trahir également, et ainsi de suite. Par récurrence, il est clair qu’on optera<br />
raisonnablement tout le temps pour la trahison.<br />
Élaboration de stratégies<br />
On définit une stratégie comme une fonction qui étant donné l’historique de la partie définit le<br />
prochain coup à jouer. On peut obtenir une grande variété de stratégies a priori raisonnables en<br />
intro<strong>du</strong>isant plus ou moins de pardon, d’intransigeance ou de rouerie. On va tenter de les départager<br />
en les faisant s’affronter entre elles.<br />
Nos stratégies seront toutes des procé<strong>du</strong>res sous la forme strategie:=proc(historique,joueur).<br />
historique contient la liste (éventuellement vide) des coups déjà joués sous la forme d’une liste<br />
de couples sur {”T ”, ”C”} et joueur vaut "A" ou "B" selon qui est le joueur (celui qui a joué les<br />
premiers coups des couples ou les seconds. Cette procé<strong>du</strong>re doit renvoyer "C" ou "T".<br />
Exercice 3<br />
1. Implémenter les stratégies suivantes :<br />
– Pure gentillesse : Toujours coopérer<br />
– Lunatique : Trahir une fois sur deux<br />
– Rancune tenace : coopérer jusqu’à ce que l’adversaire trahisse, puis toujours trahir<br />
– Donnant-donnant : commencer par coopérer puis toujours jouer ce que l’autre a joué<br />
au tour précédent<br />
2. Réfléchir à d’autres stratégies (au moins 3) puis les implémenter (utiliser éventuellement<br />
le hasard).<br />
Exercice 4 (Organisation d’un tournoi)<br />
Écrire une procé<strong>du</strong>re tournoi:=proc(strategieA,strategieB qui fait s’affronter les deux<br />
stratégies données en argument sur un nombre de tours tiré au hasard (de l’ordre d’une centaine)<br />
et renvoie le couple des scores finaux.<br />
Vous pouvez faire afficher à votre programme les résultats de chaque coup (avec print).<br />
Exercice 5 (Version interactive)<br />
Adapter le programme précédent pour permettre à un humain de jouer contre l’ordinateur, ou<br />
à deux humains de jouer entre eux.<br />
Au lieu de modifier la procé<strong>du</strong>re tournoi, vous pouvez simplement écrire une stratégie<br />
particulière strategieHumain qui demande au joueur les coups à jouer.<br />
paul.simon@ens.fr 2 pauldcsimon.net