Các công cụ trực quan cho lý thuyết trò chơi: Cây trò chơi


11

Có nhiều cách để vẽ một trò chơi nối tiếp 'bằng tay'. Bằng cách vẽ trò chơi, tôi muốn nói điều này:

nhập mô tả hình ảnh ở đây

Hiển thị điểm quyết định của người chơi, các hành động khả dụng và tiền chi trả.

Có cách nào tôi có thể làm điều này trong R hoặc một ngôn ngữ lập trình cấp cao tương tự không? Nói chính xác: Tôi không muốn vẽ các phương trình hình học, tôi muốn xác định một cấu trúc (người chơi, điểm, kết nối, tiền chi trả) và có chương trình vẽ nó.

Tôi hiện đang duyệt gói 'igraph' nhưng tôi gặp một số khó khăn khi dán nhãn vì vậy tôi tự hỏi liệu có cách nào tốt hơn không.


1
Nếu bạn coi LaTeX là "ngôn ngữ lập trình cấp cao tương tự", bạn có thể thấy câu trả lời cho câu hỏi này trên TeX.SE (và các câu hỏi liên quan khác ở đó) hữu ích.
Ilmari Karonen

Câu trả lời:


6

Mathematica có khả năng xây dựng đồ thị và vẽ.

Vì vậy, nếu bạn xây dựng biểu đồ trong Mathicala, thì bạn có thể vẽ biểu đồ bằng các cài đặt bạn chọn.

Trong Mathematica, bạn có thể sử dụng TreeGraph làm cách để xây dựng biểu đồ và TreePlot như một cách để vẽ biểu đồ. Ví dụ: đoạn mã sau tạo một cây với các nút được gắn nhãn theo tọa độ và có định dạng tương tự với những gì bạn muốn:

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]

nhập mô tả hình ảnh ở đây

Ngoài ra, lưu ý rằng có các gói đồ họa như TikZ trong Tex có khả năng vẽ biểu đồ rất mạnh. Tuy nhiên, TikZ được sử dụng chủ yếu trong các môi trường unix và sẽ không lưu trữ các cấu trúc dữ liệu hoặc thực hiện các phép tính như Mathicala. Nó hoàn toàn là một khả năng vẽ đồ họa.

Biểu đồ bạn đã sử dụng làm hình minh họa có phông chữ thường được sử dụng trong TeX, vì vậy nó có thể được sản xuất với gói TikZ hoặc gói TeX khác. Nếu bạn muốn một phương trình Mathicala trông giống như vậy, bạn có thể sử dụng hàm TradForm hoặc chỉ định rõ ràng phông chữ Máy tính hiện đại.


7

LaTeX với forest

Các forestgói LaTeX cho phép bạn vẽ cây trò chơi với cú pháp khá đơn giản. Sau khi sao chép mẫu được đặt sẵn vào phần mở đầu LaTeX, người ta có thể xây dựng cây trò chơi bằng []cú pháp lồng nhau , sau đó chương trình sẽ xử lý vị trí nút / khoảng cách / vv.

  • ưu điểm: khả năng tùy biến (bạn có thể chú thích cây trò chơi theo bất kỳ cách nào bạn muốn) và tính nhất quán của phông chữ / kiểu
  • Nhược điểm: nhập các yếu tố cây trò chơi (tên người chơi / hành động, tiền chi trả, bộ thông tin) vẫn có phần thủ công, đặc biệt nếu cây lớn; và đường cong học tập hơi dốc nếu bạn chưa quen với gói TikZ

Dưới đây là một ví dụ từ foresthướng dẫn ("Cây quyết định" trong Phần 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}

nhập mô tả hình ảnh ở đây

Lý thuyết trò chơi Explorer

Nhà thám hiểm lý thuyết trò chơi được phát triển bởi một vài người tại LSE. Nó cho phép người dùng nhập các trò chơi dạng ma trận hoặc xây dựng các trò chơi dạng rộng thông qua GUI. Nó cũng có vẻ như có khả năng chuyển đổi giữa các trò chơi hình thức bình thường và rộng rãi. Ngoài ra, phần mềm đi kèm với một bộ giải tìm kiếm sự cân bằng Nash của trò chơi được nhập.

  • ưu: GUI; người giải quyết; không cần cài đặt cục bộ; (giới hạn) tùy biến
  • Nhược điểm: không hỗ trợ chú thích; phông chữ / kiểu không nhất quán với phần còn lại của tài liệu

Ảnh chụp màn hình: nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


3

Nếu bạn sử dụng LaTeX, bạn cũng có thể vẽ cây trò chơi với istgamegói, dựa trên TikZ.

Hướng dẫn chứa rất nhiều ví dụ với mã đầy đủ bao gồm:

  • cây trò chơi theo bất kỳ hướng nào: hướng xuống, hướng lên, hướng đông, -45 độ, v.v.
  • ghi nhãn người chơi, nhãn hành động và tiền chi trả
  • nút quyết định, nút cơ hội, nút thiết bị đầu cuối
  • bộ thông tin khác nhau
  • mũi tên khác nhau trên cành (cảm ứng ngược)
  • nhiều hành động khác nhau
  • trò chơi con
  • trò chơi báo hiệu

Với istgamegói, bạn có thể vẽ cây trò chơi giống như bạn vẽ chúng bằng tay.

nhập mô tả hình ảnh ở đây

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

Điều này là rất tốt, cảm ơn bạn!
Giskard

1

nhập mô tả hình ảnh ở đây

Tôi đã sử dụng LaTeX với gói tikz. Đoạn mã sau được sử dụng để tạo Trò chơi Centepede này:

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

Đây là một ví dụ khác:

nhập mô tả hình ảnh ở đây

Mã cho trò chơi trên là:

\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

Để thuận tiện cho bạn

Nếu bạn quan tâm đến istgamegói, bạn có thể làm như thế này (để lấy ví dụ của Amit):

Đối với trò chơi rết:

nhập mô tả hình ảnh ở đây

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

Cấu trúc cây tự nó là đơn giản để vẽ.

nhập mô tả hình ảnh ở đây

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


Ví dụ khác:

nhập mô tả hình ảnh ở đây

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

Một lần nữa, cấu trúc cây là đơn giản để vẽ.

nhập mô tả hình ảnh ở đây

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

(THÊM) Nếu bạn muốn cây hướng về phía đông :

nhập mô tả hình ảnh ở đây

\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}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.