« Dilemme du prisonnier » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(36 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
== Introduction ==
== Introduction ==


Le dilemme du prisonnier à été inventer en 1950 par Albert William Tucker et fait parti de la théorie des jeux qui est un domaine des mathématiques étudiant les interactions entre différents individus qui sont conscients ou non de ces interactions. Ils devront donc faire des choix dont ils sont conscients ou non lors de ces interactions.
Le dilemme du prisonnier à été inventé en 1950 par Albert William Tucker et fait partie de la théorie des jeux qui est un domaine des mathématiques étudiant les interactions entre différents individus qui sont conscients ou non de ces interactions. Ils devront donc faire des choix dont ils sont conscients ou non lors de ces interactions.
Il peut être utilisé pour émettre sur les raisons de certains comportements que l'on observe dans la nature



== Le dilemme du prisonnier ==
== Le dilemme du prisonnier ==


Les individus sont soumis dans le dilemme du prisonnier à une interaction où ils ont deux choix soit ils coopèrent avec l’autre individu soit ils le trahissent. Les individus sont récompensés selon la matrice des Paiements suivante :
Les individus sont soumis dans le dilemme du prisonnier à une interaction où ils ont deux choix : soit ils coopèrent avec l’autre individu, soit ils le trahissent. Les individus sont récompensés selon la matrice des paiements suivante :


[[Fichier:Tableau matrice paiements.PNG]]
[[Fichier:Tableau matrice paiements.PNG]]


L’intérêt de la configuration actuelle de la matrice des Paiements actuelle est que les individus ont un intérêt certain à trahir l’autre mais que la coopération est la meilleur option pour les deux individus. On représente l’intérêt à trahir par rapport à la coopération par la variable B qui dans notre exemple est égale à 1,85.
L’intérêt de la configuration actuelle de la matrice des paiements est que les individus ont un intérêt certain à trahir l’autre mais la coopération est la meilleure option pour les deux individus. On représente l’intérêt à trahir par rapport à la coopération par la variable B qui dans notre exemple est égale à 1,85.


Afin de simplifier notre modèle nous ne considérerons que deux comportements possibles qui sont :
Afin de simplifier notre modèle nous ne considérerons que deux comportements possibles qui sont :


-Le Croyant qui coopérera systématiquement
-Le coopérant qui coopérera systématiquement


-Le Traître qui trahira systématiquement
-Le traître qui trahira systématiquement


== Spatialisation du Dilemme du prisonnier ==
== Spatialisation du dilemme du prisonnier ==


L’idée de spatialiser le dilemme du prisonnier a été présenté par Nowak et May afin de modéliser la diffusion de certains comportements dans des populations en interaction.
Nous spatialisons le dilemme du prisonnier afin d’expliquer en partie des observations dans le vivant où les êtres vivants coopèrent entre eux alors qu’ils ont tout à y gagner en ne le faisant pas. Pour étayer nos propos on propose la citation suivante :« The prisoners’ Dilemma is an interesting metaphor for the fundamental biological problem of how cooperative behaviour may evolve and be maintained »([https://www.researchgate.net/publication/216634494_Evolutionary_Games_and_Spatial_Chaos Nowak, M.A. et May, R.M. 1992. Evolutionary games and spatial chaos]). En spatialisant le dilemme du prisonnier nous pouvons observer l’évolution des pratiques dans des situations variées. Il est à noter que nous pouvons aussi établir des liens entre les domaines de l’économie et de la sociologie notamment.
« The prisoners’ Dilemma is an interesting metaphor for the fundamental biological problem of how cooperative behaviour may evolve and be maintained »(Nowak,M.A. et May, R.M. 1992.Evolutionary games and spatial chaos)
Ce model apporte un éclairage mathématique sur des questions liées à l’évolution comme l’apparition de comportements altruistes par exemple ou le maintien de la coopération dans des groupes sociaux.
Ce modèle simple peux compléter celui du jeux de la vie (croissance en fonction des ressources) et celui de l’évolution (croisement et sélection) pour expliquer les équilibres écologiques. Nous nous intéresserons donc au équilibres dynamiques produits par notre modèle.


Les prisonniers sont au voisinage de Moore (8 voisins) de tel sorte à ce que dans l’espace les voisins d’un prisonnier lambda soient disposés de la manière suivante :
Les prisonniers sont au voisinage de Moore (8 voisins). L’espace dans lequel ils évoluent est un espace toroïdale (bordures ouvertes) en forme de carré de dimension n*n. On peut aussi le représenter comme une matrice carrée avec les bordures qui communiquent entre elles ou un espace en forme de donut. On peut illustrer ces deux règles par l'image suivante qui montre les différents voisins d'un prisonnier sur une bordure de la matrice:


[[Fichier:Dp etat dp voisinage SL.png|250px|thumb|left|Les prisonniers en pointillé sont des voisins qui se trouvent de l'autre coté de la matrice]]
1 2 3


4 P 5


6 7 8


L’espace dans lequel ils évoluent est un espace toroïdale (bordures ouvertes) en forme de carré de dimension n*n. On peut aussi le représenter comme une matrice carré avec les bordures qui communiquent entre elles.




À Chaque tour les prisonniers vont jouer au dilemme du prisonnier avec chacun de leurs voisins. Ils obtiendront un score conformément à leurs choix et à la matrice des Paiements. Puis chacun leur tour mettre à jour leur stratégie en fonction du score des voisins.




Afin de pouvoir visualiser l'évolution de notre espace nous avons créer un programme en Java afin de profiter des aspects suivant de Java:


Le premier est la programmation objet, cela nous permet de diviser la complexité de notre programme dans plusieurs objets interagissants entre eux. Nous pouvons aussi créer des abstractions d'objets qui nous permettent d'avoir des objets qui ont des comportements différents les uns des autres mais ayants tous des points communs ce qui permet de les manipulés plus facilement.


Le second est la bibliothèque Abstract Windows Toolkit (ou AWT pour faire plus court). Qui nous permet de faire sans trop de problèmes une fenêtre personnalisable qui affiche des composants grapihques. Ces composants étant eux mêmes variées, on utilisera surtout les propriétés du composant Canvas dans ce programme. Grâce à l’héritage permis par la programmation objet nous pouvons créer nos propres composants graphiques pour afficher nos résultats.




Notre programme crée donc une fenêtre qui affiche les prisonniers en fonction de leur stratégie actuelle et de leur dernière stratégie.Le code couleur est le suivant :


-en rouge les Traîtres qui l’ont été pendant 2 tours consécutifs


-en jaune les Croyants qui sont devenus Traîtres


-en vert les Traîtres devenus Croyants



-en bleu les Croyants qui l’ont été pendant 2 tours consécutifs








Voici ce qu'il se passe à chaque tour de la simulation pour chaque prisonnier. Pour cette exemple nous allons poser un traître au milieu d'une matrice de 3*3 de coopérants:

[[Fichier:Dp etat dp voisinage SL.png|250px|thumb|left|Chaque prisonnier joue au jeu du prisonnier avec ses voisins et obtient un score en fonction de la matrice des paiements]]

[[Fichier:Dp etat evolution.png|500px|thumb|left|La meilleure stratégie est ici celle qui as obtenue le plus grand score]]












































Dans les prochaines images on affiche les prisonniers en fonction de leur stratégie actuelle et de leur dernière stratégie. Le code couleur est le suivant :

-en rouge les traîtres qui l’ont été pendant 2 tours consécutifs

-en jaune les coopérants qui sont devenus traîtres

-en vert les traîtres devenus coopérants

-en bleu les coopérants qui l’ont été pendant 2 tours consécutifs


== Une expérience intéressante ==
== Une expérience intéressante ==


On propose dans cette partie de commencer à étudier un cas en particulier. Dans cette première expérience nous fixons B à 1,85 et plaçons un traître au milieu de croyants dans une grille de 301 par 301. Nous pensons que cette configuration donnera des résultats intéressants car B n'est pas assez grand pour permettre une domination complète des Traîtres ou pas assez petit pour permettre une domination complète des Croyants.
On propose dans cette partie de commencer à étudier un cas en particulier. Dans cette première expérience nous fixons B à 1,85 et plaçons un traître au milieu de coopérants dans une grille de 301 individus par 301 individus. Nous pensons que cette configuration donnera des résultats intéressants car B n'est pas assez grand pour permettre une domination complète des traîtres ou pas assez petit pour permettre une domination complète des coopérants.



Après quelques tours de la simulation nous observons l'image suivante:
Après quelques tours de la simulation nous observons l'image suivante:
Ligne 67 : Ligne 126 :
[[Fichier:Screen première exp 2.PNG]]
[[Fichier:Screen première exp 2.PNG]]


Nous pouvons voir à présent une répartition qui varie beaucoup comme témoignent l'abondance de jaune et de vert.
Nous pouvons voir à présent que les comportements dans la simulation varient beaucoup comme témoignent l'abondance de prisonniers affichés en jaune et en vert.


Lors du déroulé de cette simulation nous avons pus récolter C qui est le rapport entre le nombre de croyants dans la matrice sur le nombre de prisonniers au total. Cette variable nous permettra de visualiser l'évolution du nombre de croyants dans la simulation rapidement. Nous allons maintenant montrer son évolution au court du temps dans la simulation.
Lors du déroulé de cette simulation nous avons pu récolter C qui est le rapport entre le nombre de coopérants dans la matrice sur le nombre de prisonniers au total. Cette variable nous permettra de visualiser rapidement l'évolution du nombre de coopérants dans la simulation. Nous allons maintenant montrer son évolution au court du temps dans la simulation.


[[Fichier:Screen Graph_première exp.PNG]]
[[Fichier:Screen Graph_première exp.PNG]]


Nous pouvons ainsi observer que C semble tendre vers environ 0.3 montrant de ce fait que la simulation est dominé par les traîtres mais que les croyants résistent tout de même.
Nous pouvons ainsi observer sur le graphique que C semble tendre vers environ 0.3, montrant de ce fait que la simulation est dominée par les traîtres mais que les coopérants résistent tout de même. Les variations de C ne sont pas cycliques de ce que l'on observe sur le graphique ce qui veut dire que même si le nombre de coopérants semble à peut près stable il n'en reste pas moins fluctuant ou que nous n'avons pas récolté assez de données pour pouvoir affirmer qu'elle est cyclique. On peut supposer que la simulation est cyclique sur x tours( x > 400) mais nous ne pouvons le savoir avec nos données actuelles.


== Automatisation des expériences ==
== Automatisation des expériences ==


Nous avons pus observer une simulation particulière mais nous devons maintenant pouvoir faire des observations autres que visuelles car nous n’avons pas le temps de le faire pour toutes les expériences permisses par notre modèle. On n’as alors décidé donc de créer un objet dans le programme pour extraire les données des expériences et nous les résumées. Nous ne montrerons toutefois que les expériences que l’on juge intéressantes.
Nous avons pu observer une simulation particulière mais nous devons maintenant pouvoir faire des observations autres que visuelles car nous n’avons pas le temps de le faire pour toutes les expériences permises par notre modèle. Nous n’as alors décidé de créer un objet dans le programme pour extraire les données des expériences et nous les résumer. Nous ne montrerons toutefois que les expériences que l’on juge intéressantes.


Nous voulons tout d'abord mesurer l'influence de B sur l'évolution d'une répartition aléatoire. Pour cela nous fixerons les paramètres suivants pour chaque simulation. Dans chaque simulation on aura systématiquement 10% de traîtres répartis aléatoirement parmi 90% de coopérants. La dimension des matrices sera de 200*200. Nous ferons variez B entre 1.75 et 2.


Pour un B appartenant à [1.75;1.8[ On observe la simulation suivante au bout de 400 tours:

[[Fichier:Screen_B_1,75_10%.PNG]]

On observe des réseaux de traîtres interconnectés entre eux mais pouvant être indépendants avec une taille minimale d'un carré de 4 traîtres. On observe aussi des zones ou les prisonniers alternent entre traître et coopérant, on les repère en cherchant les zones en jaune ou en vert.

Le graphique de l'évolution de C est le suivant:

[[Fichier:Screen Graph B 1,75 10%.PNG]]

Ce graphique nous permet d'affirmer que la simulation est à peut près stable car on observe toujours des petits chutes du nombre de coopérants. C semble tendre par ailleurs vers 0.7.


Pour un B appartenant à [1.8;2[ On observe la simulation suivante au bout de 400 tours:

[[Fichier:Screen B 1,9 10%.PNG]]

On observe une situation chaotique avec une majorité de traîtres et des îlots de coopérants apparaissant et disparaissant au fur et à mesure de la simulation. On remarque aussi beaucoup de jaune et de vert sur les images, cela nous montre que les comportements des prisonniers changent beaucoup.

Le graphique de l'évolution de C est le suivant:

[[Fichier:Screen Graph B 1,9 10%.PNG]]

Ce graphique nous montre que la simulation n'est pas stable mais que C se stabilise vers 0.3.

Il est aussi à noter que sur les images B est à 1.9 et que plus B tend vers 1.8, plus C se stabilise vers 0.4.


Pour un B supérieur à 2 On observe la simulation suivante au bout de 400 tours:

[[Fichier:Screen B 2 10%.PNG]]

On observe que les traîtres occupent quasiment tout l'espace et que les coopérants sont regroupés en îlots qui s'étendent et se rétrécissent périodiquement.

Le graphique de l'évolution de C est le suivant:

[[Fichier:Screen Graph B 2 10%.PNG]]

Ce graphique nous montre que la simulation est très stable et que C tend vers 0.02.

== Améliorations à apporter ==

Nous n’avons pas exploré toutes les possibilités de notre modèle. Nous discuterons ici des améliorations à apporter à notre modèle.

La première des améliorations que nous pourrions apporter pourrait être l’introduction de comportements avec un historique des actions passées de leurs voisins. Cela nous permettrait d’avoir des stratégies plus complexes à étudier.

La deuxième amélioration que nous pourrions apporter serait une amélioration au niveau du code. On proposerait de faire en sorte d’avoir un objet Stratégie qui se passerait de prisonnier en prisonnier. Grâce à la programmation objet on pourrait créer des Stratégies variées avec peu de changement dans la structure du programme.

== Conclusion ==

Dans toutes les expériences que nous avons pu réaliser les traîtres n'ont jamais conquis l’entièreté de la matrice. Nos simulations tendent toujours vers un équilibre où les traîtres et les coopérants ont leur place. Ceci peut expliquer en partie pourquoi les comportements coopératifs semblent toujours persister dans la nature alors même que les individus ont plus intérêt à ne pas coopérer. Toutefois notre modèle n'en reste pas moins une abstraction de la réalité et donc ne peut pas expliquer l'intégralité des comportements que l'on retrouve dans la nature et pourrait même être erroné.

== Code Source ==

Comme notre code source est d'une longueur d'environ 1800 lignes on ne le mettra pas dans cette page web. Nous proposons néanmoins de le retrouver à [https://github.com/445654/dilemme-du-prisonnier/ l'adresse suivante]

== Sources ==

[http://cormas.cirad.fr/fr/applica/dps.htm Lien vers le site du cormas]

[https://www.researchgate.net/publication/216634494_Evolutionary_Games_and_Spatial_Chaos Lien vers l'article original]

Dernière version du 22 mai 2019 à 15:09

Introduction

Le dilemme du prisonnier à été inventé en 1950 par Albert William Tucker et fait partie de la théorie des jeux qui est un domaine des mathématiques étudiant les interactions entre différents individus qui sont conscients ou non de ces interactions. Ils devront donc faire des choix dont ils sont conscients ou non lors de ces interactions. Il peut être utilisé pour émettre sur les raisons de certains comportements que l'on observe dans la nature

Le dilemme du prisonnier

Les individus sont soumis dans le dilemme du prisonnier à une interaction où ils ont deux choix : soit ils coopèrent avec l’autre individu, soit ils le trahissent. Les individus sont récompensés selon la matrice des paiements suivante :

Tableau matrice paiements.PNG

L’intérêt de la configuration actuelle de la matrice des paiements est que les individus ont un intérêt certain à trahir l’autre mais la coopération est la meilleure option pour les deux individus. On représente l’intérêt à trahir par rapport à la coopération par la variable B qui dans notre exemple est égale à 1,85.

Afin de simplifier notre modèle nous ne considérerons que deux comportements possibles qui sont :

-Le coopérant qui coopérera systématiquement

-Le traître qui trahira systématiquement

Spatialisation du dilemme du prisonnier

L’idée de spatialiser le dilemme du prisonnier a été présenté par Nowak et May afin de modéliser la diffusion de certains comportements dans des populations en interaction. « The prisoners’ Dilemma is an interesting metaphor for the fundamental biological problem of how cooperative behaviour may evolve and be maintained »(Nowak,M.A. et May, R.M. 1992.Evolutionary games and spatial chaos) Ce model apporte un éclairage mathématique sur des questions liées à l’évolution comme l’apparition de comportements altruistes par exemple ou le maintien de la coopération dans des groupes sociaux. Ce modèle simple peux compléter celui du jeux de la vie (croissance en fonction des ressources) et celui de l’évolution (croisement et sélection) pour expliquer les équilibres écologiques. Nous nous intéresserons donc au équilibres dynamiques produits par notre modèle.

Les prisonniers sont au voisinage de Moore (8 voisins). L’espace dans lequel ils évoluent est un espace toroïdale (bordures ouvertes) en forme de carré de dimension n*n. On peut aussi le représenter comme une matrice carrée avec les bordures qui communiquent entre elles ou un espace en forme de donut. On peut illustrer ces deux règles par l'image suivante qui montre les différents voisins d'un prisonnier sur une bordure de la matrice:

Les prisonniers en pointillé sont des voisins qui se trouvent de l'autre coté de la matrice













Voici ce qu'il se passe à chaque tour de la simulation pour chaque prisonnier. Pour cette exemple nous allons poser un traître au milieu d'une matrice de 3*3 de coopérants:

Chaque prisonnier joue au jeu du prisonnier avec ses voisins et obtient un score en fonction de la matrice des paiements
La meilleure stratégie est ici celle qui as obtenue le plus grand score























Dans les prochaines images on affiche les prisonniers en fonction de leur stratégie actuelle et de leur dernière stratégie. Le code couleur est le suivant :

-en rouge les traîtres qui l’ont été pendant 2 tours consécutifs

-en jaune les coopérants qui sont devenus traîtres

-en vert les traîtres devenus coopérants

-en bleu les coopérants qui l’ont été pendant 2 tours consécutifs

Une expérience intéressante

On propose dans cette partie de commencer à étudier un cas en particulier. Dans cette première expérience nous fixons B à 1,85 et plaçons un traître au milieu de coopérants dans une grille de 301 individus par 301 individus. Nous pensons que cette configuration donnera des résultats intéressants car B n'est pas assez grand pour permettre une domination complète des traîtres ou pas assez petit pour permettre une domination complète des coopérants.


Après quelques tours de la simulation nous observons l'image suivante:

Screen première exp.PNG

Nous pouvons voir grâce à la bordure verte que le carré de traîtres au centre de l'image est en train de rétrécir alors que dans les coins des îlots de traîtres apparaissent comme nous le montre la grand quantité de jaune.

Nous passons sous silence quelques tours pour arriver à la situation suivante:

Screen première exp 2.PNG

Nous pouvons voir à présent que les comportements dans la simulation varient beaucoup comme témoignent l'abondance de prisonniers affichés en jaune et en vert.

Lors du déroulé de cette simulation nous avons pu récolter C qui est le rapport entre le nombre de coopérants dans la matrice sur le nombre de prisonniers au total. Cette variable nous permettra de visualiser rapidement l'évolution du nombre de coopérants dans la simulation. Nous allons maintenant montrer son évolution au court du temps dans la simulation.

Screen Graph première exp.PNG

Nous pouvons ainsi observer sur le graphique que C semble tendre vers environ 0.3, montrant de ce fait que la simulation est dominée par les traîtres mais que les coopérants résistent tout de même. Les variations de C ne sont pas cycliques de ce que l'on observe sur le graphique ce qui veut dire que même si le nombre de coopérants semble à peut près stable il n'en reste pas moins fluctuant ou que nous n'avons pas récolté assez de données pour pouvoir affirmer qu'elle est cyclique. On peut supposer que la simulation est cyclique sur x tours( x > 400) mais nous ne pouvons le savoir avec nos données actuelles.

Automatisation des expériences

Nous avons pu observer une simulation particulière mais nous devons maintenant pouvoir faire des observations autres que visuelles car nous n’avons pas le temps de le faire pour toutes les expériences permises par notre modèle. Nous n’as alors décidé de créer un objet dans le programme pour extraire les données des expériences et nous les résumer. Nous ne montrerons toutefois que les expériences que l’on juge intéressantes.


Nous voulons tout d'abord mesurer l'influence de B sur l'évolution d'une répartition aléatoire. Pour cela nous fixerons les paramètres suivants pour chaque simulation. Dans chaque simulation on aura systématiquement 10% de traîtres répartis aléatoirement parmi 90% de coopérants. La dimension des matrices sera de 200*200. Nous ferons variez B entre 1.75 et 2.


Pour un B appartenant à [1.75;1.8[ On observe la simulation suivante au bout de 400 tours:

Screen B 1,75 10%.PNG

On observe des réseaux de traîtres interconnectés entre eux mais pouvant être indépendants avec une taille minimale d'un carré de 4 traîtres. On observe aussi des zones ou les prisonniers alternent entre traître et coopérant, on les repère en cherchant les zones en jaune ou en vert.

Le graphique de l'évolution de C est le suivant:

Screen Graph B 1,75 10%.PNG

Ce graphique nous permet d'affirmer que la simulation est à peut près stable car on observe toujours des petits chutes du nombre de coopérants. C semble tendre par ailleurs vers 0.7.


Pour un B appartenant à [1.8;2[ On observe la simulation suivante au bout de 400 tours:

Screen B 1,9 10%.PNG

On observe une situation chaotique avec une majorité de traîtres et des îlots de coopérants apparaissant et disparaissant au fur et à mesure de la simulation. On remarque aussi beaucoup de jaune et de vert sur les images, cela nous montre que les comportements des prisonniers changent beaucoup.

Le graphique de l'évolution de C est le suivant:

Screen Graph B 1,9 10%.PNG

Ce graphique nous montre que la simulation n'est pas stable mais que C se stabilise vers 0.3.

Il est aussi à noter que sur les images B est à 1.9 et que plus B tend vers 1.8, plus C se stabilise vers 0.4.


Pour un B supérieur à 2 On observe la simulation suivante au bout de 400 tours:

Screen B 2 10%.PNG

On observe que les traîtres occupent quasiment tout l'espace et que les coopérants sont regroupés en îlots qui s'étendent et se rétrécissent périodiquement.

Le graphique de l'évolution de C est le suivant:

Screen Graph B 2 10%.PNG

Ce graphique nous montre que la simulation est très stable et que C tend vers 0.02.

Améliorations à apporter

Nous n’avons pas exploré toutes les possibilités de notre modèle. Nous discuterons ici des améliorations à apporter à notre modèle.

La première des améliorations que nous pourrions apporter pourrait être l’introduction de comportements avec un historique des actions passées de leurs voisins. Cela nous permettrait d’avoir des stratégies plus complexes à étudier.

La deuxième amélioration que nous pourrions apporter serait une amélioration au niveau du code. On proposerait de faire en sorte d’avoir un objet Stratégie qui se passerait de prisonnier en prisonnier. Grâce à la programmation objet on pourrait créer des Stratégies variées avec peu de changement dans la structure du programme.

Conclusion

Dans toutes les expériences que nous avons pu réaliser les traîtres n'ont jamais conquis l’entièreté de la matrice. Nos simulations tendent toujours vers un équilibre où les traîtres et les coopérants ont leur place. Ceci peut expliquer en partie pourquoi les comportements coopératifs semblent toujours persister dans la nature alors même que les individus ont plus intérêt à ne pas coopérer. Toutefois notre modèle n'en reste pas moins une abstraction de la réalité et donc ne peut pas expliquer l'intégralité des comportements que l'on retrouve dans la nature et pourrait même être erroné.

Code Source

Comme notre code source est d'une longueur d'environ 1800 lignes on ne le mettra pas dans cette page web. Nous proposons néanmoins de le retrouver à l'adresse suivante

Sources

Lien vers le site du cormas

Lien vers l'article original