Le programme

Ce programme est la version sans interface graphique du programme en annexe il est donc bien plus simplement explicable. Malgré cette différence le fonctionnement des deux programme est le même.

1) Le code

a)La classe modèle

a.1) Présentation

Cette classe modèle contient, comme son nom l'indique, tous les modèles possibles applicables à notre algorithme/programme.

Ils s'agit de différents styles de présentation, en effet, l'utilisateur aura ainsi le choix entre plusieurs environnements de jeux: Dilemme du prisonnier, Musique/Voisin, Conflit CPE, Frontières et même de créer son propre environnement.

Cette classe contient aussi les matrices de gains des différents jeux, c'est elle qui détermine les gains des conflits.

a.2) Fonctions

La fonction première de la classe modèle, c'est a dire de gérer les environnements, se fait grâce a un choix de chaînes string. La fonction seconde, celle de gérer les gains, se fait grâce à une matrice soit prédéterminée, soit déterminée par l'utilisateur. C'est elle qui détermine les gains selon les stratégies choisies.

a.3) Fonction supplémentaire

La classe modèle contient une méthode supplémentaire, qui permet de déterminer si une stratégie est dominante par rapport à une autre en utilisant la formule:


domine faiblement w


b)La classe stratégies

C'est elle qui va caractériser chaque stratégie disponible. Elle contient donc les fonctions classiques qui permettent de récupérer la probabilité correspondant à la stratégie (ex: pour la stratégie joue trahi avec une probabilité de ½, p=0.5 et pour les stratégies qui n'utilisent pas de probabilité ex œil pour œil on posé p=-1) et le nom de la stratégie.



On a eu au début quelques difficulté dû fait que nous ne pensions qu'une chaîne de caractère était un type de base et donc on pensait pouvoir faire "if nom=="œil pour oeil". Or Ce n'est pas le cas puisqu'une chaîne de caractères est un objet en java donc si on fait "if nom=="œil pour oeil", on compare les références des objets nom et "œil pour œil" alors qu'en utilisant "nom.equals("œil pour œil")" on compare bien les deux objets



b.1) Stratégies mixtes

Tout d'abord la distinction se fera entre stratégie mixte ou non. Si une stratégie mixte est appelée il faut ensuite fixer la probabilité de trahison. A chaque itération, la fonction va créer un nombre aléatoire compris entre 0 et 1. Si celui-ci est inférieur à la probabilité annoncée au début, alors le joueur ordinateur choisi de trahir. Sinon il collabore.


b.2) Stratégie «oeil pour oeil»

A La première itération, le joueur ordinateur coopère. Ensuite, il compare à chaque itération la réponse adverse précédente. Si «ajouters1» est faux (soit : la dernière réponse du joueur adverse est la coopération), alors la coopération est choisie.


b.3) Stratégie «rancunière»

«Atrahi» garde en mémoire le fait que le joueur adverse est déjà trahi au moins une fois dans la partie ou non. Si la valeur de ce booléen devient vrai, toutes les réponses sont la trahison. Sinon, la coopération est tout le temps choisie.


b.4) Stratégie «périodique méchante» et «périodique gentille»

Consistent à jouer par période: trahi, trahi, ne trahi pas pour la stratégie périodique méchante et ne trahi pas, ne trahi pas, trahi pour la stratégie périodique gentille. Comment avons-nous fait apparaître le période? Nous utilisons un entier qui indique l'étape en cours : i si on a i congru à 0 modulo 3 cela indique que i est égal à 3 ou 6 ou 9 … on est donc à la dernière étape de la période donc pour la stratégie périodique méchante il ne faut pas trahir et pour la stratégie périodique gentille il faut trahir . Et on a les choix inverse si i congru à 1 modulo 3 cela ou si i congru à 2 modulo 3.



b.5) Stratégie «méfiante»

Cette stratégie marche de la même façon que «oeil pour oeil» mis à part qu'elle commence par la trahison à la première itération.


c) La classe exécutable:


Cette classe va simuler un tournoi,voici l'algorithme que nous allons implémenter:


l'utilisateur choisi du modèle (ex: dilemme du prisonnier)

génération de la stratégie de l'ordinateur (ex: oeil pour oeil)

génération d'un nombre de manches aléatoires compris entre 0 et 20

pour i=0 à nombre de manches faire

l'utilisateur choisi son action (ex: trahi)

génération du choix de l'ordinateur en fonction de sa stratégie

calcul des gains pour les deux joueurs

affiche le gagnant et les nombres de points de chaque joueur

affiche le nombre de manches

affiche la stratégie de l'ordinateur



Nous avons ajouté quelques options pour cette classe:

- choix aléatoire de la stratégie de l'ordinateur

- recherche d'un équilibre de Nash en stratégies pures par la méthode des stratégies dominantes



On a implémenter un choix aléatoire de la stratégie de l'ordinateur. Cette fonction va permettre à l'utilisateur de ne pas savoir la stratégie de son adversaire, pour cela on tire aléatoirement une stratégie parmi 15 stratégies qui sont:

et les autres du tournoi




Nous avons aussi implémenter la recherche d'un équilibre de Nash en stratégies pures par la méthode des stratégies dominantes. Cette méthodes va donc nous permettre de chercher un équilibre de Nash en stratégies pures par la

méthodes des stratégies dominantes que nous avons étudiée au cours de l'exposé précédant.


Voici l'algorithme:

si S1 domine S2 pour J1

on compare les gains de J1 avec (S1,S1) et (S1,S2) ( le premier S indique le choix du joueurs 1 et le second le choix de l'ordinateur)

si gains1(S1,S1) <gains1(S1,S2) alors (S1,S2) est un équilibre de Nash en stratégies pures du jeu

sinon (S1,S1) est un équilibre de Nash en stratégies pures du jeu

si S2 domine S1 pour J1

on compare les gains de J1 avec (S2,S1) et (S2,S2) ( le premier S indique le choix du joueurs 1 et le second le choix de l'ordinateur)

si gains1(S2,S1) <gains1(S2,S2) alors (S2,S2) est un équilibre de Nash en stratégies pures du jeu

sinon (S2,S1) est un équilibre de Nash en stratégies pures du jeu

sinon

on n'a pas de stratégies dominantes on ne peut pas trouver l'équilibre de Nash en stratégies pures par la méthode des stratégies dominantes cela ne veut donc pas dire qu'il n'existe pas d'équilibre de Nash car il y en a en stratégies mixtes (d'après le théorème de Nash), de plus nous avons remarqué que l'algorithme des stratégies dominantes ne marche pas toujours.