ゲーム理論の視覚化ツール:ゲームツリー


11

シーケンシャルゲームを「手」で描くには多くの方法があります。ゲームを描くことで私はこれを意味します:

ここに画像の説明を入力してください

プレイヤーの決定ポイント、利用可能なアクション、およびペイオフを表示します。

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]

ここに画像の説明を入力してください

また、Texには、非常に強力なグラフ描画機能を備えたTikZのようなグラフィカルパッケージがあることに注意してください。ただし、TikZは主にUNIX環境で使用され、データ構造の保存やMathematicaのような計算は行いません。これは純粋にグラフィカルな描画機能です。

イラストとして使用したグラフには、通常TeXで使用されるフォントがあるため、おそらくTikZまたは別のTeXパッケージで作成されたものです。Mathematicaの方程式をそのように見せたい場合は、TraditionalForm関数を使用するか、Computer Modernフォントを明示的に指定します。


7

LaTeXと forest

forestLaTeX のパッケージを使用すると、非常に単純な構文でゲームツリーを描画できます。プリセットテンプレートを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を使用している場合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}

これは素晴らしい、ありがとう!
ギスカード

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.