DEV Community

Dominique Megnidro
Dominique Megnidro

Posted on

Le Dilemme du Prisonnier : De la Théorie à la Pratique avec Python 🎮

Introduction

Dans un monde où la coopération et la compétition s'entremêlent constamment, le dilemme du prisonnier nous offre un cadre fascinant pour comprendre nos choix quotidiens. Plongeons ensemble dans cette théorie des jeux et voyons comment elle s'applique concrètement dans notre vie, avant de l'implémenter en Python.

🎭 Le Dilemme du Prisonnier : Qu'est-ce que c'est ?

Imaginez deux suspects interrogés séparément par la police. Chacun a deux options : trahir son complice ou garder le silence. Leurs peines dépendent des choix de l'un et de l'autre :

  • Si les deux se taisent : 1 an de prison chacun
  • Si les deux se trahissent : 3 ans chacun
  • Si l'un trahit et l'autre se tait : le traître est libre, l'autre prend 5 ans

🌟 Applications Dans la Vie Réelle

1. En Entreprise

  • Négociations commerciales
  • Partage d'informations entre équipes
  • Collaborations inter-entreprises

2. Relations Sociales

  • Vie en colocation
  • Travail d'équipe
  • Organisation d'événements

3. Environnement

  • Tri des déchets
  • Utilisation des transports en commun
  • Consommation responsable

4. Couple et Famille

  • Répartition des tâches
  • Gestion du budget commun
  • Choix des activités

💻 Implémentation en Python

Voici comment nous pouvons modéliser ce dilemme :


python
import random

class Prisonnier:
    def __init__(self, nom, strategie):
        self.nom = nom
        self.strategie = strategie
        self.score = 0
        self.historique = []

    def faire_choix(self, historique_adversaire):
        return self.strategie(historique_adversaire)

def cooperer(_):
    """Stratégie: Toujours coopérer"""
    return 'C'

def trahir(_):
    """Stratégie: Toujours trahir"""
    return 'T'

def donnant_donnant(historique):
    """Stratégie: Coopérer au premier coup, puis copier le dernier coup de l'adversaire"""
    if not historique:
        return 'C'
    return historique[-1]

def jeu(prisonnier1, prisonnier2, tours=10):
    """Simule une partie entre deux prisonniers"""
    for _ in range(tours):
        choix1 = prisonnier1.faire_choix(prisonnier2.historique)
        choix2 = prisonnier2.faire_choix(prisonnier1.historique)

        # Matrice des gains
        if choix1 == 'C' and choix2 == 'C':
            prisonnier1.score += 3
            prisonnier2.score += 3
        elif choix1 == 'T' and choix2 == 'T':
            prisonnier1.score += 1
            prisonnier2.score += 1
        elif choix1 == 'T' and choix2 == 'C':
            prisonnier1.score += 5
            prisonnier2.score += 0
        else:
            prisonnier1.score += 0
            prisonnier2.score += 5
'''

🎯 Stratégies Implémentées

Toujours Coopérer

Avantages : Maximise les gains mutuels
Inconvénients : Vulnérable à l'exploitation


Toujours Trahir

Avantages : Jamais exploité
Inconvénients : Minimise les gains à long terme


Donnant-Donnant

Avantages : Encourage la coopération tout en punissant la trahison
Inconvénients : Peut mener à des cycles de représailles



🔍 Analyse des Résultats
Notre implémentation nous permet d'observer plusieurs phénomènes intéressants :

La coopération mutuelle produit les meilleurs résultats à long terme
La trahison peut être tentante à court terme mais destructrice sur la durée
Les stratégies adaptatives comme "donnant-donnant" sont souvent les plus efficaces

💡 Leçons à Retenir

La communication est essentielle pour établir la confiance
La réputation et l'historique des interactions comptent
Penser long terme peut modifier radicalement nos choix
Les mécanismes de feedback sont importants pour maintenir la coopération

🚀 Pour Aller Plus Loin
Vous pouvez enrichir ce code de plusieurs façons :

Ajouter de nouvelles stratégies
Implémenter un tournoi avec plusieurs joueurs
Visualiser les résultats avec matplotlib
Introduire des facteurs aléatoires

Conclusion
Le dilemme du prisonnier n'est pas qu'un exercice théorique : c'est un outil puissant pour comprendre et améliorer nos interactions quotidiennes. En le codant, nous donnons vie à ces concepts et pouvons expérimenter différentes approches de résolution de conflits.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)