1 1. Make it work on a cartesian product of cones in the correct order.
3 2. Make it work on a cartesian product of cones in the wrong order
4 (apply a perm utation before/after).
6 3. Make sure we have the dimensions of the PSD cone correct.
8 4. Come up with a fast heuristic (like making nu huge and taking e1 as
9 our point) that finds a primal feasible point.
11 5. Fix the solve failures that we get in the translation tests. For example,
13 ERROR: test_translation_orthant (test.symmetric_linear_game_test.
14 SymmetricLinearGameTest)
15 ----------------------------------------------------------------------
16 Traceback (most recent call last):
17 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
18 line 374, in test_translation_orthant
19 self.assert_translation_works(L, K, e1, e2)
20 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
21 line 361, in assert_translation_works
22 value2 = game2.solution().game_value()
23 File "/home/mjo/src/dunshire/dunshire/games.py", line 458, in solution
24 raise GameUnsolvableException(self, soln_dict)
25 dunshire.errors.GameUnsolvableException: Solution failed with result
27 The linear game (L, K, e1, e2) where
28 L = [352.0763359 267.0812248 300.8004888 307.8135853]
29 [429.8303135 324.8322824 361.6866231 372.1748983]
30 [390.6592961 286.8039007 320.7409227 330.1854235]
31 [316.0538913 247.7440818 276.9063990 274.9871772],
32 K = Nonnegative orthant in the real 4-space,
42 dual infeasibility: 0.053819211766446585
43 dual objective: -5.369636805607942
44 dual slack: 2.105806354638527e-17
45 gap: 2.6823510532777825e-16
47 primal infeasibility: 4.71536776301359e-15
48 primal objective: -5.3799616179161
49 primal slack: 1.0328930392495263e-17
50 relative gap: 4.985818196816016e-17
51 residual as dual infeasibility certificate: 0.18587493201993227
52 residual as primal infeasibility certificate: None
82 6. Fix the math domain errors that sometimes pop up:
84 ERROR: test_scaling_icecream (test.symmetric_linear_game_test
85 .SymmetricLinearGameTest)
86 ----------------------------------------------------------------------
87 Traceback (most recent call last):
88 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
89 line 336, in test_scaling_icecream
90 self.assert_scaling_works(L, K, e1, e2)
91 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
92 line 317, in assert_scaling_works
93 value2 = game2.solution().game_value()
94 File "/home/mjo/src/dunshire/dunshire/games.py", line 428, in solution
95 soln_dict = solvers.conelp(c, G, h, C.cvxopt_dims(), A, b)
96 File "/usr/lib64/python3.4/site-packages/cvxopt/coneprog.py", line 1395,
98 misc.update_scaling(W, lmbda, ds, dz)
99 File "/usr/lib64/python3.4/site-packages/cvxopt/misc.py", line 510,
101 ln = jnrm2(lmbda, n = m, offset = ind)
102 File "/usr/lib64/python3.4/site-packages/cvxopt/misc.py", line 856, in jnrm2
103 return math.sqrt(x[offset] - a) * math.sqrt(x[offset] + a)
104 ValueError: math domain error
107 7. Figure out why this happens, too:
109 FAIL: test_scaling_icecream (test.symmetric_linear_game_test
110 .SymmetricLinearGameTest)
111 ----------------------------------------------------------------------
112 Traceback (most recent call last):
113 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
114 line 336, in test_scaling_icecream
115 self.assert_scaling_works(L, K, e1, e2)
116 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
117 line 318, in assert_scaling_works
118 self.assert_within_tol(alpha*value1, value2)
119 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
120 line 254, in assert_within_tol
121 self.assertTrue(abs(first - second) < options.ABS_TOL)
122 AssertionError: False is not true
125 FAIL: test_translation_orthant (test.symmetric_linear_game_test
126 SymmetricLinearGameTest)
127 ----------------------------------------------------------------------
128 Traceback (most recent call last):
129 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
130 line 374, in test_translation_orthant
131 self.assert_translation_works(L, K, e1, e2)
132 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
133 line 366, in assert_translation_works
134 self.assert_within_tol(value2, inner_product(M*x_bar, y_bar))
135 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
136 line 254, in assert_within_tol
137 self.assertTrue(abs(first - second) < options.ABS_TOL)
138 AssertionError: False is not true
141 8. Fix floating point comparisons in the doctest output.
144 12. Investigate this test failure too. It looks like it was really
145 close to being solved, but we would have needed a fudge factor
146 of three instead of two.
148 ERROR: test_positive_operator_value (test.symmetric_linear_game_test
149 .SymmetricLinearGameTest)
150 ----------------------------------------------------------------------
151 Traceback (most recent call last):
152 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
153 line 550, in test_positive_operator_value
154 self.assertTrue(G.solution().game_value() >= -options.ABS_TOL)
155 File "/home/mjo/src/dunshire/dunshire/games.py", line 515, in solution
156 raise GameUnsolvableException(self, soln_dict)
157 dunshire.errors.GameUnsolvableException: Solution failed with result
159 The linear game (L, K, e1, e2) where
160 L = [8.0814704 3.5584693]
161 [3.9986814 9.3381562],
162 K = Nonnegative orthant in the real 2-space,
167 Condition((L, K, e1, e2)) = 41.093597.
169 dual infeasibility: 2.368640021750079e-06
170 dual objective: -7.867137172157051
171 dual slack: 1.1314089173606103e-07
172 gap: 1.1404410161224882e-06
174 primal infeasibility: 1.379959981010593e-07
175 primal objective: -7.867137449574777
176 primal slack: 1.0550559882036034e-08
177 relative gap: 1.4496264027827932e-07
178 residual as dual infeasibility certificate: 0.12711103707156543
179 residual as primal infeasibility certificate: None
199 13. Add game payoff(x,y) method to check solutions.