Narzędzia wizualizacji teorii gier: Drzewa gier

12

Istnieje wiele sposobów na narysowanie gry sekwencyjnej „ręcznie”. Rysując grę mam na myśli:

wprowadź opis zdjęcia tutaj

Wyświetlanie punktów decyzyjnych graczy, dostępnych akcji i wypłat.

Czy jest jakiś sposób, aby to zrobić w języku R lub podobnym języku programowania wysokiego poziomu? Mówiąc dokładniej: nie chcę kreślić równań geometrycznych, chcę zdefiniować strukturę (gracze, punkty, połączenia, wypłaty) i zlecić programowi wykreślić.

Obecnie przeglądam pakiet „igraph”, ale mam pewne trudności z etykietowaniem, więc zastanawiam się, czy jest lepszy sposób.

Giskard
źródło
1
Jeśli uważasz, że LaTeX jest „podobnym językiem programowania wysokiego poziomu”, możesz znaleźć odpowiedzi na to pytanie na TeX.SE (i innych powiązanych z nim pytaniach) przydatne.
Ilmari Karonen

Odpowiedzi:

6

Mathematica ma możliwość tworzenia i rysowania wykresów.

Tak więc, jeśli zbudowałeś wykres w Mathematica, możesz wykreślić go przy użyciu wybranych ustawień.

W Mathematica możesz użyć TreeGraph jako sposobu na zbudowanie wykresu, a TreePlot jako sposobu na wykreślenie go. Na przykład poniższy kod generuje drzewo z węzłami oznaczonymi współrzędnymi i ma podobny format, co chcesz:

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]

wprowadź opis zdjęcia tutaj

Należy również pamiętać, że istnieją pakiety graficzne, takie jak TikZ w Tex, które mają bardzo potężne możliwości rysowania wykresów. TikZ jest jednak najczęściej używany w środowiskach uniksowych i nie będzie przechowywać struktur danych ani wykonywać obliczeń takich jak Mathematica. Jest to czysto graficzna możliwość rysowania.

Wykres użyty jako ilustracja ma czcionkę zwykle używaną w TeX, więc prawdopodobnie został stworzony z TikZ lub innym pakietem TeX. Jeśli chcesz, aby równanie Mathematica wyglądało tak, możesz użyć funkcji TraditionalForm lub jawnie określić czcionkę Computer Modern.

Lassie Fair
źródło
8

LaTeX z forest

forestPakiet LaTeX pozwala narysować drzewo gry z bardzo prostej składni. Po skopiowaniu wstępnie ustawionego szablonu do preambuły LaTeX, można zbudować drzewo gry za pomocą zagnieżdżonej []składni, a następnie program zajmie się rozmieszczeniem węzłów / odstępami itp.

  • zalety: możliwość dostosowania (można dodawać adnotacje do drzewa gry w dowolny sposób) oraz spójność czcionek / stylu
  • Wady: wprowadzanie elementów drzewa gry (nazwy graczy / akcji, wypłaty, zestawy informacji) jest nadal nieco ręczne, szczególnie jeśli drzewo jest duże; i nieco stromą krzywą uczenia się, jeśli jeszcze nie znasz pakietu TikZ

Oto przykład z forestpodręcznika („Drzewo decyzyjne” w rozdziale 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}

wprowadź opis zdjęcia tutaj

Eksplorator teorii gier

Teoria gier Explorer jest rozwijany przez kilku ludzi na LSE. Pozwala użytkownikom na wprowadzanie gier matrycowych lub tworzenie rozbudowanych gier poprzez GUI. Wydaje się również, że jest w stanie konwertować pomiędzy zwykłymi i rozbudowanymi grami. Dodatkowo oprogramowanie zawiera solver, który szuka równowagi Nasha wprowadzonej gry.

  • zalety: GUI; solver; nie ma potrzeby instalacji lokalnej; (ograniczona) możliwość dostosowania
  • Wady: brak wsparcia dla adnotacji; niezgodność czcionki / stylu z resztą dokumentu

Zrzuty ekranu: wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Pan K.
źródło
4

Jeśli korzystasz z LaTeX, możesz również rysować drzewa gry za pomocą istgamepakietu opartego na TikZ.

Podręcznik zawiera wiele przykładów z pełnymi kodami, w tym:

  • drzewa gry w dowolnym kierunku: w dół, w górę, na wschód, -45 stopni itp.
  • oznaczanie graczy, etykiety akcji i wypłaty
  • węzły decyzyjne, węzły losowe, węzły końcowe
  • różne zestawy informacji
  • różne strzałki na gałęziach (indukcja wsteczna)
  • różne kontynuacje działań
  • gry podrzędne
  • gry sygnalizacyjne

Dzięki istgamepakietowi możesz rysować drzewa gry tak, jak rysujesz je ręcznie.

wprowadź opis zdjęcia tutaj

\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
źródło
To wspaniale, dziękuję!
Giskard
1

wprowadź opis zdjęcia tutaj

Użyłem LaTeXa z pakietem tikz. Do wygenerowania tej gry Centepede wykorzystano następujący kod:

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

Oto inny przykład:

wprowadź opis zdjęcia tutaj

Kod powyższej gry to:

\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
źródło
1

Dla Twojej wygody

Jeśli jesteś zainteresowany istgamepakietem, możesz to zrobić (aby narysować przykłady Amita):

W przypadku stonogi:

wprowadź opis zdjęcia tutaj

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

Sama struktura drzewa jest łatwa do narysowania.

wprowadź opis zdjęcia tutaj

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


W innym przykładzie:

wprowadź opis zdjęcia tutaj

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

Ponownie struktura drzewa jest łatwa do narysowania.

wprowadź opis zdjęcia tutaj

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

(DODANE) Jeśli chcesz, aby drzewo było na wschód :

wprowadź opis zdjęcia tutaj

\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
źródło