게임 이론을위한 시각화 도구 : 게임 트리


12

순차적 인 게임을 '손으로'그리는 방법에는 여러 가지가 있습니다. 게임을 그리면서 나는 이것을 의미한다.

여기에 이미지 설명을 입력하십시오

플레이어의 의사 결정 지점, 사용 가능한 조치 및 대가를 표시합니다.

R 또는 이와 유사한 고급 프로그래밍 언어 로이 작업을 수행 할 수있는 방법이 있습니까? 정확히 말하면 : 나는 기하학적 방정식을 그리는 것이 아니라 구조 (플레이어, 포인트, 연결, 지불)를 정의하고 프로그램이 플롯하도록하고 싶습니다.

나는 현재 'igraph'패키지를 탐색하고 있지만 레이블링에 어려움이 있으므로 더 좋은 방법이 있는지 궁금합니다.


1
LaTeX를 "유사한 고급 프로그래밍 언어"라고 생각하면 TeX.SE에서이 질문에 대한 답변 (및 기타 관련 질문)이 유용 할 수 있습니다.
Ilmari Karonen

답변:


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]

여기에 이미지 설명을 입력하십시오

또한 매우 강력한 그래프 그리기 기능이있는 Tik의 TikZ와 같은 그래픽 패키지가 있습니다. TikZ는 대부분 유닉스 환경에서 사용되며 Mathematica와 같은 데이터 구조를 저장하거나 계산하지 않습니다. 순전히 그래픽 그리기 기능입니다.

그림으로 사용한 그래프에는 TeX에서 일반적으로 사용되는 글꼴이 있으므로 TikZ 또는 다른 TeX 패키지로 생성되었을 수 있습니다. Mathematica 등식을 원한다면 TraditionalForm 함수를 사용하거나 Computer Modern 글꼴을 명시 적으로 지정할 수 있습니다.


7

LaTeX forest

forest유액의 패키지는 아주 간단한 문법과 게임 트리를 그릴 수 있습니다. 사전 설정된 템플릿을 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를 통해 매트릭스 형태의 게임을 입력하거나 광범위한 형태의 게임을 만들 수 있습니다. 또한 일반 폼 게임과 광범위한 폼 게임 사이에서 변환 할 수있는 것으로 보입니다. 또한 소프트웨어에는 입력 된 게임의 내쉬 평형을 찾는 솔버가 제공됩니다.

  • 장점 : GUI; 솔버; 로컬 설치가 필요 없습니다. (제한적) 사용자 정의
  • 단점 : 주석을 지원하지 않습니다. 나머지 문서와의 글꼴 / 스타일 불일치

스크린 샷 : 여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


3

LaTeX를 사용하는 경우 istgameTikZ 기반 패키지 로 게임 트리를 그릴 수도 있습니다 .

매뉴얼에는 다음을 포함한 전체 코드가 포함 된 많은 예제가 포함되어 있습니다.

  • 아래쪽, 위쪽, 동쪽, -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

여기에 이미지 설명을 입력하십시오

tikz 패키지와 함께 LaTeX를 사용했습니다. 이 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}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.