17 votos

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

Hay muchas formas de dibujar un juego secuencial 'a mano'. Cuando digo dibujar el juego me refiero a esto:

ingresa la descripción de la imagen aquí

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

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

Actualmente estoy explorando el paquete 'igraph' pero tengo dificultades para etiquetar, por lo que me pregunto si hay una mejor manera.

1 votos

Si consideras LaTeX como un "lenguaje de programación de alto nivel similar", es posible que encuentres útil las respuestas a esta pregunta en TeX.SE (y otras preguntas relacionadas allí).

12voto

Coincoin Puntos 12823

LaTeX con forest

El paquete forest de LaTeX te permite dibujar árboles de juego con una sintaxis bastante simple. Después de copiar una plantilla predefinida en el preámbulo de LaTeX, se puede construir el árbol de juego usando una sintaxis anidada de [], luego el programa se encarga de la ubicación de los nodos/el espaciado/etc.

  • ventajas: personalización (puedes anotar el árbol de juego de la manera que desees) y consistencia en fuentes/estilos
  • desventajas: introducir los elementos del árbol de juego (nombres de jugador/acción, pagos, conjuntos de información) todavía es algo manual, especialmente si el árbol es grande; y una curva de aprendizaje algo empinada si no estás familiarizado/a con el paquete TikZ

Aquí tienes un ejemplo del manual de forest ("Á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}

descripcion de la imagen

Explorador de Teoría de Juegos

El explorador de teoría de juegos ha sido desarrollado por algunas personas en la LSE. Permite a los usuarios introducir juegos en forma de matriz o construir juegos en forma extensiva a través de una interfaz gráfica de usuario. También parece capaz de convertir entre juegos en forma normal y extensiva. Además, el software viene con un solucionador que busca equilibrios de Nash para el juego introducido.

  • ventajas: interfaz gráfica de usuario; solucionador; no es necesario instalar localmente; (limitada) personalización
  • desventajas: falta de soporte para anotaciones; inconsistencia de fuentes/estilos con el resto del documento

Capturas de pantalla: descripcion de la imagen

descripcion de la imagen

0 votos

¡Muchas gracias por la respuesta cargada! Acabo de probar el explorador de teoría de juegos. Se han trasladado a: gametheoryexplorer.org con maravillosos y breves tutoriales en YouTube. ¡Increíble!

7voto

cnu Puntos 6802

Mathematica tiene una capacidad para construir y dibujar gráficos.

Entonces, si construyes el gráfico en Mathematica, puedes trazarlo utilizando la configuración que elijas.

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

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]

enter image description here

También ten en cuenta que hay paquetes gráficos como TikZ en Tex que tienen una capacidad muy poderosa para dibujar gráficos. TikZ se utiliza principalmente en entornos de Unix, sin embargo, y no almacenará estructuras de datos ni realizará cálculos como Mathematica. Es puramente una capacidad de dibujo gráfico.

El gráfico que has utilizado como ilustración tiene la fuente típicamente utilizada en TeX, por lo que probablemente fue producido con TikZ u otro paquete TeX. Si quieres que una ecuación de Mathematica se vea así, puedes utilizar la función TraditionalForm o especificar explícitamente la fuente Computer Modern.

4voto

Darren Puntos 118

Si utilizas LaTeX, también puedes dibujar árboles de juego con el paquete istgame, 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, a -45 grados, etc.
  • etiquetado de jugadores, etiquetas de acciones y pagos
  • nodos de decisión, nodos de azar, nodos terminales
  • conjuntos de información variados
  • flechas variadas en las ramas (inducción hacia atrás)
  • varias secuencias de acciones
  • subjuegos
  • juegos de señalización

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

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

0 votos

Esto es genial, ¡gracias!

2voto

Sean Puntos 152

introduzca aquí la descripción de la imagen

He usado LaTeX con el paquete tikz. El siguiente código se utiliza para generar este juego Centípeda:

\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};
  1
  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)$};
  $(5,3)$}
    $(4,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:

introduzca aquí la descripción de la imagen

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};
  $(1,1)}
   (0,2)}
    $(10,0)}
    $(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}

2voto

Darren Puntos 118

Solo para tu conveniencia

Si estás interesado en el paquete istgame, puedes hacerlo de la siguiente manera (para dibujar los ejemplos de Amit):

Para el juego de la ciempiés:

introducir descripción de la imagen aquí

\documentclass{standalone}

\usepackage{istgame}

\begin{document>

\begin{istgame}
%% para las flechas (opcional)
\xtShowArrows
\xtShowEndPoints[elipse nodo]
\xtHideTerminalNodes
%% algunas configuraciones opcionales más
\setistEllipseNodeStyle{15pt}[azul!20] % estilo del nodo
\setistmathTF*001{textsc}      % cambiador de modo de entrada
\setistgrowdirection{-45}              % dirección
%% árbol
\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.

introducir descripción de la imagen aquí

\documentclass{standalone}

\usepackage{istgame}

\begin{document>

\begin{istgame}[font=\scriptsize]
\setistmathTF*001{textsc}  % cambiador de modo de entrada
\setistgrowdirection{-45}  % dirección
%% árbol
\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}

Para otro ejemplo:

introducir descripción de la imagen aquí

\documentclass{standalone}

\usepackage{istgame}

\begin{document>

\begin{istgame}[font=\scriptsize]
%% para las flechas (opcional)
\xtShowArrows
\xtShowEndPoints[elipse nodo]
\xtHideTerminalNodes
%% algunas configuraciones opcionales más
\setistEllipseNodeStyle{15pt}[azul!20] % estilo del nodo
\setistmathTF*001{textsc} % cambiador de modo de entrada
%% árbol
\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

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

introducir descripción de la imagen aquí

\documentclass{standalone}

\usepackage{istgame}

\begin{document>

\begin{istgame}[font=\scriptsize]
\setistmathTF*001{textsc}        % cambiador de modo de entrada
%% árbol
\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

(ADICIONAL) Si deseas que el árbol esté hacia el este:

introducir descripción de la imagen aquí

\documentclass{standalone}

\usepackage{istgame}

\begin{document>

\begin{istgame}[font=\scriptsize]
\setistmathTF*001{textsc}        % cambiador de modo de entrada
\setistgrowdirection'{este}      % dirección
%% árbol
\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

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X