Overview

Dunshire is a library for solving linear games over symmetric cones. The notion of a symmetric linear (cone) game was introduced by Gowda and Ravindran [GowdaRav], and extended by Orlitzky to asymmetric cones with two interior points.

The state-of-the-art is that only symmetric games can be solved efficiently, and thus the linear games supported by Dunshire are a compromise between the two: the cones are symmetric, but the players get to choose two interior points.

In this game, we have two players who are competing for a “payoff.” There is a symmetric cone \(K\), a linear transformation \(L\) on the space in which \(K\) lives, and two points \(e_{1}\) and \(e_{2}\) in the interior of \(K\). The players make their “moves” by choosing points from two strategy sets. Player one chooses an \(\bar{x}\) from

\[\Delta_{1} = \left\lbrace x \in K\ \middle|\ \left\langle x,e_{2} \right\rangle = 1 \right\rbrace\]

and player two chooses a \(\bar{y}\) from

\[\Delta_{2} = \left\lbrace y \in K\ \middle|\ \left\langle y,e_{1} \right\rangle = 1 \right\rbrace.\]

That ends the turn, and player one is paid \(\left\langle L\left(\bar{x}\right),\bar{y}\right\rangle\) out of player two’s pocket. As is usual in game theory, we suppose that player one wants to maximize his worst-case payoff, and that player two wants to minimize his worst-case payout. In other words, player one wants to solve the optimization problem,

\[\text{find } \underset{x \in \Delta_{1}}{\max}\ \underset{y\in \Delta_{2}}{\min}\ \left\langle L\left(x\right),y \right\rangle\]

while player two tries to (simultaneously) solve a similar problem,

\[\text{find } \underset{y\in \Delta_{2}}{\min}\ \underset{x \in \Delta_{1}}{\max}\ \left\langle L\left(x\right),y \right\rangle.\]

There is at least one pair \(\left(\bar{x},\bar{y}\right)\) that solves these problems optimally, and Dunshire can find it. The optimal payoff, called the value of the game, is unique. At the moment, the symmetric cone \(K\) can be either the nonnegative orthant or the Lorentz “ice cream” cone in \(\mathbb{R}^{n}\). Here are two of the simplest possible examples, showing off the ability to solve a game over both of those cones.

First, we use the nonnegative orthant in \(\mathbb{R}^{2}\):

>>> from dunshire import *
>>> K = NonnegativeOrthant(2)
>>> L = [[1,0],[0,1]]
>>> e1 = [1,1]
>>> e2 = e1
>>> G = SymmetricLinearGame(L,K,e1,e2)
>>> print(G.solution())
Game value: 0.500...
Player 1 optimal:
  [0.500...]
  [0.500...]
Player 2 optimal:
  [0.500...]
  [0.500...]

Next we try the Lorentz ice-cream cone in \(\mathbb{R}^{2}\):

>>> from dunshire import *
>>> K = IceCream(2)
>>> L = [[1,0],[0,1]]
>>> e1 = [1,0]
>>> e2 = e1
>>> G = SymmetricLinearGame(L,K,e1,e2)
>>> print(G.solution())
Game value: 1.000...
Player 1 optimal:
  [1.000...]
  [0.000...]
Player 2 optimal:
  [1.000...]
  [0.000...]

Note that these solutions are not unique, although the game values are.