]> gitweb.michael.orlitzky.com - dunshire.git/blobdiff - TODO
Use the DEBUG_FLOAT_FORMAT when printing exception details.
[dunshire.git] / TODO
diff --git a/TODO b/TODO
index 48d4bd36380ce361c3d35d7aff6be8689781ee18..2fe7ea4eab6b3fc44b571c8dcdb1272c6a4e153e 100644 (file)
--- a/TODO
+++ b/TODO
@@ -8,192 +8,5 @@
 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
-                               .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
-
-
-8. Fix floating point comparisons in the doctest output.
-
-
-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 game payoff(x,y) method to check solutions.
+5. Add a test to ensure that if we solve the same game twice, we get the
+   same answer back.