>>> SLG.solution().game_value() < -ABS_TOL
True
- Tests
- -----
-
The following two games are problematic numerically, but we
should be able to solve them::
- >>> from dunshire import *
- >>> L = [[-0.95237953890954685221, 1.83474556206462535712],
- ... [ 1.30481749924621448500, 1.65278664543326403447]]
- >>> K = NonnegativeOrthant(2)
- >>> e1 = [0.95477167524644313001, 0.63270781756540095397]
- >>> e2 = [0.39633793037154141370, 0.10239281495640320530]
- >>> SLG = SymmetricLinearGame(L, K, e1, e2)
- >>> print(SLG.solution())
- Game value: 18.767...
- Player 1 optimal:
- [-0.000...]
- [ 9.766...]
- Player 2 optimal:
- [1.047...]
- [0.000...]
+ >>> from dunshire import *
+ >>> L = [[-0.95237953890954685221, 1.83474556206462535712],
+ ... [ 1.30481749924621448500, 1.65278664543326403447]]
+ >>> K = NonnegativeOrthant(2)
+ >>> e1 = [0.95477167524644313001, 0.63270781756540095397]
+ >>> e2 = [0.39633793037154141370, 0.10239281495640320530]
+ >>> SLG = SymmetricLinearGame(L, K, e1, e2)
+ >>> print(SLG.solution())
+ Game value: 18.767...
+ Player 1 optimal:
+ [-0.000...]
+ [ 9.766...]
+ Player 2 optimal:
+ [1.047...]
+ [0.000...]
::
- >>> from dunshire import *
- >>> L = [[1.54159395026049472754, 2.21344728574316684799],
- ... [1.33147433507846657541, 1.17913616272988108769]]
- >>> K = NonnegativeOrthant(2)
- >>> e1 = [0.39903040089404784307, 0.12377403622479113410]
- >>> e2 = [0.15695181142215544612, 0.85527381344651265405]
- >>> SLG = SymmetricLinearGame(L, K, e1, e2)
- >>> print(SLG.solution())
- Game value: 24.614...
- Player 1 optimal:
- [ 6.371...]
- [-0.000...]
- Player 2 optimal:
- [2.506...]
- [0.000...]
+ >>> from dunshire import *
+ >>> L = [[1.54159395026049472754, 2.21344728574316684799],
+ ... [1.33147433507846657541, 1.17913616272988108769]]
+ >>> K = NonnegativeOrthant(2)
+ >>> e1 = [0.39903040089404784307, 0.12377403622479113410]
+ >>> e2 = [0.15695181142215544612, 0.85527381344651265405]
+ >>> SLG = SymmetricLinearGame(L, K, e1, e2)
+ >>> print(SLG.solution())
+ Game value: 24.614...
+ Player 1 optimal:
+ [ 6.371...]
+ [-0.000...]
+ Player 2 optimal:
+ [2.506...]
+ [0.000...]
"""
try:
# Oops, CVXOPT tried to take the square root of a
# negative number. Report some details about the game
# rather than just the underlying CVXOPT crash.
+ printing.options['dformat'] = options.DEBUG_FLOAT_FORMAT
raise PoorScalingException(self)
else:
raise error
# that CVXOPT is convinced the problem is infeasible (and that
# cannot happen).
if soln_dict['status'] in ['primal infeasible', 'dual infeasible']:
+ printing.options['dformat'] = options.DEBUG_FLOAT_FORMAT
raise GameUnsolvableException(self, soln_dict)
# The "optimal" and "unknown" results, we actually treat the
# it) because otherwise CVXOPT might return "unknown" and give
# us two points in the cone that are nowhere near optimal.
if abs(p1_value - p2_value) > 2*options.ABS_TOL:
+ printing.options['dformat'] = options.DEBUG_FLOAT_FORMAT
raise GameUnsolvableException(self, soln_dict)
# And we also check that the points it gave us belong to the
# cone, just in case...
if (p1_optimal not in self._K) or (p2_optimal not in self._K):
+ printing.options['dformat'] = options.DEBUG_FLOAT_FORMAT
raise GameUnsolvableException(self, soln_dict)
# For the game value, we could use any of: