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.