Ferramentas de visualização para a teoria dos jogos: árvores de jogos


11

Existem muitas maneiras de desenhar um jogo seqüencial 'à mão'. Ao desenhar o jogo, quero dizer o seguinte:

insira a descrição da imagem aqui

Exibindo pontos de decisão dos jogadores, ações disponíveis e recompensas.

Existe alguma maneira de fazer isso no R ou em uma linguagem de programação de alto nível semelhante? Para ser mais preciso: não quero traçar equações geométricas, quero definir uma estrutura (jogadores, pontos, conexões, recompensas) e ter o programa traçado.

Atualmente, estou navegando no pacote 'igraph', mas estou tendo alguma dificuldade em rotular, portanto, estou me perguntando se existe uma maneira melhor.


1
Se você considerar o LaTeX uma "linguagem de programação de alto nível semelhante", poderá encontrar respostas para esta pergunta no TeX.SE (e outras perguntas relacionadas).
Ilmari Karonen

Respostas:


6

O Mathematica possui uma capacidade de criação e desenho de gráficos.

Portanto, se você construiu o gráfico no Mathematica, pode plotá-lo usando as configurações de sua escolha.

No Mathematica, você pode usar o TreeGraph como forma de criar o gráfico e o TreePlot como forma de plotá -lo. Por exemplo, o código a seguir gera uma árvore com os nós rotulados por coordenadas e tem um formato semelhante ao que você deseja:

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]

insira a descrição da imagem aqui

Além disso, observe que existem pacotes gráficos, como o TikZ in Tex, que possuem uma poderosa capacidade de desenho de gráficos. Porém, o TikZ é usado principalmente em ambientes unix e não armazena estruturas de dados nem faz cálculos como o Mathematica. É puramente uma capacidade de desenho gráfico.

O gráfico que você usou como ilustração possui a fonte normalmente usada no TeX, portanto, provavelmente foi produzida com o TikZ ou outro pacote TeX. Se você deseja que uma equação do Mathematica pareça com isso, você pode usar a função TraditionalForm ou especificar explicitamente a fonte Computer Modern.


7

LaTeX com forest

O forestpacote do LaTeX permite desenhar árvores de jogos com uma sintaxe bastante simples. Depois de copiar um modelo predefinido no preâmbulo do LaTeX, é possível construir a árvore do jogo usando uma []sintaxe aninhada , e o programa cuida da localização / espaçamento / etc.

  • prós: capacidade de personalização (você pode anotar a árvore do jogo da maneira que desejar) e consistência de fonte / estilo
  • contras: inserir os elementos da árvore do jogo (nomes de jogadores / ação, prêmios, conjuntos de informações) ainda é um pouco manual, especialmente se a árvore for grande; e uma curva de aprendizado um tanto íngreme, se você ainda não está familiarizado com o pacote TikZ

Aqui está um exemplo do forestmanual ("Árvore de decisão" na Seção 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}

insira a descrição da imagem aqui

Explorador da Teoria dos Jogos

O explorador da teoria dos jogos é desenvolvido por algumas pessoas na LSE. Ele permite que os usuários insiram jogos em formato de matriz ou construam extensos jogos de formulário por meio de uma GUI. Também parece capaz de converter entre jogos normais e extensos. Além disso, o software vem com um solucionador que procura os equilíbrios de Nash do jogo inserido.

  • profissionais: GUI; solucionador; não há necessidade de instalação local; personalização (limitada)
  • contras: sem suporte para anotação; inconsistência de fonte / estilo com o restante do documento

Imagens: insira a descrição da imagem aqui

insira a descrição da imagem aqui


3

Se você usa o LaTeX, também pode desenhar árvores de jogos com o istgamepacote, que é baseado no TikZ.

O manual contém muitos exemplos com códigos completos, incluindo:

  • árvores de caça em qualquer direção: para baixo, para cima, para leste, -45 graus, etc.
  • rotular jogadores, rótulos de ação e recompensas
  • nós de decisão, nós de chance, nós de terminal
  • vários conjuntos de informações
  • várias setas nos galhos (indução para trás)
  • vários contínuos de ações
  • sub-jogos
  • jogos de sinalização

Com o istgamepacote, você pode desenhar árvores de jogos como as desenhadas à mão.

insira a descrição da imagem aqui

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

Isso é ótimo, obrigado!
Giskard

1

insira a descrição da imagem aqui

Eu usei o LaTeX com o pacote tikz. O código a seguir é usado para gerar este jogo 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}

Aqui está outro exemplo:

insira a descrição da imagem aqui

O código para o jogo acima é:

\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

Apenas para sua conveniência

Se você está interessado no istgamepacote, pode fazer o seguinte (para desenhar os exemplos de Amit):

Para o jogo da centopéia:

insira a descrição da imagem aqui

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

A estrutura da árvore em si é simples de desenhar.

insira a descrição da imagem aqui

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


Para o outro exemplo:

insira a descrição da imagem aqui

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

Novamente, a estrutura da árvore é simples de desenhar.

insira a descrição da imagem aqui

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

(ADICIONADO) Se você deseja que a árvore fique para o leste :

insira a descrição da imagem aqui

\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}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.