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)