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
-
-
7. Figure out why this happens, too:
FAIL: test_scaling_icecream (test.symmetric_linear_game_test
AssertionError: False is not true
-8. Fix floating point comparisons in the doctest output.
-
-9. Use shebang in the standalone test executable.
-
-10. Sometimes our Lyapunov-like tests over the ice cream cone are
- failing badly. For example,
-
- FAIL: test_lyapunov_icecream (test.symmetric_linear_game_test
- .SymmetricLinearGameTest)
- ----------------------------------------------------------------------
- Traceback (most recent call last):
- File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
- line 620, in test_lyapunov_icecream
- self.assert_lyapunov_works(G)
- File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
- line 578, in assert_lyapunov_works
- self.assertTrue(negative_stable)
- AssertionError: False is not true
-
-
- We should have a matrix L that is negative stable, but its eigenvalues
- are actually,
-
- [0.8991268260361707,
- 0.8991268260361707,
- -1.4648148562918966,
- 3.2630685083642352,
- 0.8991268260361712]
+12. Investigate this test failure too. It looks like it was really
+ close to being solved, but we would have needed a fudge factor
+ of three instead of two.
+
+ ERROR: test_positive_operator_value (test.symmetric_linear_game_test
+ .SymmetricLinearGameTest)
+ ----------------------------------------------------------------------
+ Traceback (most recent call last):
+ File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
+ line 550, in test_positive_operator_value
+ self.assertTrue(G.solution().game_value() >= -options.ABS_TOL)
+ File "/home/mjo/src/dunshire/dunshire/games.py", line 515, in solution
+ raise GameUnsolvableException(self, soln_dict)
+ dunshire.errors.GameUnsolvableException: Solution failed with result
+ "unknown."
+ The linear game (L, K, e1, e2) where
+ L = [8.0814704 3.5584693]
+ [3.9986814 9.3381562],
+ K = Nonnegative orthant in the real 2-space,
+ e1 = [1.3288182]
+ [0.7458942],
+ e2 = [0.6814326]
+ [3.3799082],
+ Condition((L, K, e1, e2)) = 41.093597.
+ CVXOPT returned:
+ dual infeasibility: 2.368640021750079e-06
+ dual objective: -7.867137172157051
+ dual slack: 1.1314089173606103e-07
+ gap: 1.1404410161224882e-06
+ iterations: 6
+ primal infeasibility: 1.379959981010593e-07
+ primal objective: -7.867137449574777
+ primal slack: 1.0550559882036034e-08
+ relative gap: 1.4496264027827932e-07
+ residual as dual infeasibility certificate: 0.12711103707156543
+ residual as primal infeasibility certificate: None
+ s:
+ [1.4674968]
+ [0.0000000]
+ [1.4055364]
+ [0.0000000]
+ status: unknown
+ x:
+ [ 7.8671374]
+ [ 1.4674968]
+ [-0.0000000]
+ y:
+ [7.8671372]
+ z:
+ [ 0.0000001]
+ [14.0707905]
+ [ 0.0000002]
+ [ 1.3406728]
+
+13. Add a test to ensure that if we solve the same game twice, we get the
+ same answer back.