$title Matching Pennies Variant (Vos Savant Version) set strategy1 /heads, tails/; set strategy2 /heads, tails/; alias(strategy1, strat1); alias(strategy2, strat2); table loss1(strategy1, strategy2) heads tails heads 3 -2 tails -2 1 ; table loss2(strategy1, strategy2) heads tails heads -3 2 tails 2 -1 ; * compute the shifts scalar shift1, shift2; shift1 = smin((strategy1,strategy2), loss1(strategy1,strategy2)); * if the smallest element is nonpositive, shift so that the minimum becomes 1 if(shift1 <= 0.0, loss1(strategy1,strategy2) = loss1(strategy1,strategy2) - shift1 + 1; ); shift2 = smin((strategy1,strategy2), loss2(strategy1,strategy2)); if(shift2 <= 0.0, loss2(strategy1,strategy2) = loss2(strategy1,strategy2) - shift2 + 1; ); positive variable s(strategy1), t(strategy2); parameter optimal1(strategy1), optimal2(strategy2); equations eqs(strategy1), eqt(strategy2); eqs(strategy1).. sum(strategy2,loss1(strategy1,strategy2)*t(strategy2)) - 1 =g= 0; eqt(strategy2).. sum(strategy1,loss2(strategy1,strategy2)*s(strategy1)) - 1 =g= 0; model matchingpennies/eqs.s, eqt.t/; solve matchingpennies using mcp; * normalize t and s to get the optimal strategies optimal1(strategy1) = s.l(strategy1) / sum(strat1,s.l(strat1)); optimal2(strategy2) = t.l(strategy2) / sum(strat2,t.l(strat2)); display optimal1, optimal2; * calculated expected loss for Player 1 (remember to restore the loss matrix) scalar player1Loss; player1Loss = sum((strategy1,strategy2), optimal1(strategy1)*optimal2(strategy2)*(loss1(strategy1,strategy2)+shift1-1)); display "loss for Player 1 at equilibrium:", player1Loss;