Outils de visualisation pour la théorie des jeux: arbres de jeu


11

Il existe de nombreuses façons de dessiner un jeu séquentiel «à la main». En dessinant le jeu, je veux dire ceci:

entrez la description de l'image ici

Affichage des points de décision des joueurs, des actions disponibles et des gains.

Est-il possible de le faire en R ou dans un langage de programmation de haut niveau similaire? Pour être précis: je ne veux pas tracer des équations géométriques, je veux définir une structure (joueurs, points, connexions, gains) et demander au programme de la tracer.

Je suis en train de parcourir le paquet 'igraph' mais j'ai du mal à étiqueter donc je me demande s'il y a une meilleure façon.


1
Si vous considérez LaTeX comme un "langage de programmation de haut niveau similaire", vous pourriez trouver les réponses à cette question sur TeX.SE (et d'autres questions connexes là-bas) utiles.
Ilmari Karonen

Réponses:


6

Mathematica a une capacité de création et de dessin de graphiques.

Donc, si vous avez créé le graphique dans Mathematica, vous pouvez le tracer en utilisant les paramètres de votre choix.

Dans Mathematica, vous pouvez utiliser TreeGraph comme moyen de construire le graphique et TreePlot comme moyen de le tracer. Par exemple, le code suivant génère un arbre avec les nœuds étiquetés par coordonnées et a un format similaire à ce que vous voulez:

TreePlot[{1 -> 4, 1 -> 1, 1 -> 5, 2 -> 4, 3 -> 6, 3 -> 9, 4 -> 8, 
  4 -> 10, 6 -> 7, 8 -> 9}, 
 EdgeRenderingFunction -> ({If[First[#2] === Last[#2], Red, Black], 
     Arrow[#1, .1], 
     Text[#2, LineScaledCoordinate[#1, .5], Background -> White]} &), 
 VertexLabeling -> True]

entrez la description de l'image ici

Notez également qu'il existe des packages graphiques comme TikZ dans Tex qui ont une capacité de dessin graphique très puissante. Cependant, TikZ est principalement utilisé dans les environnements Unix et ne stockera pas de structures de données ni ne fera de calculs comme Mathematica. Il s'agit uniquement d'une capacité de dessin graphique.

Le graphique que vous avez utilisé comme illustration a la police généralement utilisée dans TeX, il a donc probablement été produit avec TikZ ou un autre package TeX. Si vous voulez qu'une équation Mathematica ressemble à cela, vous pouvez utiliser la fonction TraditionalForm ou spécifier explicitement la police Computer Modern.


7

LaTeX avec forest

Le forestpackage de LaTeX vous permet de dessiner des arbres de jeu avec une syntaxe assez simple. Après avoir copié un modèle prédéfini dans le préambule de LaTeX, on peut construire l'arborescence du jeu en utilisant une []syntaxe imbriquée , puis le programme s'occupe du placement / espacement des nœuds / etc.

  • Avantages: personnalisation (vous pouvez annoter l'arborescence du jeu comme vous le souhaitez) et cohérence police / style
  • inconvénients: la saisie des éléments de l'arbre de jeu (noms des joueurs / actions, gains, jeux d'informations) est encore quelque peu manuelle, surtout si l'arbre est grand; et une courbe d'apprentissage quelque peu abrupte si vous n'êtes pas déjà familier avec le package TikZ

Voici un exemple du forestmanuel ("Arbre de décision" dans la section 5.1):

\begin{forest} 
decision tree
[N,plain content
  [I;{p_1=0.5},plain content,elo={yshift=4pt}
    [{5,1};a]
    [II;b,plain content
      [{1,2};m]
      [{2,3};n]
    ]
  ]
  [II;{p_2=0.5},plain content,elo={yshift=4pt}
    [;c
      [{1,0};z]
      [{2,2};t]
    ]
    [;d
      [{3,1};z]
      [{0,0};t]
    ]
  ]{\draw[dashed](!1.anchor)--(!2.anchor) node[pos=0.5,above]{I};}
]
\end{forest}

entrez la description de l'image ici

Game Theory Explorer

L' explorateur de la théorie des jeux est développé par quelques personnes au LSE. Il permet aux utilisateurs de saisir des jeux sous forme de matrice ou de créer des jeux de formulaire étendus via une interface graphique. Il semble également capable de convertir entre des jeux de forme normale et étendue. De plus, le logiciel est livré avec un solveur qui recherche les équilibres Nash du jeu entré.

  • avantages: GUI; solveur; pas besoin d'installation locale; personnalisation (limitée)
  • inconvénients: pas de support pour l'annotation; incohérence de police / style avec le reste du document

Captures d'écran: entrez la description de l'image ici

entrez la description de l'image ici


3

Si vous utilisez LaTeX, vous pouvez également dessiner des arbres de jeu avec le istgamepackage, qui est basé sur TikZ.

Le manuel contient de nombreux exemples avec des codes complets, notamment:

  • gibier à plumes dans toutes les directions: vers le bas, vers le haut, vers l'est, -45 degrés, etc.
  • étiquetage des joueurs, des étiquettes d'action et des gains
  • nœuds de décision, nœuds aléatoires, nœuds terminaux
  • divers ensembles d'informations
  • diverses flèches sur les branches (induction vers l'arrière)
  • divers continuums d'actions
  • sous-jeux
  • jeux de signalisation

Avec le istgamepackage, vous pouvez dessiner des arbres à gibier comme vous les dessinez à la main.

entrez la description de l'image ici

\documentclass{standalone}

\usepackage{istgame}

\begin{document}

\begin{istgame}
\xtdistance{15mm}{40mm}
\istroot(0){1}
  \istb{a_1}[al]
  \istb{a_2}[ar]
  \endist
\xtdistance{15mm}{20mm}
\istroot(1)(0-1){2}
  \istb{b_1}[al]{5,5}
  \istb{b_2}[ar]{1,5}
  \endist
\istroot(1)(0-2){2}
  \istb{b_3}[al]{3,6}
  \istb{b_4}[ar]{2,2}
  \endist
\end{istgame}

\end{document}

C'est super, merci!
Giskard

1

entrez la description de l'image ici

J'ai utilisé LaTeX avec le package tikz. Le code suivant est utilisé pour générer ce jeu Centepede:

\documentclass{article}

\usepackage{tikz}
\usepackage{bodegraph}
\usepackage[printwatermark]{xwatermark}


\begin{document}


\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=1.3cm,
  thick,main node/.style={circle,fill=blue!20,draw,font=\sffamily\normalsize\bfseries}]

  \node[main node] (1) {1};
  \node[main node] (2) [right of=1] {2};
  \node[main node] (3) [right of=2] {1};
  \node[main node] (4) [right of=3] {2};
  \node[main node] (5) [right of=4] {1};
  \node[main node] (6) [right of=5] {2};
    \node (7) [below of=1] {$(1,0)$};
       \node (8) [below of=2] {(0,2)};
    \node (9) [below of=3] {$(3,1)$};
    \node (10) [below of=4] {$(2,4)$};
  \node (11) [below of=5] {$(5,3)$};
    \node (12) [below of=6] {$(4,6)$};
      \node (13) [right of=6] {$(7,5)$};
       \path[every node/.style={font=\sffamily\small\scshape}]
   (1) edge node [above] {In} (2)
   edge node [left] {Out} (7)
        (2) edge node [above] {In} (3)
   edge node [left] {Out} (8)
      (3) edge node [above] {In} (4)
   edge node [left] {Out} (9)
      (4) edge node [above] {In} (5)
   edge node [left] {Out} (10)
      (5) edge node [above] {In} (6)
   edge node [left] {Out} (11)
      (6) edge node [above] {In} (13)
   edge node [left] {Out} (12);
\end{tikzpicture} 
\end{document}

Voici un autre exemple:

entrez la description de l'image ici

Le code pour le jeu ci-dessus est:

\documentclass{article}

\usepackage{tikz}
\usepackage{bodegraph}
\usepackage[printwatermark]{xwatermark}


\begin{document}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,
  thick,main node/.style={circle,fill=blue!20,draw,font=\sffamily\Large\bfseries}]

  \node[main node] (1) {1};
  \node[main node] (2) [below right of=1] {2};
  \node[main node] (3) [below left of=2] {1};
  \node (4) [below left of=1] {$(1,1)$};
   \node (5) [below right of=2] {(0,2)};
    \node (6) [below left of=3] {$(10,0)$};
    \node (7) [below right of=3] {$(5,5)$};

 \path[every node/.style={font=\sffamily\small\scshape}]
   (1) edge node [right] {Play} (2)
   edge node [left] {Not Play} (4)
      (2) edge node [right] {Distrust} (5)
   edge node [left] {Trust} (3)
      (3) edge node [left] {Steal} (6)
   edge node [right] {Share} (7);
\end{tikzpicture}
\end{document}

1

Juste pour votre commodité

Si vous êtes intéressé par le istgamepackage, vous pouvez faire comme ceci (pour dessiner les exemples d'Amit):

Pour le jeu de mille-pattes:

entrez la description de l'image ici

\documentclass{standalone}

\usepackage{istgame}

\begin{document}

\begin{istgame}
%% for arrows (optional)
\xtShowArrows
\xtShowEndPoints[ellipse node]
\xtHideTerminalNodes
%% some more optional settings
\setistEllipseNodeStyle{15pt}[blue!20] % node style
\setistmathTF*001<textbf>{textsc}      % input mode changer
\setistgrowdirection{-45}              % direction
%% tree
\xtdistance{10mm}{20mm}
\istrooto(1){1}
  \istbt{Out}[l]{(1,0)}[b] \istb{In}[a]            \endist
\istrooto(2)(1-2){2}
  \istbt{Out}[l]{(0,2)}[b] \istb{In}[a]            \endist
\istrooto(3)(2-2){1}
  \istbt{Out}[l]{(3,1)}[b] \istb{In}[a]            \endist
\istrooto(4)(3-2){2}
  \istbt{Out}[l]{(2,4)}[b] \istb{In}[a]            \endist
\istrooto(5)(4-2){1}
  \istbt{Out}[l]{(5,3)}[b] \istb{In}[a]            \endist
\istrooto(6)(5-2){2}
  \istbt{Out}[l]{(4,6)}[b] \istbt{In}[a]{(7,5)}[r] \endist
\end{istgame}

\end{document}

La structure arborescente elle-même est simple à dessiner.

entrez la description de l'image ici

\documentclass{standalone}

\usepackage{istgame}

\begin{document}

\begin{istgame}[font=\scriptsize]
\setistmathTF*001{textsc}  % input mode changer
\setistgrowdirection{-45}  % direction
%% tree
\xtdistance{10mm}{20mm}
\istroot(1){1}
  \istb{Out}[l]{(1,0)}[b] \istb{In}[a]           \endist
\istroot(2)(1-2){2}
  \istb{Out}[l]{(0,2)}[b] \istb{In}[a]           \endist
\istroot(3)(2-2){1}
  \istb{Out}[l]{(3,1)}[b] \istb{In}[a]           \endist
\istroot(4)(3-2){2}
  \istb{Out}[l]{(2,4)}[b] \istb{In}[a]           \endist
\istroot(5)(4-2){1}
  \istb{Out}[l]{(5,3)}[b] \istb{In}[a]           \endist
\istroot(6)(5-2){2}
  \istb{Out}[l]{(4,6)}[b] \istb{In}[a]{(7,5)}[r] \endist
\end{istgame}

\end{document}


Pour l'autre exemple:

entrez la description de l'image ici

\documentclass{standalone}

\usepackage{istgame}

\begin{document}

\begin{istgame}[font=\scriptsize]
%% for arrows (optional)
\xtShowArrows
\xtShowEndPoints[ellipse node]
\xtHideTerminalNodes
%% some more optional settings
\setistEllipseNodeStyle{15pt}[blue!20] % node style
\setistmathTF*001<textbf>{textsc} % input mode changer
%% tree
\xtdistance{15mm}{30mm}
\istrooto(1){1}
  \istbt{Not Play}[al]{(1,1)}
  \istb{Play}[ar]
  \endist
\istrooto(2)(1-2){2}
  \istb{Trust}[al]
  \istbt{Distrust}[ar]{(0,2)}
  \endist
\istrooto(3)(2-1){1}
  \istbt{Steal}[al]{(10,10)}
  \istbt{Share}[ar]{(5,5)}
  \endist
\end{istgame}

\end{document}

Encore une fois, la structure arborescente est simple à dessiner.

entrez la description de l'image ici

\documentclass{standalone}

\usepackage{istgame}

\begin{document}

\begin{istgame}[font=\scriptsize]
\setistmathTF*001{textsc}        % input mode changer
%% tree
\xtdistance{15mm}{30mm}
\istroot(1){1}
  \istb{Not Play}[al]{(1,1)}
  \istb{Play}[ar]
  \endist
\istroot(2)(1-2){2}
  \istb{Trust}[al]
  \istb{Distrust}[ar]{(0,2)}
  \endist
\istroot(3)(2-1){1}
  \istb{Steal}[al]{(10,10)}
  \istb{Share}[ar]{(5,5)}
  \endist
\end{istgame}

\end{document}

(AJOUTÉ) Si vous voulez que l'arbre soit vers l' est :

entrez la description de l'image ici

\documentclass{standalone}

\usepackage{istgame}

\begin{document}

\begin{istgame}[font=\scriptsize]
\setistmathTF*001{textsc}        % input mode changer
\setistgrowdirection'{east}      % direction
%% tree
\xtdistance{15mm}{30mm}
\istroot(1)<180>{1}
  \istb{Not Play}[al]{(1,1)}
  \istb{Play}[bl]
  \endist
\istroot(2)(1-2)<180>{2}
  \istb{Trust}[al]
  \istb{Distrust}[bl]{(0,2)}
  \endist
\istroot(3)(2-1)<180>{1}
  \istb{Steal}[al]{(10,10)}
  \istb{Share}[bl]{(5,5)}
  \endist
\end{istgame}

\end{document}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.