Herramientas de visualización para teoría de juegos: árboles de juegos

11

Hay muchas formas de dibujar un juego secuencial 'a mano'. Al dibujar el juego quiero decir esto:

ingrese la descripción de la imagen aquí

Mostrar los puntos de decisión de los jugadores, las acciones disponibles y los pagos.

¿Hay alguna manera de hacer esto en R o en un lenguaje de programación similar de alto nivel? Para ser precisos: no quiero trazar ecuaciones geométricas, quiero definir una estructura (jugadores, puntos, conexiones, pagos) y hacer que el programa la trace.

Actualmente estoy navegando por el paquete 'igraph' pero tengo algunas dificultades para etiquetar, así que me pregunto si hay una mejor manera.

Giskard
fuente
1
Si considera que LaTeX es un "lenguaje de programación de alto nivel similar", puede encontrar útiles las respuestas a esta pregunta en TeX.SE (y otras preguntas relacionadas).
Ilmari Karonen

Respuestas:

6

Mathematica tiene una capacidad de creación y dibujo de gráficos.

Entonces, si construyó el gráfico en Mathematica, entonces podría trazarlo usando la configuración que elija.

En Mathematica, puede usar TreeGraph como forma de construir el gráfico, y TreePlot como forma de trazarlo . Por ejemplo, el siguiente código genera un árbol con los nodos etiquetados por coordenadas y tiene un formato similar al que desea:

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]

ingrese la descripción de la imagen aquí

Además, tenga en cuenta que hay paquetes gráficos como TikZ en Tex que tienen una capacidad de dibujo de gráficos muy potente. Sin embargo, TikZ se usa principalmente en entornos Unix, y no almacenará estructuras de datos ni hará cálculos como Mathematica. Es puramente una capacidad de dibujo gráfico.

El gráfico que ha usado como ilustración tiene la fuente que se usa típicamente en TeX, por lo que probablemente se produjo con TikZ u otro paquete de TeX. Si desea que una ecuación de Mathematica se vea así, puede usar la función TraditionalForm o especificar explícitamente la fuente Computer Modern.

Feria de Lassie
fuente
7

LaTeX con forest

El forestpaquete de LaTeX te permite dibujar árboles de juego con una sintaxis bastante simple. Después de copiar una plantilla preestablecida en el preámbulo de LaTeX, uno puede construir el árbol del juego usando una []sintaxis anidada , luego el programa se ocupa de la colocación / espaciado de nodos / etc.

  • Ventajas: personalización (puede anotar el árbol del juego de la forma que desee) y la coherencia de fuente / estilo
  • contras: ingresar los elementos del árbol del juego (nombres de jugador / acción, pagos, conjuntos de información) sigue siendo algo manual, especialmente si el árbol es grande; y una curva de aprendizaje algo pronunciada si aún no está familiarizado con el paquete TikZ

Aquí hay un ejemplo del forestmanual ("Árbol de decisión" en la Sección 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}

ingrese la descripción de la imagen aquí

Explorador de teoría de juegos

El explorador de teoría de juegos es desarrollado por algunas personas en LSE. Permite a los usuarios ingresar juegos en forma de matriz o construir juegos de forma extensiva a través de una GUI. También parece capaz de convertir entre juegos de forma normal y extensa. Además, el software viene con un solucionador que busca los equilibrios de Nash del juego introducido.

  • pros: GUI; solucionador sin necesidad de instalación local; personalización (limitada)
  • contras: no hay soporte para anotaciones; Inconsistencia de fuente / estilo con el resto del documento

Capturas de pantalla ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Herr K.
fuente
3

Si usa LaTeX, también puede dibujar árboles de juego con el istgamepaquete, que se basa en TikZ.

El manual contiene muchos ejemplos con códigos completos que incluyen:

  • árboles de juego en cualquier dirección: hacia abajo, hacia arriba, hacia el este, -45 grados, etc.
  • etiquetar jugadores, etiquetas de acción y pagos
  • nodos de decisión, nodos casuales, nodos terminales
  • diversos conjuntos de información
  • varias flechas en las ramas (inducción hacia atrás)
  • varias continuas de acciones
  • subjuegos
  • juegos de señalización

Con el istgamepaquete, puedes dibujar árboles de juego como los dibujas a mano.

ingrese la descripción de la imagen aquí

\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}
InSung Cho
fuente
Esto es genial, gracias!
Giskard el
1

ingrese la descripción de la imagen aquí

He usado LaTeX con el paquete tikz. El siguiente código se utiliza para generar este juego 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}

Aquí hay otro ejemplo:

ingrese la descripción de la imagen aquí

El código para el juego anterior es:

\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}
Amit
fuente
1

Solo para su conveniencia

Si está interesado en el istgamepaquete, puede hacer esto (para dibujar los ejemplos de Amit):

Para el juego de ciempiés:

ingrese la descripción de la imagen aquí

\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 estructura del árbol en sí es simple de dibujar.

ingrese la descripción de la imagen aquí

\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}


Para el otro ejemplo:

ingrese la descripción de la imagen aquí

\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}

Nuevamente, la estructura de árbol es simple de dibujar.

ingrese la descripción de la imagen aquí

\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}

(AGREGADO) Si desea que el árbol esté hacia el este :

ingrese la descripción de la imagen aquí

\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}
InSung Cho
fuente