Game Theory - Solve dual problem given primal solution and slack variables

604 Views Asked by At

I have the following two-player zero-sum game matrix (with payoffs to the row player):

$$ \begin{array}{rrrr} -5 & 3 & 1 & 8 \\ 5 & 5 & 4 & 6 \\ -4 & 6 & 0 & 5 \end{array} $$

I've converted this game matrix into the following primal linear program (which corresponds to the column player's objective):

Minimize $c^Tx = 1*x_0+0*x_1+0*x_2+0*x_3+0*x_4$

Subject to:

Row player best response constraints:

$-1*x_0-5*x_1+3*x_2+1*x_3+8*x_4 \le 0$

$-1*x_0+5*x_1+5*x_2+4*x_3+6*x_4 \le 0$

$-1*x_0-4*x_1+6*x_2+0*x_3+5*x_4 \le 0$

Probabilities sum to 1:

$0*x_0+1*x_1+1*x_2+1*x_3+1*x_4 = 1$

Where $x_0$ is the game's value (to row player) and $(x_1, x_2, x_3, x_4)$ represent the weights (summing to 1) that the column player should choose these actions in an optimal strategy.

Running it through a standard simplex solver (e.g. SciPy's linprog function), the optimal solution $x^*=(4,0,0,1,0)$ (i.e. the game value is 4 for row player, and column player should only play the the third column). The optimization solver I use also that the slack variables are $(3,0,4)$. I interpret these slack variables as the error row player would make by choosing rows 1 and 3 given the optimal strategy of column player.

Question

Given a general optimal solution $x^*$ and the value of the slack variables as above, how do I solve the dual for row player's optimal (in this case, pure) strategy without fully constructing the dual problem and solving row player's optimization problem explicitly?

What have I tried?

I've tried using the fact that the primal and dual would have the same objective function value (i.e. game value). Thus, $c^Tx = b^Ty$. But that's where I get a bit stuck, as I don't think $b^T$ has an inverse (it's not square) that would allow me to solve for $y$ (row player's strategy).

I've also read most of the posts on this site re: duality, and can't seem to apply them appropriately to the above instance.

Other stuff that may help

Row player's problem (which i believe is just the dual of the above).

Maximize $b^Ty = 1*y_0+0*y_1+0*y_2+0*y_3$

Subject to:

Column player best response constraints:

$-1*y_0-5*y_1+5*y_2-4*y_3 \ge 0$

$-1*y_0+3*y_1+5*y_2+6*y_3 \ge 0$

$-1*y_0+1*y_1+4*y_2+0*y_3 \ge 0$

$-1*y_0+8*y_1+6*y_2+5*y_3 \ge 0$

Probabilities sum to 1:

$0*y_0+1*y_1+1*y_2+1*y_3 = 1$

Solution $y^*=(4,0,1,0)$, slack is $(1, 1, 0, 2)$.