Інструменти візуалізації теорії ігор: Дерева ігор


12

Існує багато способів намалювати послідовну гру «від руки». Малюючи гру, я маю на увазі це:

введіть тут опис зображення

Відображення точок рішення гравців, наявних дій та виплат.

Чи є якийсь спосіб я це зробити в R або подібній мові програмування високого рівня? Якщо бути точним: я не хочу будувати геометричні рівняння, я хочу визначити структуру (гравці, точки, з'єднання, відшкодування) і програму побудувати її.

Зараз я переглядаю пакет 'igraph', але у мене виникають труднощі з маркуванням, тому мені цікаво, чи є кращий спосіб.


1
Якщо ви вважаєте, що LaTeX є "подібною мовою програмування високого рівня", ви можете знайти корисні відповіді на це запитання на TeX.SE (та інші відповідні питання).
Ільмарі Каронен

Відповіді:


6

Mathematica має можливість побудови графіків та малювання.

Отже, якщо ви побудували графік у Mathematica, то ви зможете побудувати його за допомогою обраних вами налаштувань.

У Mathematica ви можете використовувати TreeGraph як спосіб побудови графіка, а TreePlot - як спосіб його побудови. Наприклад, наступний код генерує дерево з вузлами, позначеними координатою і має формат, подібний до потрібного:

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]

введіть тут опис зображення

Також зауважте, що є такі графічні пакети, як TikZ в Tex, які мають дуже потужну можливість малювання графіків. TikZ, в основному, використовується в unix-середовищах, але не зберігає структури даних і не проводить обчислення на зразок Mathematica. Це суто графічна можливість малювання.

Графік, який ви використовували як ілюстрацію, має шрифт, який зазвичай використовується в TeX, тому він, ймовірно, був створений разом із TikZ або іншим пакетом TeX. Якщо ви хочете, щоб рівняння Mathematica виглядало так, ви можете скористатися функцією TraditionalForm або чітко вказати шрифт Computer Modern.


8

LaTeX с forest

forestПакет LaTeX дозволяє малювати гри дерева з дуже простим синтаксисом. Після копіювання заздалегідь заданого шаблону в преамбулу LaTeX можна створити дерево ігор за допомогою вкладеного []синтаксису, тоді програма піклується про розміщення / пробіл вузлів / тощо.

  • плюси: настроюваність (ви можете коментувати ігрове дерево будь-яким способом) та послідовність шрифту / стилю
  • Мінуси: введення елементів ігрового дерева (імена гравця / дій, виплати, інформаційні набори) все ще дещо ручне, особливо якщо дерево велике; і дещо крута крива навчання, якщо ви вже не знайомі з пакетом TikZ

Ось приклад з forestпосібника («Дерево рішень» у Розділі 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}

введіть тут опис зображення

Теорія ігор Провідник

Провідник теорії ігор розроблений кількома людьми на LSE. Це дозволяє користувачам вводити ігри у матричній формі або будувати ігри широкої форми через графічний інтерфейс. Це також здається здатним конвертувати між звичайними і розширеними формами гри. Крім того, програмне забезпечення постачається з розв'язувачем, який шукає рівноваги Неша введеної гри.

  • плюси: GUI; сольвер; відсутність необхідності в локальній установці; (обмежена) настроюваність
  • мінуси: відсутність підтримки для анотації; невідповідність шрифту / стилю решті документа

Скріншоти: введіть тут опис зображення

введіть тут опис зображення


4

Якщо ви використовуєте LaTeX, ви також можете малювати ігрові дерева за допомогою istgameпакету, який базується на TikZ.

Посібник містить безліч прикладів з повними кодами, включаючи:

  • ігрові дерева в будь-якому напрямку: вниз, вгору, на схід, -45 градус і т.д.
  • маркування гравців, міток дій та виплат
  • вузли рішення, вузли випадковості, кінцеві вузли
  • різні інформаційні набори
  • різні стрілки на гілках (індукція назад)
  • різні продовження дій
  • підігри
  • ігри сигналізації

За допомогою istgameпакета ви можете малювати ігрові дерева так, як малюєте їх вручну.

введіть тут опис зображення

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

Це чудово, дякую!
Giskard

1

введіть тут опис зображення

Я використовував LaTeX з пакетом tikz. Для створення цієї гри 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}

Ось ще один приклад:

введіть тут опис зображення

Код для вищевказаної гри:

\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

Просто для вашої зручності

Якщо вас зацікавив istgameпакунок, ви можете зробити так (малювати приклади Amit):

Для гри сороковиці:

введіть тут опис зображення

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

Саму структуру дерева малювати просто.

введіть тут опис зображення

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


Для іншого прикладу:

введіть тут опис зображення

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

Знову ж, структуру дерева малювати просто.

введіть тут опис зображення

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

(ДОДАТО) Якщо ви хочете, щоб дерево було на схід :

введіть тут опис зображення

\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}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.