<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 What is Gambit ?
Gambitとは戦略型ゲームや展開型ゲームに関する分析を手助けしてくれるゲーム理論分析ライブラリーです。GUIにも優れており、コマンドラインを使わずに直感的にもゲーム理論分析が出来るという特徴も持ちます。
そして僕らPythonistaとしてはPythonのライブラリーとして使用する事が出来るということが最も大きなメリットとなります。Pythonのゲーム理論分析ライブラリは他にも少しだけ存在するようですが、おそらくこのGambitが一番整っていると思われます。
また、GambitのライセンスはGNU General Public Licenseのもとリリースされています。
How to install ?
①Downloadページから最新版のgambitの.tar.gzファイルをダウンロードして展開する。  
②ターミナルで展開したフォルダをディレクトリに変更し、
./configure
make
sudo make install
を入力する。
③  その後、
cd src/python
python setup.py build
sudo python setup.py install
を入力するとインストール完了。  
④用意されているテストを試してみる。
cd src/python/gambit/tests
nosetests
なお、詳しい説明についてはGambitホームページ(英語)に書かれておりました。  
Let's use Gambit !
Gambitのチュートリアルに沿って、実際に動かしてみる。
Step1:  展開型ゲーム(extensive game)
Game.new_tree()
Game.new_tree()で新しくゲームを生成する。このときのプレイヤー人数は0人。
Step2:  title
title属性によりゲームタイトルを入力出来る。
Step3:  players
players属性によりプレイヤーの設定が出来ます。len()を使って人数を確認したり、add()でプレイヤーを増やすことが出来ます。
Step4:  それぞれのplayersはlabel属性を持ち、プレイヤーの名前を確認することが出来ます。
Step5:  Game.playersはpythonのリストのような扱い方もできます。
Step6:  戦略型ゲーム(strategic game)
ここでは2x2の囚人のジレンマを例として取り扱う。
Game.new_table()
新しいゲームを生成する。それぞれのプレイヤーにおける戦略の数の組を整数で構成されるリストとして引く。
Step7:  strategies
playersが持つstrategiesはプレイヤーが持つ全ての戦略について並べてくれる。
Step8:  利得表はarrayのような形でアクセスできます。
g[i, j]は最初のプレイヤーがi番目の戦略を、次のプレイヤーがj番目の戦略を取った時の利得となる。
Step9:  ゲームの読み込み(Reading a game from a file)
Game.read_game()
Gambitにもとから入っているサンプルファイルをGame.read_game()を使って読み込むことが出来る。
ためしにmixed_strategy.nfgを読み込んでみる。
Step10:  contingencies
contingencies属性は純粋戦略のすべての組となっている。
Step11:  混合戦略と行動戦略(Mixed strategy and behavior profiles)
混合戦略(Mixed strategy)
mixed_strategy_profile()
mixed_strategy_profile()によって各プレイヤーの純戦略における確率分布を表すことが出来る。
Step12:  payoff()
payoff()によってプレイヤーに対する期待利得を得ることが出来る。
Step13:  strategy_value()
strategy_value()によってプレイヤーが与えられた戦略を行うときの期待利得を得る。
Step14:  行動戦略(behavior strategy)
行動戦略オブジェクトを使うためには、ゲームは展開型ゲームである必要がある。
おそらくtest_gamesの中で拡張子がnfgのものは戦略型、efgのものは展開型である。
ここでは、sample_extensive_game.efgを読み込む。
p "1" 1 1 "" { "1" "2" } 0は、おそらくpoint"1"における情報集合1の1番さんの行動プロファイル[1, 2]という意味で、
t "" 1 "" { 2, 3 }は、おそらくtop"1"における利得は[2, 3]という意味だと思われる。
Step15:  mixed_behavior_profile()
それぞれの情報集合(information set)における行動の確率分布を表す。
行動プロファイルの初期値はそれぞれの情報集合において一様分布で導かれる。
Step16:  mixed_strategy_profile()のときと扱い方はほとんど変わらないが、infosetsが増えたところを注意して扱う必要がある。
Step17:  ナッシュ均衡
戦略型ゲーム
mixed_strategy.nfgのゲームを例に扱う。
Player1は戦略0を確率1で行うが、Player2は戦略0を確率0.5以上で混合戦略をとる。
Step18:  nash.ExternalEnumPureSolver()
純戦略における解を返す。
Step19:  nash.ExternalEnumMixedSolver()
混合戦略における解を返す。
この場合は解となる均衡点の組の端点である2つの均衡点を返している。
Step20:  展開型ゲーム
sample_extensive_game.efgを例として扱う。
<ASSISTANT_TASK:>
Python Code:
import gambit
Explanation: What is Gambit ?
Gambitとは戦略型ゲームや展開型ゲームに関する分析を手助けしてくれるゲーム理論分析ライブラリーです。GUIにも優れており、コマンドラインを使わずに直感的にもゲーム理論分析が出来るという特徴も持ちます。
そして僕らPythonistaとしてはPythonのライブラリーとして使用する事が出来るということが最も大きなメリットとなります。Pythonのゲーム理論分析ライブラリは他にも少しだけ存在するようですが、おそらくこのGambitが一番整っていると思われます。
また、GambitのライセンスはGNU General Public Licenseのもとリリースされています。
How to install ?
①Downloadページから最新版のgambitの.tar.gzファイルをダウンロードして展開する。  
②ターミナルで展開したフォルダをディレクトリに変更し、
./configure
make
sudo make install
を入力する。
③  その後、
cd src/python
python setup.py build
sudo python setup.py install
を入力するとインストール完了。  
④用意されているテストを試してみる。
cd src/python/gambit/tests
nosetests
なお、詳しい説明についてはGambitホームページ(英語)に書かれておりました。  
Let's use Gambit !
Gambitのチュートリアルに沿って、実際に動かしてみる。
End of explanation
g = gambit.Game.new_tree()
len(g.players)
Explanation: 展開型ゲーム(extensive game)
Game.new_tree()
Game.new_tree()で新しくゲームを生成する。このときのプレイヤー人数は0人。
End of explanation
str(g)
g.title = "A simple poker example"
g.title
str(g)
Explanation: title
title属性によりゲームタイトルを入力出来る。
End of explanation
p = g.players.add("Alice")
p
Explanation: players
players属性によりプレイヤーの設定が出来ます。len()を使って人数を確認したり、add()でプレイヤーを増やすことが出来ます。
End of explanation
p.label
len(g.players)
Explanation: それぞれのplayersはlabel属性を持ち、プレイヤーの名前を確認することが出来ます。
End of explanation
g.players[0]
g.players
Explanation: Game.playersはpythonのリストのような扱い方もできます。
End of explanation
g = gambit.Game.new_table([2,2])
g.title = "A prisoner's dilemma game"
g.players[0].label = "Alphonse"
g.players[1].label = "Gaston"
g
Explanation: 戦略型ゲーム(strategic game)
ここでは2x2の囚人のジレンマを例として取り扱う。
Game.new_table()
新しいゲームを生成する。それぞれのプレイヤーにおける戦略の数の組を整数で構成されるリストとして引く。
End of explanation
g.players[0].strategies
len(g.players[0].strategies)
g.players[0].strategies[0].label = "Cooperate"
g.players[0].strategies[1].label = "Defect"
g.players[0].strategies
Explanation: strategies
playersが持つstrategiesはプレイヤーが持つ全ての戦略について並べてくれる。
End of explanation
g[0,0][0] = 8
g[0,0][1] = 8
g[0,1][0] = 2
g[0,1][1] = 10
g[1,0][0] = 10
g[1,1][1] = 2
g[1,0][1] = 2
g[1,1][0] = 5
g[1,1][1] = 5
g
Explanation: 利得表はarrayのような形でアクセスできます。
g[i, j]は最初のプレイヤーがi番目の戦略を、次のプレイヤーがj番目の戦略を取った時の利得となる。
End of explanation
g = gambit.Game.read_game("test_games/mixed_strategy.nfg")
g
Explanation: ゲームの読み込み(Reading a game from a file)
Game.read_game()
Gambitにもとから入っているサンプルファイルをGame.read_game()を使って読み込むことが出来る。
ためしにmixed_strategy.nfgを読み込んでみる。
End of explanation
list(g.contingencies)
for profile in g.contingencies:
    print profile, g[profile][0], g[profile][1]
