]> gitweb.michael.orlitzky.com - dunshire.git/blob - TODO
Update the project URL.
[dunshire.git] / TODO
1 1. Make it work on a cartesian product of cones in the correct order.
2
3 2. Make it work on a cartesian product of cones in the wrong order
4 (apply a perm utation before/after).
5
6 3. Make sure we have the dimensions of the PSD cone correct.
7
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.
10
11 5. Fix the solve failures that we get in the translation tests. For example,
12
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
26 "unknown."
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,
33 e1 = [7.7040001]
34 [9.4324457]
35 [8.3882819]
36 [6.8908420],
37 e2 = [8.5054325]
38 [6.4738132]
39 [7.2452437]
40 [7.3307357].
41 CVXOPT returned:
42 dual infeasibility: 0.053819211766446585
43 dual objective: -5.369636805607942
44 dual slack: 2.105806354638527e-17
45 gap: 2.6823510532777825e-16
46 iterations: 11
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
53 s:
54 [0.0115539]
55 [0.0000000]
56 [0.0000000]
57 [0.1230066]
58 [0.4837410]
59 [0.0000000]
60 [0.0000000]
61 [0.4044349]
62 status: unknown
63 x:
64 [ 5.3799616]
65 [ 0.0115539]
66 [-0.0000000]
67 [-0.0000000]
68 [ 0.1230066]
69 y:
70 [5.3696368]
71 z:
72 [0.0000000]
73 [0.4176330]
74 [0.6007564]
75 [0.0000000]
76 [0.0000000]
77 [0.0889310]
78 [0.0191076]
79 [0.0000000]
80
81
82 6. Fix the math domain errors that sometimes pop up:
83
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,
97 in conelp
98 misc.update_scaling(W, lmbda, ds, dz)
99 File "/usr/lib64/python3.4/site-packages/cvxopt/misc.py", line 510,
100 in update_scaling
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
105
106
107 7. Figure out why this happens, too:
108
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
123
124
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
139
140
141 12. Investigate this test failure too. It looks like it was really
142 close to being solved, but we would have needed a fudge factor
143 of three instead of two.
144
145 ERROR: test_positive_operator_value (test.symmetric_linear_game_test
146 .SymmetricLinearGameTest)
147 ----------------------------------------------------------------------
148 Traceback (most recent call last):
149 File "/home/mjo/src/dunshire/test/symmetric_linear_game_test.py",
150 line 550, in test_positive_operator_value
151 self.assertTrue(G.solution().game_value() >= -options.ABS_TOL)
152 File "/home/mjo/src/dunshire/dunshire/games.py", line 515, in solution
153 raise GameUnsolvableException(self, soln_dict)
154 dunshire.errors.GameUnsolvableException: Solution failed with result
155 "unknown."
156 The linear game (L, K, e1, e2) where
157 L = [8.0814704 3.5584693]
158 [3.9986814 9.3381562],
159 K = Nonnegative orthant in the real 2-space,
160 e1 = [1.3288182]
161 [0.7458942],
162 e2 = [0.6814326]
163 [3.3799082],
164 Condition((L, K, e1, e2)) = 41.093597.
165 CVXOPT returned:
166 dual infeasibility: 2.368640021750079e-06
167 dual objective: -7.867137172157051
168 dual slack: 1.1314089173606103e-07
169 gap: 1.1404410161224882e-06
170 iterations: 6
171 primal infeasibility: 1.379959981010593e-07
172 primal objective: -7.867137449574777
173 primal slack: 1.0550559882036034e-08
174 relative gap: 1.4496264027827932e-07
175 residual as dual infeasibility certificate: 0.12711103707156543
176 residual as primal infeasibility certificate: None
177 s:
178 [1.4674968]
179 [0.0000000]
180 [1.4055364]
181 [0.0000000]
182 status: unknown
183 x:
184 [ 7.8671374]
185 [ 1.4674968]
186 [-0.0000000]
187 y:
188 [7.8671372]
189 z:
190 [ 0.0000001]
191 [14.0707905]
192 [ 0.0000002]
193 [ 1.3406728]
194
195
196 13. Add game payoff(x,y) method to check solutions.