⑪[シュタッケルベルク複占市場]ゲーム理論をClaudeと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]];
教科書では身の毛がよだつ数式だったが、そうでもないな。
実行結果を振り返って理解すると、先行する主力企業が製品を市場に出す。後攻の企業もその様子を見ながら市場参入する。。。 ん?
(生成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になる事を示している。深いな。。。