$title Matching Pennies (2-player zero sum game) set strategy1 /heads, tails/; set strategy2 /heads, tails/; alias(strategy1, strat1); alias(strategy2, strat2); table loss1(strategy1, strategy2) heads tails heads 1 -1 tails -1 1 ; table loss2(strategy1, strategy2) heads tails heads -1 1 tails 1 -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;