今回はClaudeもかなり苦労した。3回ほどコードを修正。
混合戦略の理想値を計算してもらう。
税関の利得が難しかったので、何も指定しないとどうなるのかやってみたが流石に数値を指定しないと答えが出ない。前の湖とかは適当な数値を入れてくれたのだが。
今回はGeminiではどうしても動いてくれなかった。
その後も試したが、この利得行列は難しいらしい。。。
(* 利得行列を定義 *)
payoffMatrix = {
{{-1, 0}, {-35, 9}}, (* 税関が検査する場合の利得 *)
{{-10, 10}, {15, 9}} (* 税関が検査しない場合の利得 *)
};
(* 混合戦略ナッシュ均衡を手動で計算 *)
calculateEquilibrium[matrix_] := Module[{p, q},
(* 旅行者の無差別条件 *)
eq1 = 0*p + 9*p == 10*(1-p) + 9*(1-p);
(* 税関の無差別条件 *)
eq2 = -1*q + (-35)*(1-q) == -10*q + 15*(1-q);
(* 連立方程式を解く *)
sol = Solve[{eq1, eq2}, {p, q}];
(* 結果を返す *)
{q, p} /. sol[[1]]
]
(* ナッシュ均衡を計算 *)
equilibrium = calculateEquilibrium[payoffMatrix];
(* 結果の表示 *)
Print["ナッシュ均衡: ", equilibrium];
(* 均衡戦略の解釈 *)
{inspectProb, legalProb} = N[equilibrium];
notInspectProb = 1 - inspectProb;
illegalProb = 1 - legalProb;
(* 結果を分かりやすく表示 *)
Print["税関が検査を実施する確率: ", Round[inspectProb * 100, 0.01], "%"];
Print["税関が検査を実施しない確率: ", Round[notInspectProb * 100, 0.01], "%"];
Print["旅行者が合法輸入を選択する確率: ", Round[legalProb * 100, 0.01], "%"];
Print["旅行者が違法輸入を選択する確率: ", Round[illegalProb * 100, 0.01], "%"];
(* 税関の最適な検査頻度を計算 *)
inspectionFrequency = 1 / inspectProb;
Print["税関は平均して ", Round[inspectionFrequency, 0.1], " 人に1回の頻度で検査をすべきです。"];
(* 期待利得の計算 *)
customsExpectedPayoff = inspectProb * (legalProb * -1 + illegalProb * -35) +
notInspectProb * (legalProb * -10 + illegalProb * 15);
travellerExpectedPayoff = legalProb * (inspectProb * 0 + notInspectProb * 10) +
illegalProb * (inspectProb * 9 + notInspectProb * 9);
Print["税関の期待利得: ", Round[customsExpectedPayoff, 0.01]];
Print["旅行者の期待利得: ", Round[travellerExpectedPayoff, 0.01]];
教科書の答えと違うんで、後で要検証。
思い直して、Mathematicaでなくても計算できるんじゃないかと思う。
え” 計算できるじゃん… すげーな。
あれ?教科書と答えが合わない。こういう場合は指摘する。
やっぱりMathematica使った方が安心か。