Développer des outils d’analyse personnalisés de la théorie des jeux, Excel VBA

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.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x