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:
oeil pour oeil (à la première manche on ne trahi pas puis ou répète les choix de l'adversaire à la manche précédente)
rancunière (on ne trahis pas tant que l'adversaire nous a pas trahi puis on trahi tout le temps)
périodique méchante (on trahi puis on trahi puis on ne trahi pas etc..)
périodique gentille(on ne trahi pas puis on ne trahi pas puis on trahi etc..)
méfiante (à la première manche on trahi puis ou répète les choix de l'adversaire à la manche précédente)
joue tout le temps trahi
joue tout le temps ne trahi pas
joue une fois sur deux trahi
joue trahi avec une probabilité tirée aléatoirement
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.