13.07.2013 Views

TD 5 : Le dilemme du prisonnier - Ens

TD 5 : Le dilemme du prisonnier - Ens

TD 5 : Le dilemme du prisonnier - Ens

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!