Strumenti di visualizzazione per la teoria dei giochi: alberi di gioco


11

Esistono molti modi per disegnare un gioco sequenziale "a mano". Disegnando il gioco intendo questo:

inserisci qui la descrizione dell'immagine

Visualizzazione dei punti di decisione dei giocatori, azioni disponibili e payoff.

Esiste un modo per farlo in R o un linguaggio di programmazione simile di alto livello? Per essere precisi: non voglio tracciare equazioni geometriche, voglio definire una struttura (giocatori, punti, connessioni, payoff) e far sì che il programma la tracci.

Attualmente sto navigando nel pacchetto "igraph" ma ho qualche difficoltà nell'etichettare, quindi mi chiedo se esiste un modo migliore.


1
Se ritieni che LaTeX sia un "linguaggio di programmazione di alto livello simile", potresti trovare utili le risposte a questa domanda su TeX.SE (e altre domande correlate).
Ilmari Karonen,

Risposte:


6

Mathematica ha una capacità di costruzione e disegno di grafici.

Quindi, se hai creato il grafico in Mathematica, puoi tracciarlo usando le impostazioni che preferisci.

In Mathematica, potresti usare TreeGraph come modo per costruire il grafico e TreePlot come modo per tracciarlo. Ad esempio, il codice seguente genera un albero con i nodi etichettati da coordinate e ha un formato simile a quello desiderato:

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]

inserisci qui la descrizione dell'immagine

Inoltre, si noti che ci sono pacchetti grafici come TikZ in Tex che hanno una capacità di disegno grafico molto potente. TikZ è utilizzato principalmente in ambienti unix, tuttavia, e non memorizza le strutture di dati né esegue calcoli come Mathematica. È puramente una capacità di disegno grafico.

Il grafico che hai usato come illustrazione ha il carattere tipicamente usato in TeX, quindi probabilmente è stato prodotto con TikZ o un altro pacchetto TeX. Se vuoi che un'equazione di Mathematica assomigli a quella, puoi usare la funzione TraditionalForm o specificare esplicitamente il carattere Computer Modern.


7

LaTeX con forest

Il forestpacchetto di LaTeX ti consente di disegnare alberi di gioco con una sintassi piuttosto semplice. Dopo aver copiato un modello preimpostato nel preambolo di LaTeX, si può costruire l'albero di gioco usando una []sintassi nidificata , quindi il programma si occupa del posizionamento / spaziatura / ecc. Del nodo.

  • pro: personalizzazione (puoi annotare l'albero del gioco nel modo che preferisci) e coerenza carattere / stile
  • contro: l'inserimento degli elementi dell'albero di gioco (nomi dei giocatori / azioni, payoff, set di informazioni) è ancora in qualche modo manuale, specialmente se l'albero è grande; e una curva di apprendimento piuttosto ripida se non si ha già familiarità con il pacchetto TikZ

Ecco un esempio dal forestmanuale ("Albero decisionale" nella Sezione 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}

inserisci qui la descrizione dell'immagine

Game Theory Explorer

L' esploratore della teoria dei giochi è sviluppato da alcune persone della LSE. Consente agli utenti di inserire giochi in forma di matrice o creare giochi in forma estesa tramite una GUI. Sembra anche in grado di convertire tra giochi in forma normale ed estesa. Inoltre, il software viene fornito con un risolutore che cerca gli equilibri di Nash del gioco immesso.

  • pro: GUI; risolutore; nessuna necessità di installazione locale; personalizzazione (limitata)
  • contro: nessun supporto per l'annotazione; incoerenza di carattere / stile con il resto del documento

Screenshots: inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


3

Se usi LaTeX, puoi anche disegnare alberi di gioco con il istgamepacchetto, basato su TikZ.

Il manuale contiene molti esempi con codici completi tra cui:

  • alberi da gioco in qualsiasi direzione: verso il basso, verso l'alto, verso est, -45 gradi, ecc.
  • etichettare giocatori, etichette di azione e payoff
  • nodi decisionali, nodi probabilistici, nodi terminali
  • vari set di informazioni
  • varie frecce sui rami (induzione all'indietro)
  • vari continui di azioni
  • sottogiochi
  • giochi di segnalazione

Con il istgamepacchetto, puoi disegnare alberi di gioco come li disegni a mano.

inserisci qui la descrizione dell'immagine

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

Questo è fantastico, grazie!
Giskard,

1

inserisci qui la descrizione dell'immagine

Ho usato LaTeX con il pacchetto tikz. Il seguente codice viene utilizzato per generare questo gioco 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}

Ecco un altro esempio:

inserisci qui la descrizione dell'immagine

Il codice per il gioco sopra è:

\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

Solo per tua comodità

Se sei interessato al istgamepacchetto, puoi fare così (per disegnare gli esempi di Amit):

Per il gioco del millepiedi:

inserisci qui la descrizione dell'immagine

\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 struttura ad albero stessa è semplice da disegnare.

inserisci qui la descrizione dell'immagine

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


Per un altro esempio:

inserisci qui la descrizione dell'immagine

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

Ancora una volta, la struttura ad albero è semplice da disegnare.

inserisci qui la descrizione dell'immagine

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

(AGGIUNTO) Se vuoi che l'albero sia verso est :

inserisci qui la descrizione dell'immagine

\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}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.