見出し画像

⑪[シュタッケルベルク複占市場]ゲーム理論をClaudeとMathematicaで勉強

クールノー複占は線形な問題だったが、今度は非線形で展開型ゲームになっている。私は複雑な数式の塊で書きたくない。こんなんでいいかな?


ゲーム理論をMathematicaの基本関数で解いています。 シュタッケルベルク複占市場のモデルを展開型ゲームの完全情報ゲームで書いてください。ナッシュ均衡を求めてください。

プロンプト

シュタッケルベルク複占市場モデルを展開型ゲームの完全情報ゲームとして定式化し、Mathematicaで解くことは興味深い課題です。このモデルを実装し、ナッシュ均衡を求めるコードを作成しましょう。

回答
(* シュタッケルベルク複占市場モデルのパラメータ設定 *)
a = 100; (* 需要関数の切片 *)
b = 1;   (* 需要関数の傾き *)
c = 10;  (* 限界費用 *)

(* リーダー(企業1)の利潤関数 *)
profit1[q1_, q2_] := (a - b*(q1 + q2) - c)*q1;

(* フォロワー(企業2)の利潤関数 *)
profit2[q1_, q2_] := (a - b*(q1 + q2) - c)*q2;

(* フォロワーの反応関数 *)
reactionFunction = Solve[D[profit2[q1, q2], q2] == 0, q2][[1, 1, 2]];

(* リーダーの最適化問題 *)
leaderOptimization = Maximize[{profit1[q1, reactionFunction], q1 >= 0}, q1];

(* ナッシュ均衡の計算 *)
q1Equilibrium = q1 /. leaderOptimization[[2]];
q2Equilibrium = reactionFunction /. q1 -> q1Equilibrium;

(* 結果の表示 *)
Print["リーダー(企業1)の均衡生産量: ", q1Equilibrium];
Print["フォロワー(企業2)の均衡生産量: ", q2Equilibrium];
Print["リーダー(企業1)の利潤: ", profit1[q1Equilibrium, q2Equilibrium]];
Print["フォロワー(企業2)の利潤: ", profit2[q1Equilibrium, q2Equilibrium]];

教科書では身の毛がよだつ数式だったが、そうでもないな。

このコードでは、シュタッケルベルク複占市場モデルを実装し、ナッシュ均衡を求めています。主な手順は以下の通りです:モデルのパラメータ(需要関数の切片と傾き、限界費用)を設定します。
リーダー(企業1)とフォロワー(企業2)の利潤関数を定義します。
フォロワーの反応関数を導出します。
リーダーの最適化問題を解きます。
ナッシュ均衡を計算し、結果を表示します。

このコードを実行すると、均衡生産量と各企業の利潤が得られます。必要に応じて、パラメータを変更して異なるシナリオをシミュレートすることもできます。

回答

リーダー(企業1)の均衡生産量: 45
フォロワー(企業2)の均衡生産量: 45/2
リーダー(企業1)の利潤: 2025/2
フォロワー(企業2)の利潤: 2025/4

実行結果

実行結果を振り返って理解すると、先行する主力企業が製品を市場に出す。後攻の企業もその様子を見ながら市場参入する。。。 ん?
(生成AIを使って勉強するとこういう事が出来る)

先攻企業だけが市場ニーズまで量を増やせば良いような気もしますが

質問プロンプト

おっしゃる通りです。シュタッケルベルク複占市場モデルの特徴的な点について、もう少し詳しく説明しましょう。

先攻企業(リーダー)が市場需要をすべて満たすような戦略を取ることは、一見理想的に見えますが、実際にはそうではありません。
その理由を説明します:
戦略的相互作用: シュタッケルベルクモデルでは、先攻企業と後攻企業(フォロワー)の間に戦略的相互作用があります。先攻企業が生産量を決定した後、後攻企業がそれを観察して自社の生産量を決定します。

後攻企業の反応: 先攻企業が市場需要をすべて満たそうとしても、後攻企業は必ずゼロ以外の生産量を選択します(限界費用が十分に低い場合)。これは、後攻企業にとって少量でも生産することで利益が得られるためです。

利潤最大化: 先攻企業の目的は市場シェアの最大化ではなく、利潤の最大化です。市場需要をすべて満たそうとすると、価格が大きく下落し、利潤が減少する可能性があります。

均衡状態: ナッシュ均衡では、どちらの企業も一方的に戦略を変更することで利潤を増やせない状態になります。

これらの要因により、先攻企業は市場需要の一部を後攻企業に残すことで、自社の利潤を最大化できます。

この点をより明確にするために、先ほどのモデルを少し修正して、先攻企業が市場需要をすべて満たそうとした場合と、最適戦略を取った場合を比較してみましょう。

回答

うわー、深いな。

(* シュタッケルベルク複占市場モデルのパラメータ設定 *)
a = 100; (* 需要関数の切片 *)
b = 1;   (* 需要関数の傾き *)
c = 10;  (* 限界費用 *)

(* リーダー(企業1)の利潤関数 *)
profit1[q1_, q2_] := (a - b*(q1 + q2) - c)*q1;

(* フォロワー(企業2)の利潤関数 *)
profit2[q1_, q2_] := (a - b*(q1 + q2) - c)*q2;

(* フォロワーの反応関数 *)
reactionFunction = Solve[D[profit2[q1, q2], q2] == 0, q2][[1, 1, 2]];

(* リーダーの最適化問題 *)
leaderOptimization = Maximize[{profit1[q1, reactionFunction], q1 >= 0}, q1];

(* ナッシュ均衡の計算 *)
q1Equilibrium = q1 /. leaderOptimization[[2]];
q2Equilibrium = reactionFunction /. q1 -> q1Equilibrium;

(* 市場需要をすべて満たそうとした場合 *)
q1FullDemand = (a - c)/b;
q2FullDemand = reactionFunction /. q1 -> q1FullDemand;

(* 結果の比較 *)
Print["最適戦略:"];
Print["リーダー(企業1)の生産量: ", q1Equilibrium];
Print["フォロワー(企業2)の生産量: ", q2Equilibrium];
Print["リーダー(企業1)の利潤: ", profit1[q1Equilibrium, q2Equilibrium]];
Print["フォロワー(企業2)の利潤: ", profit2[q1Equilibrium, q2Equilibrium]];
Print["\n市場需要をすべて満たそうとした場合:"];
Print["リーダー(企業1)の生産量: ", q1FullDemand];
Print["フォロワー(企業2)の生産量: ", q2FullDemand];
Print["リーダー(企業1)の利潤: ", profit1[q1FullDemand, q2FullDemand]];
Print["フォロワー(企業2)の利潤: ", profit2[q1FullDemand, q2FullDemand]];

計算結果を見ると、先攻企業が市場の全ニーズを満たそうとすると利益が限界まで下落して利益が0になる事を示している。深いな。。。

このコードでは、以下の2つのシナリオを比較しています:先攻企業が最適戦略を取る場合(ナッシュ均衡)
先攻企業が市場需要をすべて満たそうとする場合

結果を実行して比較すると、以下のことがわかります:最適戦略の場合、先攻企業は市場需要の一部を後攻企業に残します。
市場需要をすべて満たそうとすると、先攻企業の利潤は最適戦略の場合よりも低くなります。
後攻企業は、先攻企業が市場需要をすべて満たそうとしても、なお生産を行います。

この比較により、先攻企業が市場需要をすべて満たそうとするのではなく、戦略的に生産量を決定することで、より高い利潤を得られることが示されます。

解説

いいなと思ったら応援しよう!