X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=TODO;h=d75812b661d629579e74e9a564edc4b79c35815b;hb=cb004dc613ea1bc9596e7d4856c16f7cbe070772;hp=373ef4948413073e3a972e62bc3db431c9bda4a3;hpb=769e1c7d09936a617f33d1496782fbbd4299851d;p=dunshire.git diff --git a/TODO b/TODO index 373ef49..d75812b 100644 --- a/TODO +++ b/TODO @@ -1,24 +1,171 @@ -1. Add unit testing for crazier things like random invertible matrices. +1. Make it work on a cartesian product of cones in the correct order. -2. Copy the intro from my thesis into README.rst, and add a section - explaining the CVXOPT formulation. +2. Make it work on a cartesian product of cones in the wrong order + (apply a perm utation before/after). -3. Try to eliminate the code in matrices.py. +3. Make sure we have the dimensions of the PSD cone correct. -4. Make it work on a cartesian product of cones in the correct order. +4. Come up with a fast heuristic (like making nu huge and taking e1 as + our point) that finds a primal feasible point. -5. Make it work on a cartesian product of cones in the wrong order - (apply a perm utation before/after). +5. Fix the solve failures that we get in the translation tests. For example, -6. Rename all of my variables so that they don't conflict with CVXOPT. - Maybe x -> xi and y -> gamma in my paper, if that works out. + 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] -7. Make sure we have the dimensions of the PSD cone correct. -8. Come up with a fast heuristic (like making nu huge and taking e1 as - our point) that finds a primal feasible point. +7. Figure out why this happens, too: + + FAIL: 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 318, in assert_scaling_works + self.assert_within_tol(alpha*value1, value2) + File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py", + line 254, in assert_within_tol + self.assertTrue(abs(first - second) < options.ABS_TOL) + AssertionError: False is not true + + + FAIL: 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 366, in assert_translation_works + self.assert_within_tol(value2, inner_product(M*x_bar, y_bar)) + File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py", + line 254, in assert_within_tol + self.assertTrue(abs(first - second) < options.ABS_TOL) + AssertionError: False is not true + + +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. -9. We only need to include the API docs for dunshire.games in the - "user manual;" everything else can go in an appendix. + 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] -10. Should our one exception also spit out the game parameters? +13. Add a test to ensure that if we solve the same game twice, we get the + same answer back.