4. Come up with a fast heuristic (like making nu huge and taking e1 as
our point) that finds a primal feasible point.
+5. Fix the solve failures that we get in the translation tests. For example,
+
+ ERROR: test_translation_orthant (test.symmetric_linear_game_test.
+ SymmetricLinearGameTest)
+ ----------------------------------------------------------------------
+ Traceback (most recent call last):
+ File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
+ line 374, in test_translation_orthant
+ self.assert_translation_works(L, K, e1, e2)
+ File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
+ line 361, in assert_translation_works
+ value2 = game2.solution().game_value()
+ File "/home/mjo/src/dunshire/dunshire/games.py", line 458, in solution
+ raise GameUnsolvableException(self, soln_dict)
+ dunshire.errors.GameUnsolvableException: Solution failed with result
+ "unknown."
+ The linear game (L, K, e1, e2) where
+ L = [352.0763359 267.0812248 300.8004888 307.8135853]
+ [429.8303135 324.8322824 361.6866231 372.1748983]
+ [390.6592961 286.8039007 320.7409227 330.1854235]
+ [316.0538913 247.7440818 276.9063990 274.9871772],
+ K = Nonnegative orthant in the real 4-space,
+ e1 = [7.7040001]
+ [9.4324457]
+ [8.3882819]
+ [6.8908420],
+ e2 = [8.5054325]
+ [6.4738132]
+ [7.2452437]
+ [7.3307357].
+ CVXOPT returned:
+ dual infeasibility: 0.053819211766446585
+ dual objective: -5.369636805607942
+ dual slack: 2.105806354638527e-17
+ gap: 2.6823510532777825e-16
+ iterations: 11
+ primal infeasibility: 4.71536776301359e-15
+ primal objective: -5.3799616179161
+ primal slack: 1.0328930392495263e-17
+ relative gap: 4.985818196816016e-17
+ residual as dual infeasibility certificate: 0.18587493201993227
+ residual as primal infeasibility certificate: None
+ s:
+ [0.0115539]
+ [0.0000000]
+ [0.0000000]
+ [0.1230066]
+ [0.4837410]
+ [0.0000000]
+ [0.0000000]
+ [0.4044349]
+ status: unknown
+ x:
+ [ 5.3799616]
+ [ 0.0115539]
+ [-0.0000000]
+ [-0.0000000]
+ [ 0.1230066]
+ y:
+ [5.3696368]
+ z:
+ [0.0000000]
+ [0.4176330]
+ [0.6007564]
+ [0.0000000]
+ [0.0000000]
+ [0.0889310]
+ [0.0191076]
+ [0.0000000]
+
+6. Fix the math domain errors that sometimes pop up:
+
+ ERROR: test_scaling_icecream (test.symmetric_linear_game_test
+ .SymmetricLinearGameTest)
+ ----------------------------------------------------------------------
+ Traceback (most recent call last):
+ File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
+ line 336, in test_scaling_icecream
+ self.assert_scaling_works(L, K, e1, e2)
+ File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
+ line 317, in assert_scaling_works
+ value2 = game2.solution().game_value()
+ File "/home/mjo/src/dunshire/dunshire/games.py", line 428, in solution
+ soln_dict = solvers.conelp(c, G, h, C.cvxopt_dims(), A, b)
+ File "/usr/lib64/python3.4/site-packages/cvxopt/coneprog.py", line 1395,
+ in conelp
+ misc.update_scaling(W, lmbda, ds, dz)
+ File "/usr/lib64/python3.4/site-packages/cvxopt/misc.py", line 510,
+ in update_scaling
+ ln = jnrm2(lmbda, n = m, offset = ind)
+ File "/usr/lib64/python3.4/site-packages/cvxopt/misc.py", line 856, in jnrm2
+ return math.sqrt(x[offset] - a) * math.sqrt(x[offset] + a)
+ ValueError: math domain error