見出し画像

②[男女の争い]ゲーム理論をClaudeとMathematicaで勉強

次は”男女の争い”

男女の争いをMathematicaで表現します。
男女2人は夜のデートにボクシングかダンスを見に行きます。
男性はボクシングが好き。女性はダンスが好きです。
お互い、好きなものを見に行きたいですが、 2人が一緒に行けるのが最も良いです。
2人がボクシングを見に行くと男性は+2,女性は+1
2人がダンスを見に行くと男性は+1,女性は+2
別々に見に行くと、二人共-1です。
ナッシュ均衡を求められますか?

Claudeへのプロンプト
お互いに好きな物を見に行きたいが一緒に居たい

これは… 答えが無いのでは?
コードは長いけど、生成AIが書いてくれるので理解できなくてもいい。
バグがあって動かなかったら、それを指摘すれば直してくれる。
私なんて結果以外は読む気も無い。
これが生成AI時代の勉強の仕方だと思う。

(*利得行列の定義*)
payoffMatrix = {{{2.0, 1.0}, {-1.0, -1.0}}, {{-1.0, -1.0}, {1.0, 
     2.0}}};

(*プレイヤーの戦略*)
strategies = {"ボクシング", "ダンス"};

(*純粋戦略ナッシュ均衡を見つける関数*)
findPureNashEquilibria[matrix_] := 
  Module[{n = Length[matrix], equilibria = {}}, 
   For[i = 1, i <= n, i++, 
    For[j = 1, j <= n, j++, 
     If[And[matrix[[i, j, 1]] == Max[matrix[[All, j, 1]]], 
       matrix[[i, j, 2]] == Max[matrix[[i, All, 2]]]], 
      AppendTo[equilibria, {i, j}]]]];
   equilibria];

(*混合戦略ナッシュ均衡を計算する関数*)
findMixedNashEquilibrium[matrix_] := 
  Module[{p, q},(*男性の混合戦略 p を求める*)
   q = NSolve[{q*(matrix[[1, 1, 2]] - matrix[[2, 1, 2]]) + (1 - 
            q)*(matrix[[1, 2, 2]] - matrix[[2, 2, 2]]) == 0, 
       0 <= q <= 1}, q, Reals][[1, 1, 2]];
   (*女性の混合戦略 q を求める*)
   p = NSolve[{p*(matrix[[1, 1, 1]] - matrix[[1, 2, 1]]) + (1 - 
            p)*(matrix[[2, 1, 1]] - matrix[[2, 2, 1]]) == 0, 
       0 <= p <= 1}, p, Reals][[1, 1, 2]];
   {p, q}];

(*純粋戦略ナッシュ均衡の計算*)
pureNashEquilibria = findPureNashEquilibria[payoffMatrix];

(*混合戦略ナッシュ均衡の計算*)
{pMale, pFemale} = findMixedNashEquilibrium[payoffMatrix];

(*結果の表示*)
Print["純粋戦略ナッシュ均衡:"];
For[k = 1, k <= Length[pureNashEquilibria], k++, 
 Print["男性: ", strategies[[pureNashEquilibria[[k, 1]]]], ", 女性: ", 
  strategies[[pureNashEquilibria[[k, 2]]]]]]

Print["\n混合戦略ナッシュ均衡:"];
Print["男性がボクシングを選ぶ確率: ", N[pMale, 4]];
Print["女性がボクシングを選ぶ確率: ", N[pFemale, 4]];

(*混合戦略での期待利得の計算*)
expectedPayoffMale = 
  pMale*pFemale*payoffMatrix[[1, 1, 1]] + 
   pMale*(1 - pFemale)*payoffMatrix[[1, 2, 1]] + (1 - pMale)*pFemale*
    payoffMatrix[[2, 1, 1]] + (1 - pMale)*(1 - pFemale)*
    payoffMatrix[[2, 2, 1]];
expectedPayoffFemale = 
  pMale*pFemale*payoffMatrix[[1, 1, 2]] + 
   pMale*(1 - pFemale)*payoffMatrix[[1, 2, 2]] + (1 - pMale)*pFemale*
    payoffMatrix[[2, 1, 2]] + (1 - pMale)*(1 - pFemale)*
    payoffMatrix[[2, 2, 2]];

Print["\n混合戦略での期待利得:"];
Print["男性の期待利得: ", N[expectedPayoffMale, 4]];
Print["女性の期待利得: ", N[expectedPayoffFemale, 4]];

純粋戦略ナッシュ均衡:

男性: ボクシング, 女性: ボクシング

男性: ダンス, 女性: ダンス


混合戦略ナッシュ均衡:

男性がボクシングを選ぶ確率: 0.4

女性がボクシングを選ぶ確率: 0.6


混合戦略での期待利得:

男性の期待利得: 0.2

女性の期待利得: 0.2

純粋戦略ナッシュ均衡:
男性: ボクシング, 女性: ボクシング
男性: ダンス, 女性: ダンス

混合戦略ナッシュ均衡:
男性がボクシングを選ぶ確率: 0.4
女性がボクシングを選ぶ確率: 0.6

混合戦略での期待利得:
男性の期待利得: 0.2
女性の期待利得: 0.2

Claudeの回答

解説 なるほどね… 1回じゃないからトータルで考えれば良いのか。
本で読むとこの辺りが面倒な計算式になってモヤっとしていた。
私は計算さえ出来ればいいので、この解説の方がわかりやすい。
混合戦略か… この辺りもClaudeは勝手に答えを出してくれる。
つまり、一人で行動するときがあってもいいのね。
深いな、ゲーム理論!

このコードは「男女の争い」ゲームをMathematicaで表現し、ナッシュ均衡を求めています。
結果を解釈すると:混合戦略ナッシュ均衡:
男性は2/3の確率でボクシング、1/3の確率でダンスを選びます。
女性は1/3の確率でボクシング、2/3の確率でダンスを選びます。
この戦略での期待利得は両者とも2/3です。

純粋戦略ナッシュ均衡:
(ボクシング, ボクシング):両者がボクシングを選ぶ
(ダンス, ダンス):両者がダンスを選ぶ

この結果は、このゲームに3つのナッシュ均衡があることを示しています:両者がボクシングを見に行く
両者がダンスを見に行く
混合戦略(上記の確率で選択する)

純粋戦略の2つのナッシュ均衡は、両者が同じ活動を選ぶ場合に発生します。これは「一緒に行動する」ことの重要性を反映しています。混合戦略均衡は、両者が相手の行動を予測できない状況で発生します。

この結果は、カップルが異なる嗜好を持ちながらも、一緒に行動することを重視する現実の状況をよく表現しています。

この記事が気に入ったらサポートをしてみませんか?