Explanation: contingencies
contingencies属性は純粋戦略のすべての組となっている。
End of explanation
p = g.mixed_strategy_profile()
list(p)
p[g.players[0]]
p[g.players[1].strategies[0]]
Explanation: 混合戦略と行動戦略(Mixed strategy and behavior profiles)
混合戦略(Mixed strategy)
mixed_strategy_profile()
mixed_strategy_profile()によって各プレイヤーの純戦略における確率分布を表すことが出来る。
End of explanation
p.payoff(g.players[0])
Explanation: payoff()
payoff()によってプレイヤーに対する期待利得を得ることが出来る。
End of explanation
p.strategy_value(g.players[0].strategies[2])
Explanation: strategy_value()
strategy_value()によってプレイヤーが与えられた戦略を行うときの期待利得を得る。
End of explanation
g = gambit.Game.read_game("test_games/sample_extensive_game.efg")
g
Explanation: 行動戦略(behavior strategy)
行動戦略オブジェクトを使うためには、ゲームは展開型ゲームである必要がある。
おそらくtest_gamesの中で拡張子がnfgのものは戦略型、efgのものは展開型である。
ここでは、sample_extensive_game.efgを読み込む。
p "1" 1 1 "" { "1" "2" } 0は、おそらくpoint"1"における情報集合1の1番さんの行動プロファイル[1, 2]という意味で、
t "" 1 "" { 2, 3 }は、おそらくtop"1"における利得は[2, 3]という意味だと思われる。
End of explanation
p = g.mixed_behavior_profile()
list(p)
Explanation: mixed_behavior_profile()
それぞれの情報集合(information set)における行動の確率分布を表す。
行動プロファイルの初期値はそれぞれの情報集合において一様分布で導かれる。
End of explanation
p[g.players[0]]
p[g.players[0].infosets[0]]
p[g.players[0].infosets[0].actions[0]]
Explanation: mixed_strategy_profile()のときと扱い方はほとんど変わらないが、infosetsが増えたところを注意して扱う必要がある。
End of explanation
g = gambit.Game.read_game("test_games/mixed_strategy.nfg")
g
Explanation: ナッシュ均衡
戦略型ゲーム
mixed_strategy.nfgのゲームを例に扱う。
Player1は戦略0を確率1で行うが、Player2は戦略0を確率0.5以上で混合戦略をとる。
End of explanation
solver = gambit.nash.ExternalEnumPureSolver()
solver.solve(g)
Explanation: nash.ExternalEnumPureSolver()
純戦略における解を返す。
End of explanation
solver = gambit.nash.ExternalEnumMixedSolver()
solver.solve(g)
solver = gambit.nash.ExternalLogitSolver()
solver.solve(g)
Explanation: nash.ExternalEnumMixedSolver()
混合戦略における解を返す。
この場合は解となる均衡点の組の端点である2つの均衡点を返している。
End of explanation
g = gambit.Game.read_game("test_games/sample_extensive_game.efg")
g
solver = gambit.nash.ExternalLCPSolver()
solver.solve(g)
solver.solve(g, use_strategic=True)
solver.solve(g)
Explanation: 展開型ゲーム
sample_extensive_game.efgを例として扱う。
End of explanation
<END_TASK>