Visualisierungstools für die Spieltheorie: Spielbäume


11

Es gibt viele Möglichkeiten, ein sequentielles Spiel von Hand zu zeichnen. Mit dem Zeichnen des Spiels meine ich Folgendes:

Bildbeschreibung hier eingeben

Anzeige der Entscheidungspunkte, verfügbaren Aktionen und Auszahlungen der Spieler.

Gibt es eine Möglichkeit, dies in R oder einer ähnlichen höheren Programmiersprache zu tun? Um genau zu sein: Ich möchte keine geometrischen Gleichungen zeichnen, sondern eine Struktur definieren (Spieler, Punkte, Verbindungen, Auszahlungen) und vom Programm zeichnen lassen.

Ich surfe gerade im igraph-Paket, habe jedoch einige Probleme beim Beschriften. Daher frage ich mich, ob es einen besseren Weg gibt.


1
Wenn Sie LaTeX als eine "ähnliche Programmiersprache auf hohem Niveau" betrachten, finden Sie die Antworten auf diese Frage möglicherweise auf TeX.SE (und in Verbindung stehenden Fragen dort) nützlich.
Ilmari Karonen

Antworten:


6

Mathematica kann Diagramme erstellen und zeichnen.

Wenn Sie also das Diagramm in Mathematica erstellt haben, können Sie es mit Einstellungen Ihrer Wahl zeichnen.

In Mathematica können Sie den TreeGraph zum Erstellen des Diagramms und TreePlot zum Zeichnen des Diagramms verwenden. Der folgende Code generiert beispielsweise eine Baumstruktur mit den durch Koordinaten gekennzeichneten Knoten und hat ein ähnliches Format wie das, was Sie möchten:

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]

Bildbeschreibung hier eingeben

Beachten Sie auch, dass es Grafikpakete wie TikZ in Tex gibt, die sehr leistungsstarke Funktionen zum Zeichnen von Grafiken bieten. TikZ wird jedoch hauptsächlich in Unix-Umgebungen verwendet und speichert keine Datenstrukturen und führt keine Berechnungen wie Mathematica durch. Es handelt sich lediglich um eine grafische Zeichenfunktion.

Das Diagramm, das Sie als Illustration verwendet haben, hat die in TeX übliche Schriftart. Daher wurde es wahrscheinlich mit TikZ oder einem anderen TeX-Paket erstellt. Wenn eine Mathematica-Gleichung so aussehen soll, können Sie die TraditionalForm-Funktion verwenden oder die Computer Modern-Schriftart explizit angeben.


7

LaTeX mit forest

Mit dem forestPaket von LaTeX können Sie Spielbäume mit einer recht einfachen Syntax zeichnen. Nachdem Sie eine voreingestellte Vorlage in die LaTeX-Präambel kopiert haben, können Sie den Spielbaum mithilfe einer verschachtelten []Syntax aufbauen. Das Programm kümmert sich dann um die Platzierung / den Abstand usw. der Knoten.

  • Vorteile: Anpassbarkeit (Sie können den Spielbaum beliebig mit Anmerkungen versehen) und Konsistenz der Schriftarten / Stile
  • Nachteile: Die Eingabe der Elemente des Spielbaums (Spieler- / Aktionsnamen, Auszahlungen, Infosätze) ist immer noch etwas manuell, besonders wenn der Baum groß ist. und eine etwas steile Lernkurve, wenn Sie noch nicht mit dem TikZ-Paket vertraut sind

Hier ist ein Beispiel aus dem forestHandbuch ("Entscheidungsbaum" in Abschnitt 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}

Bildbeschreibung hier eingeben

Spieltheorie-Explorer

Der Spieltheorie-Explorer wird von einigen Leuten an der LSE entwickelt. Über eine grafische Benutzeroberfläche können Benutzer Matrixformulare eingeben oder umfangreiche Formulare erstellen. Es scheint auch in der Lage zu sein, zwischen normalen und umfangreichen Formspielen zu konvertieren. Zusätzlich wird die Software mit einem Löser geliefert, der nach Nash-Gleichgewichten des eingegebenen Spiels sucht.

  • Profis: GUI; Löser; Keine lokale Installation erforderlich. (eingeschränkte) Anpassbarkeit
  • Nachteile: Keine Unterstützung für Anmerkungen. Inkonsistenz von Schriftart / Stil mit dem Rest des Dokuments

Screenshots: Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben


3

Wenn Sie LaTeX verwenden, können Sie mit dem istgamePaket, das auf TikZ basiert , auch Spielbäume zeichnen .

Das Handbuch enthält viele Beispiele mit vollständigen Codes, einschließlich:

  • Wildbäume in jede Richtung: abwärts, aufwärts, ostwärts, -45 Grad usw.
  • Beschriften von Spielern, Aktionsetiketten und Auszahlungen
  • Entscheidungsknoten, Zufallsknoten, Endknoten
  • verschiedene Informationssätze
  • verschiedene Pfeile auf Ästen (Rückwärtsinduktion)
  • verschiedene Kontinuitäten von Aktionen
  • Unterspiele
  • Signalspiele

Mit dem istgamePaket können Sie Spielbäume so zeichnen, wie Sie sie von Hand zeichnen.

Bildbeschreibung hier eingeben

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

Das ist toll, danke!
Giskard

1

Bildbeschreibung hier eingeben

Ich habe LaTeX mit Tikz-Paket verwendet. Der folgende Code wird verwendet, um dieses Centepede-Spiel zu generieren:

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

Hier ist ein weiteres Beispiel:

Bildbeschreibung hier eingeben

Code für das obige Spiel ist:

\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

Nur für Ihre Bequemlichkeit

Wenn Sie an dem istgamePaket interessiert sind , können Sie dies tun (um Amits Beispiele zu zeichnen):

Für das Hundertfüßer-Spiel:

Bildbeschreibung hier eingeben

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

Die Baumstruktur selbst ist einfach zu zeichnen.

Bildbeschreibung hier eingeben

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


Für das andere Beispiel:

Bildbeschreibung hier eingeben

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

Auch hier ist die Baumstruktur einfach zu zeichnen.

Bildbeschreibung hier eingeben

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

(HINZUGEFÜGT) Wenn Sie möchten, dass der Baum nach Osten zeigt :

Bildbeschreibung hier eingeben

\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}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.