Développer des outils d’analyse personnalisés de la théorie des jeux, Excel VBA
Voici un exemple de code détaillé en VBA pour Excel, conçu pour développer des outils d’analyse personnalisés de la théorie des jeux. L’exemple porte sur l’analyse d’équilibres de Nash dans un jeu stratégique à 2 joueurs, avec des matrices de gains (payoff matrices).
Objectif
L’objectif de ce code est de fournir un cadre de base pour analyser les équilibres de Nash dans un jeu stratégique à 2 joueurs à l’aide des matrices de gains. Ce n’est qu’un exemple illustratif et le code peut être étendu à plus de joueurs ou à des jeux plus complexes. L’utilisateur peut entrer les gains pour les deux joueurs sous forme de matrices et le code analysera les équilibres de Nash à l’aide d’une méthode brute.
Explication
Avant de plonger dans le code, définissons les composants :
- Joueurs : Dans ce cas, nous avons deux joueurs. Chaque joueur choisit une stratégie parmi un ensemble de stratégies possibles.
- Matrice de gains : La matrice de gains définit la récompense ou le gain que chaque joueur reçoit en fonction de la combinaison de stratégies choisies par les deux joueurs.
- Équilibre de Nash : Un équilibre de Nash se produit lorsque aucun joueur ne peut améliorer son gain en changeant unilatéralement sa stratégie, étant donné la stratégie de l’autre joueur.
Description du Code
Ce code est conçu pour :
1. Saisir les matrices de gains pour deux joueurs.
2. Calculer les meilleures réponses de chaque joueur.
3. Identifier les équilibres de Nash en vérifiant les stratégies où les deux joueurs jouent leurs meilleures réponses l’un à l’autre.
Code VBA
Sub AnalyseTheorieJeux() ' Déclaration des variables pour les matrices et les dimensions Dim StrategiesJoueur1 As Integer Dim StrategiesJoueur2 As Integer Dim MatriceGainsJoueur1() As Double Dim MatriceGainsJoueur2() As Double Dim MeilleureReponseJoueur1() As Integer Dim MeilleureReponseJoueur2() As Integer Dim EquilibreNash As Boolean Dim i As Integer, j As Integer ' Saisie des dimensions : stratégies du Joueur 1 et Joueur 2 StrategiesJoueur1 = InputBox("Entrez le nombre de stratégies pour le Joueur 1 :") StrategiesJoueur2 = InputBox("Entrez le nombre de stratégies pour le Joueur 2 :") ' Initialisation des matrices de gains (ces valeurs seront saisies par l'utilisateur) ReDim MatriceGainsJoueur1(1 To StrategiesJoueur1, 1 To StrategiesJoueur2) ReDim MatriceGainsJoueur2(1 To StrategiesJoueur1, 1 To StrategiesJoueur2) ' Saisie de la matrice des gains pour le Joueur 1 For i = 1 To StrategiesJoueur1 For j = 1 To StrategiesJoueur2 MatriceGainsJoueur1(i, j) = InputBox("Entrez le gain pour le Joueur 1 à (" & i & ", " & j & "):") Next j Next i ' Saisie de la matrice des gains pour le Joueur 2 For i = 1 To StrategiesJoueur1 For j = 1 To StrategiesJoueur2 MatriceGainsJoueur2(i, j) = InputBox("Entrez le gain pour le Joueur 2 à (" & i & ", " & j & "):") Next j Next i ' Initialisation des tableaux de meilleures réponses ReDim MeilleureReponseJoueur1(1 To StrategiesJoueur1) ReDim MeilleureReponseJoueur2(1 To StrategiesJoueur2) ' Calcul des meilleures réponses pour chaque joueur ' Meilleure réponse pour le Joueur 1 For i = 1 To StrategiesJoueur1 Dim MaxGainJoueur1 As Double MaxGainJoueur1 = -999999 ' Valeur initiale très basse For j = 1 To StrategiesJoueur2 If MatriceGainsJoueur1(i, j) > MaxGainJoueur1 Then MaxGainJoueur1 = MatriceGainsJoueur1(i, j) MeilleureReponseJoueur1(i) = j ' Enregistrer la meilleure réponse pour le Joueur 1 End If Next j Next i ' Meilleure réponse pour le Joueur 2 For j = 1 To StrategiesJoueur2 Dim MaxGainJoueur2 As Double MaxGainJoueur2 = -999999 ' Valeur initiale très basse For i = 1 To StrategiesJoueur1 If MatriceGainsJoueur2(i, j) > MaxGainJoueur2 Then MaxGainJoueur2 = MatriceGainsJoueur2(i, j) MeilleureReponseJoueur2(j) = i ' Enregistrer la meilleure réponse pour le Joueur 2 End If Next i Next j ' Affichage des meilleures réponses pour les deux joueurs MsgBox "Meilleures réponses pour le Joueur 1 : " & Join(MeilleureReponseJoueur1, ", ") MsgBox "Meilleures réponses pour le Joueur 2 : " & Join(MeilleureReponseJoueur2, ", ") ' Vérification des équilibres de Nash EquilibreNash = False For i = 1 To StrategiesJoueur1 For j = 1 To StrategiesJoueur2 If MeilleureReponseJoueur1(i) = j And MeilleureReponseJoueur2(j) = i Then MsgBox "Équilibre de Nash trouvé en (" & i & ", " & j & ")" EquilibreNash = True End If Next j Next i If Not EquilibreNash Then MsgBox "Aucun Équilibre de Nash trouvé." End If End Sub
Explication Étape par Étape
1. Saisie des Matrices de Gains :
- L’utilisateur saisit le nombre de stratégies pour les deux joueurs.
- Ensuite, deux matrices de gains sont initialisées : une pour le Joueur 1 et une pour le Joueur 2. L’utilisateur remplit ces matrices avec les valeurs des gains de chaque joueur pour chaque combinaison de stratégies.
2. Calcul des Meilleures Réponses :
- La meilleure réponse pour chaque joueur est calculée. Une meilleure réponse est simplement la stratégie qui maximise le gain d’un joueur, étant donné la stratégie de l’autre joueur.
- Pour le Joueur 1, le code parcourt toutes les stratégies de ce joueur et trouve la stratégie qui maximise son gain pour chaque stratégie possible du Joueur 2.
- Le même calcul est effectué pour le Joueur 2.
3. Vérification des Équilibres de Nash :
- Une fois que les meilleures réponses sont calculées, le code vérifie toutes les combinaisons de stratégies pour voir si les deux joueurs jouent leurs meilleures réponses simultanément.
- Si les deux joueurs jouent leurs meilleures réponses l’un à l’autre, cela correspond à un équilibre de Nash.
- Si aucun équilibre de Nash n’est trouvé, le code en informe l’utilisateur.
Exemple Pratique
Prenons un exemple avec les matrices suivantes pour les gains :
Matrice de gains pour le Joueur 1 :
Stratégie 2 de Joueur 2 | Stratégie 1 de Joueur 2 | |
Stratégie 1 de Joueur 1 | 3 | 1 |
Stratégie 2 de Joueur 1 | 0 | 2 |
Matrice de gains pour le Joueur 2 :
Stratégie 2 de Joueur 2 | Stratégie 1 de Joueur 2 | |
Stratégie 1 de Joueur 1 | 2 | 0 |
Stratégie 2 de Joueur 1 | 1 | 3 |
- La meilleure réponse pour le Joueur 1 face à la stratégie 1 du Joueur 2 est la Stratégie 1 (car 3 > 0).
- La meilleure réponse pour le Joueur 1 face à la stratégie 2 du Joueur 2 est la Stratégie 2 (car 2 > 1).
- La meilleure réponse pour le Joueur 2 face à la stratégie 1 du Joueur 1 est la Stratégie 1 (car 2 > 0).
- La meilleure réponse pour le Joueur 2 face à la stratégie 2 du Joueur 1 est la Stratégie 2 (car 3 > 1).
Lorsqu’on vérifie les équilibres de Nash, on trouve que l’équilibre de Nash se situe à la combinaison de stratégies (Stratégie 2 pour les deux joueurs).
Conclusion
Ce code fournit un outil de base pour analyser les équilibres de Nash dans un jeu stratégique à 2 joueurs en utilisant VBA pour Excel. En saisissant les gains et les stratégies, l’utilisateur peut voir les meilleures réponses pour chaque joueur et identifier les équilibres de Nash présents. Ce code peut être étendu pour analyser des jeux plus complexes, y compris des jeux à plusieurs joueurs ou des jeux dynamiques.