scs 0.2.2 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/LICENSE.txt +18 -18
- data/README.md +19 -14
- data/lib/scs/ffi.rb +31 -20
- data/lib/scs/solver.rb +32 -9
- data/lib/scs/version.rb +1 -1
- data/vendor/scs/CITATION.cff +39 -0
- data/vendor/scs/CMakeLists.txt +320 -0
- data/vendor/scs/Makefile +32 -23
- data/vendor/scs/README.md +9 -218
- data/vendor/scs/include/aa.h +67 -23
- data/vendor/scs/include/cones.h +22 -19
- data/vendor/scs/include/glbopts.h +107 -79
- data/vendor/scs/include/linalg.h +3 -4
- data/vendor/scs/include/linsys.h +58 -44
- data/vendor/scs/include/normalize.h +6 -5
- data/vendor/scs/include/rw.h +8 -2
- data/vendor/scs/include/scs.h +257 -141
- data/vendor/scs/include/scs_types.h +34 -0
- data/vendor/scs/include/scs_work.h +83 -0
- data/vendor/scs/include/util.h +3 -15
- data/vendor/scs/linsys/cpu/direct/private.c +241 -232
- data/vendor/scs/linsys/cpu/direct/private.h +13 -7
- data/vendor/scs/linsys/cpu/indirect/private.c +194 -118
- data/vendor/scs/linsys/cpu/indirect/private.h +7 -4
- data/vendor/scs/linsys/csparse.c +87 -0
- data/vendor/scs/linsys/csparse.h +34 -0
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +6 -6
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +6 -1
- data/vendor/scs/linsys/external/amd/amd_internal.h +1 -1
- data/vendor/scs/linsys/external/amd/amd_order.c +5 -5
- data/vendor/scs/linsys/external/qdldl/changes +2 -0
- data/vendor/scs/linsys/external/qdldl/qdldl.c +29 -46
- data/vendor/scs/linsys/external/qdldl/qdldl.h +33 -41
- data/vendor/scs/linsys/external/qdldl/qdldl_types.h +11 -3
- data/vendor/scs/linsys/gpu/gpu.c +58 -21
- data/vendor/scs/linsys/gpu/gpu.h +70 -35
- data/vendor/scs/linsys/gpu/indirect/private.c +394 -157
- data/vendor/scs/linsys/gpu/indirect/private.h +27 -12
- data/vendor/scs/linsys/scs_matrix.c +478 -0
- data/vendor/scs/linsys/scs_matrix.h +70 -0
- data/vendor/scs/scs.mk +14 -10
- data/vendor/scs/src/aa.c +394 -110
- data/vendor/scs/src/cones.c +497 -359
- data/vendor/scs/src/ctrlc.c +15 -5
- data/vendor/scs/src/linalg.c +107 -26
- data/vendor/scs/src/normalize.c +30 -72
- data/vendor/scs/src/rw.c +202 -27
- data/vendor/scs/src/scs.c +769 -571
- data/vendor/scs/src/scs_version.c +11 -3
- data/vendor/scs/src/util.c +37 -106
- data/vendor/scs/test/minunit.h +22 -8
- data/vendor/scs/test/problem_utils.h +180 -25
- data/vendor/scs/test/problems/degenerate.h +130 -0
- data/vendor/scs/test/problems/hs21_tiny_qp.h +124 -0
- data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +116 -0
- data/vendor/scs/test/problems/infeasible_tiny_qp.h +100 -0
- data/vendor/scs/test/problems/qafiro_tiny_qp.h +199 -0
- data/vendor/scs/test/problems/random_prob +0 -0
- data/vendor/scs/test/problems/random_prob.h +45 -0
- data/vendor/scs/test/problems/rob_gauss_cov_est.h +188 -31
- data/vendor/scs/test/problems/small_lp.h +14 -13
- data/vendor/scs/test/problems/small_qp.h +352 -0
- data/vendor/scs/test/problems/test_validation.h +43 -0
- data/vendor/scs/test/problems/unbounded_tiny_qp.h +82 -0
- data/vendor/scs/test/random_socp_prob.c +54 -53
- data/vendor/scs/test/rng.h +109 -0
- data/vendor/scs/test/run_from_file.c +20 -11
- data/vendor/scs/test/run_tests.c +35 -2
- metadata +29 -98
- data/vendor/scs/linsys/amatrix.c +0 -305
- data/vendor/scs/linsys/amatrix.h +0 -36
- data/vendor/scs/linsys/amatrix.o +0 -0
- data/vendor/scs/linsys/cpu/direct/private.o +0 -0
- data/vendor/scs/linsys/cpu/indirect/private.o +0 -0
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_1.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_2.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_aat.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_control.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_defaults.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_dump.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_global.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_info.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_order.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_post_tree.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_postorder.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_preprocess.o +0 -0
- data/vendor/scs/linsys/external/amd/amd_valid.o +0 -0
- data/vendor/scs/linsys/external/qdldl/qdldl.o +0 -0
- data/vendor/scs/src/aa.o +0 -0
- data/vendor/scs/src/cones.o +0 -0
- data/vendor/scs/src/ctrlc.o +0 -0
- data/vendor/scs/src/linalg.o +0 -0
- data/vendor/scs/src/normalize.o +0 -0
- data/vendor/scs/src/rw.o +0 -0
- data/vendor/scs/src/scs.o +0 -0
- data/vendor/scs/src/scs_version.o +0 -0
- data/vendor/scs/src/util.o +0 -0
- data/vendor/scs/test/data/small_random_socp +0 -0
- data/vendor/scs/test/problems/small_random_socp.h +0 -33
- data/vendor/scs/test/run_tests +0 -2
@@ -1,47 +1,141 @@
|
|
1
|
-
#include "amatrix.h"
|
2
1
|
#include "glbopts.h"
|
3
2
|
#include "linalg.h"
|
4
3
|
#include "minunit.h"
|
5
4
|
#include "scs.h"
|
5
|
+
#include "scs_matrix.h"
|
6
6
|
#include "util.h"
|
7
7
|
|
8
|
-
static scs_float Ax[] = {-1.0, -0.25035003149, -0.214684983694, -0.0013696512491, -1.0, -1.0, 0.0941450010301, -0.0929840802212, 0.0143905024814, -1.0, -1.41421356237, -1.0, 0.0941450010301, -0.0929840802212, 0.0143905024814, 1.0, -1.0, -0.0354035554388, -0.0402731435884, -0.151196563215, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.41421356237, 1.0, -1.41421356237, 1.0, -1.41421356237, 1.0, -1.0, 1.0, -1.41421356237, 1.0, -1.41421356237, 1.0, -1.0, 1.0, 1.0, -1.41421356237, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0};
|
9
|
-
static scs_int Ai[] = {11, 15, 16, 17, 36, 12, 15, 16, 17, 18, 37, 13, 15, 16, 17, 18, 14, 15, 16, 17, 38, 15, 19, 16, 20, 17, 21, 19, 20, 21, 25, 19, 20, 21, 19, 22, 20, 23, 21, 24, 3, 26, 4, 5, 27, 7, 28, 9, 29, 6, 30, 8, 31, 10, 32, 11, 33, 12, 13, 34, 14, 35, 1, 7, 0, 8, 9, 2, 10, 1, 3, 41, 2, 6, 44, 25, 39, 25, 42};
|
10
|
-
static scs_int Ap[] = {0, 5, 11, 16, 21, 23, 25, 27, 31, 34, 36, 38, 40, 42, 45, 47, 49, 51, 53, 55, 57, 60, 62, 64, 66, 67, 69, 72, 75, 77, 79};
|
11
|
-
static scs_float b[] = {-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, 1.0, -0.0, -0.0, 1.0, -0.0};
|
12
|
-
static scs_float c[] ={0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
|
13
|
-
|
14
|
-
static scs_int m = 45;
|
15
|
-
static scs_int n = 30;
|
16
|
-
|
17
|
-
static scs_int f = 19;
|
18
|
-
static scs_int l = 7;
|
19
|
-
static scs_int *q = SCS_NULL;
|
20
|
-
static scs_int qsize = 0;
|
21
|
-
static scs_int s[] = {4, 2};
|
22
|
-
static scs_int ssize = 2;
|
23
|
-
static scs_int ep = 2;
|
24
|
-
static scs_int ed = 0;
|
25
|
-
static scs_float *p = SCS_NULL;
|
26
|
-
static scs_int psize = 0;
|
27
|
-
|
28
|
-
static scs_float opt = -4.8912;
|
29
|
-
|
30
8
|
static const char *rob_gauss_cov_est(void) {
|
31
9
|
ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
|
32
10
|
ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
|
11
|
+
ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
|
33
12
|
ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
|
34
13
|
ScsInfo info = {0};
|
35
14
|
scs_int exitflag;
|
36
15
|
scs_float perr, derr;
|
37
16
|
scs_int success;
|
17
|
+
const char *fail;
|
18
|
+
|
19
|
+
/* data */
|
20
|
+
scs_float Ax[] = {-1.0,
|
21
|
+
-0.25035003149,
|
22
|
+
-0.214684983694,
|
23
|
+
-0.0013696512491,
|
24
|
+
-1.0,
|
25
|
+
-1.0,
|
26
|
+
0.0941450010301,
|
27
|
+
-0.0929840802212,
|
28
|
+
0.0143905024814,
|
29
|
+
-1.0,
|
30
|
+
-1.41421356237,
|
31
|
+
-1.0,
|
32
|
+
0.0941450010301,
|
33
|
+
-0.0929840802212,
|
34
|
+
0.0143905024814,
|
35
|
+
1.0,
|
36
|
+
-1.0,
|
37
|
+
-0.0354035554388,
|
38
|
+
-0.0402731435884,
|
39
|
+
-0.151196563215,
|
40
|
+
-1.0,
|
41
|
+
1.0,
|
42
|
+
1.0,
|
43
|
+
1.0,
|
44
|
+
1.0,
|
45
|
+
1.0,
|
46
|
+
1.0,
|
47
|
+
1.0,
|
48
|
+
1.0,
|
49
|
+
1.0,
|
50
|
+
-1.0,
|
51
|
+
-1.0,
|
52
|
+
-1.0,
|
53
|
+
-1.0,
|
54
|
+
-1.0,
|
55
|
+
-1.0,
|
56
|
+
-1.0,
|
57
|
+
-1.0,
|
58
|
+
-1.0,
|
59
|
+
-1.0,
|
60
|
+
1.0,
|
61
|
+
-1.0,
|
62
|
+
1.0,
|
63
|
+
1.0,
|
64
|
+
-1.41421356237,
|
65
|
+
1.0,
|
66
|
+
-1.41421356237,
|
67
|
+
1.0,
|
68
|
+
-1.41421356237,
|
69
|
+
1.0,
|
70
|
+
-1.0,
|
71
|
+
1.0,
|
72
|
+
-1.41421356237,
|
73
|
+
1.0,
|
74
|
+
-1.41421356237,
|
75
|
+
1.0,
|
76
|
+
-1.0,
|
77
|
+
1.0,
|
78
|
+
1.0,
|
79
|
+
-1.41421356237,
|
80
|
+
1.0,
|
81
|
+
-1.0,
|
82
|
+
-1.0,
|
83
|
+
-1.0,
|
84
|
+
1.0,
|
85
|
+
-1.0,
|
86
|
+
-1.0,
|
87
|
+
-1.0,
|
88
|
+
-1.0,
|
89
|
+
1.0,
|
90
|
+
-1.0,
|
91
|
+
-1.0,
|
92
|
+
1.0,
|
93
|
+
-1.0,
|
94
|
+
-1.0,
|
95
|
+
-1.0,
|
96
|
+
-1.0,
|
97
|
+
-1.0,
|
98
|
+
-1.0};
|
99
|
+
scs_int Ai[] = {11, 15, 16, 17, 36, 12, 15, 16, 17, 18, 37, 13, 15, 16,
|
100
|
+
17, 18, 14, 15, 16, 17, 38, 15, 19, 16, 20, 17, 21, 19,
|
101
|
+
20, 21, 25, 19, 20, 21, 19, 22, 20, 23, 21, 24, 3, 26,
|
102
|
+
4, 5, 27, 7, 28, 9, 29, 6, 30, 8, 31, 10, 32, 11,
|
103
|
+
33, 12, 13, 34, 14, 35, 1, 7, 0, 8, 9, 2, 10, 1,
|
104
|
+
3, 41, 2, 6, 44, 25, 39, 25, 42};
|
105
|
+
scs_int Ap[] = {0, 5, 11, 16, 21, 23, 25, 27, 31, 34, 36,
|
106
|
+
38, 40, 42, 45, 47, 49, 51, 53, 55, 57, 60,
|
107
|
+
62, 64, 66, 67, 69, 72, 75, 77, 79};
|
108
|
+
scs_float b[] = {-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0,
|
109
|
+
-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0,
|
110
|
+
-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0,
|
111
|
+
-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0,
|
112
|
+
-0.0, -0.0, -0.0, -0.0, 1.0, -0.0, -0.0, 1.0, -0.0};
|
113
|
+
scs_float c[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 1.0,
|
114
|
+
1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
115
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
|
116
|
+
|
117
|
+
scs_int m = 45;
|
118
|
+
scs_int n = 30;
|
119
|
+
|
120
|
+
scs_int z = 19;
|
121
|
+
scs_int l = 7;
|
122
|
+
scs_int *q = SCS_NULL;
|
123
|
+
scs_int qsize = 0;
|
124
|
+
scs_int s[] = {4, 2};
|
125
|
+
scs_int ssize = 2;
|
126
|
+
scs_int ep = 2;
|
127
|
+
scs_int ed = 0;
|
128
|
+
scs_float *p = SCS_NULL;
|
129
|
+
scs_int psize = 0;
|
130
|
+
|
131
|
+
scs_float opt = -4.8912;
|
132
|
+
/* end data */
|
38
133
|
|
39
134
|
d->m = m;
|
40
135
|
d->n = n;
|
41
136
|
d->b = b;
|
42
137
|
d->c = c;
|
43
138
|
|
44
|
-
d->stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
|
45
139
|
d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
46
140
|
|
47
141
|
d->A->m = m;
|
@@ -50,7 +144,7 @@ static const char *rob_gauss_cov_est(void) {
|
|
50
144
|
d->A->i = Ai;
|
51
145
|
d->A->p = Ap;
|
52
146
|
|
53
|
-
k->
|
147
|
+
k->z = z;
|
54
148
|
k->l = l;
|
55
149
|
k->q = q;
|
56
150
|
k->qsize = qsize;
|
@@ -61,9 +155,12 @@ static const char *rob_gauss_cov_est(void) {
|
|
61
155
|
k->p = p;
|
62
156
|
k->psize = psize;
|
63
157
|
|
64
|
-
|
158
|
+
scs_set_default_settings(stgs);
|
159
|
+
stgs->eps_abs = 1e-6;
|
160
|
+
stgs->eps_rel = 1e-6;
|
161
|
+
stgs->eps_infeas = 1e-9;
|
65
162
|
|
66
|
-
exitflag = scs(d, k, sol, &info);
|
163
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
67
164
|
|
68
165
|
perr = SCS(dot)(d->c, sol->x, d->n) - opt;
|
69
166
|
derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
|
@@ -73,13 +170,73 @@ static const char *rob_gauss_cov_est(void) {
|
|
73
170
|
|
74
171
|
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
75
172
|
|
76
|
-
SCS
|
173
|
+
mu_assert("rob_gauss_cov_est: SCS failed to produce outputflag SCS_SOLVED",
|
174
|
+
success);
|
175
|
+
fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
176
|
+
|
177
|
+
/* test warm-starting */
|
178
|
+
stgs->warm_start = 1;
|
179
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
180
|
+
/* 100 iters should be enough if warm-started */
|
181
|
+
mu_assert("rob_gauss_cov_est: warm-start failure", info.iter <= 100);
|
182
|
+
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
183
|
+
|
184
|
+
mu_assert("rob_gauss_cov_est: SCS failed to produce outputflag SCS_SOLVED",
|
185
|
+
success);
|
186
|
+
|
187
|
+
/* test read / write */
|
188
|
+
stgs->write_data_filename = "rob_gauss_cov_est";
|
189
|
+
stgs->max_iters = 1;
|
190
|
+
|
191
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
192
|
+
|
193
|
+
/* kill data */
|
77
194
|
scs_free(d->A);
|
78
195
|
scs_free(k);
|
79
|
-
scs_free(
|
196
|
+
scs_free(stgs);
|
80
197
|
scs_free(d);
|
81
198
|
|
82
|
-
|
199
|
+
SCS(read_data)("rob_gauss_cov_est", &d, &k, &stgs);
|
200
|
+
stgs->max_iters = 1000;
|
201
|
+
/* solve with read data */
|
202
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
203
|
+
|
204
|
+
perr = info.pobj - opt;
|
205
|
+
derr = info.dobj - opt;
|
206
|
+
|
207
|
+
scs_printf("primal obj error %4e\n", perr);
|
208
|
+
scs_printf("dual obj error %4e\n", derr);
|
209
|
+
|
210
|
+
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
211
|
+
|
212
|
+
mu_assert("rob_gauss_cov_est_rw: SCS failed to produce outputflag SCS_SOLVED",
|
83
213
|
success);
|
84
|
-
|
214
|
+
fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
215
|
+
|
216
|
+
/* test other settings */
|
217
|
+
stgs->warm_start = 0;
|
218
|
+
stgs->normalize = 0;
|
219
|
+
stgs->adaptive_scale = 0;
|
220
|
+
stgs->acceleration_lookback = 10;
|
221
|
+
stgs->acceleration_interval = 10;
|
222
|
+
stgs->write_data_filename = SCS_NULL;
|
223
|
+
stgs->max_iters = 1000;
|
224
|
+
stgs->log_csv_filename = "rob_gauss_cov_est.csv";
|
225
|
+
|
226
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
227
|
+
|
228
|
+
perr = info.pobj - opt;
|
229
|
+
derr = info.dobj - opt;
|
230
|
+
|
231
|
+
scs_printf("primal obj error %4e\n", perr);
|
232
|
+
scs_printf("dual obj error %4e\n", derr);
|
233
|
+
|
234
|
+
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
235
|
+
|
236
|
+
mu_assert("rob_gauss_cov_est_rw: SCS failed to produce outputflag SCS_SOLVED",
|
237
|
+
success);
|
238
|
+
|
239
|
+
SCS(free_sol)(sol);
|
240
|
+
SCS(free_data)(d, k, stgs);
|
241
|
+
return fail;
|
85
242
|
}
|
@@ -7,6 +7,7 @@
|
|
7
7
|
static const char *small_lp(void) {
|
8
8
|
ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
|
9
9
|
ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
|
10
|
+
ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
|
10
11
|
ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
|
11
12
|
ScsSolution *opt_sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
|
12
13
|
ScsInfo info = {0};
|
@@ -19,32 +20,32 @@ static const char *small_lp(void) {
|
|
19
20
|
scs_int exitflag;
|
20
21
|
scs_float perr, derr;
|
21
22
|
scs_int success;
|
23
|
+
const char *fail;
|
22
24
|
|
23
|
-
|
24
|
-
k->
|
25
|
-
k->l = m - k->f;
|
26
|
-
|
27
|
-
srand(seed);
|
25
|
+
k->z = (scs_int)floor(m * p_f);
|
26
|
+
k->l = m - k->z;
|
28
27
|
|
29
28
|
d->m = m;
|
30
29
|
d->n = n;
|
31
|
-
gen_random_prob_data(nnz, col_nnz, d, k, opt_sol);
|
32
|
-
|
30
|
+
gen_random_prob_data(nnz, col_nnz, d, k, opt_sol, seed);
|
31
|
+
scs_set_default_settings(stgs);
|
32
|
+
stgs->eps_abs = 1e-5;
|
33
|
+
stgs->eps_rel = 1e-5;
|
33
34
|
|
34
|
-
|
35
|
-
d->stgs->acceleration_lookback = 20;
|
35
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
36
36
|
|
37
|
-
exitflag = scs(d, k, sol, &info);
|
38
37
|
perr = SCS(dot)(d->c, sol->x, d->n) - SCS(dot)(d->c, opt_sol->x, d->n);
|
39
38
|
derr = -SCS(dot)(d->b, sol->y, d->m) + SCS(dot)(d->b, opt_sol->y, d->m);
|
39
|
+
scs_printf("true obj %4e\n", SCS(dot)(d->c, opt_sol->x, d->n));
|
40
40
|
scs_printf("primal obj error %4e\n", perr);
|
41
41
|
scs_printf("dual obj error %4e\n", derr);
|
42
42
|
|
43
43
|
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
44
44
|
|
45
|
-
SCS
|
45
|
+
mu_assert("small_lp: SCS failed to produce outputflag SCS_SOLVED", success);
|
46
|
+
fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
47
|
+
SCS(free_data)(d, k, stgs);
|
46
48
|
SCS(free_sol)(sol);
|
47
49
|
SCS(free_sol)(opt_sol);
|
48
|
-
|
49
|
-
return 0;
|
50
|
+
return fail;
|
50
51
|
}
|
@@ -0,0 +1,352 @@
|
|
1
|
+
#include "glbopts.h"
|
2
|
+
#include "minunit.h"
|
3
|
+
#include "problem_utils.h"
|
4
|
+
#include "scs.h"
|
5
|
+
#include "util.h"
|
6
|
+
|
7
|
+
scs_float P_x[] = {
|
8
|
+
10.74980, 1.07498, 41.62331, 0.11891, 5.80636, 0.58064, 3.13259,
|
9
|
+
0.31326, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331,
|
10
|
+
0.11891, 11.49095, 1.14910, 3.13259, 0.31326, 41.62331, 41.62331,
|
11
|
+
41.62331, 41.62331, 41.62331, 41.62331, 0.11891, 11.49095, 1.14910,
|
12
|
+
3.13259, 0.31326, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331,
|
13
|
+
41.62331, 0.11891, 11.49095, 1.14910, 50.00000, 41.62331, 41.62331,
|
14
|
+
41.62331, 41.62331, 10.40583, 10.74980, 10.74980, 1.07498, 1.07498,
|
15
|
+
50.00000, 3.13259, 3.13259, 0.31326, 0.31326, 50.00000, 41.62331,
|
16
|
+
41.62331, 50.00000, 41.62331, 41.62331, 41.62331, 25.00000, 5.80636,
|
17
|
+
0.58064, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331,
|
18
|
+
50.00000, 3.13259, 3.13259, 0.31326, 0.31326, 50.00000, 41.62331,
|
19
|
+
41.62331, 50.00000, 41.62331, 41.62331, 41.62331, 25.00000, 5.80636,
|
20
|
+
0.58064, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331,
|
21
|
+
50.00000, 3.13259, 3.13259, 0.31326, 0.31326, 50.00000, 41.62331,
|
22
|
+
41.62331, 50.00000, 41.62331, 41.62331, 41.62331, 25.00000, 5.80636,
|
23
|
+
0.58064, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331, 41.62331,
|
24
|
+
41.62331, 0.19531, 10.40583, 10.40583, 0.19531, 41.62331, 41.62331,
|
25
|
+
0.19531, 41.62331, 41.62331, 0.19531, 41.62331, 41.62331, 0.19531,
|
26
|
+
41.62331, 41.62331, 0.19531, 41.62331, 41.62331, 0.19531, 41.62331,
|
27
|
+
41.62331};
|
28
|
+
scs_int P_i[] = {
|
29
|
+
1, 2, 4, 5, 6, 7, 9, 10, 12, 14, 16, 18, 20, 22, 23,
|
30
|
+
24, 25, 27, 28, 30, 32, 34, 36, 38, 40, 41, 42, 43, 45, 46,
|
31
|
+
48, 50, 52, 54, 56, 58, 59, 60, 61, 62, 63, 65, 67, 69, 71,
|
32
|
+
1, 73, 2, 74, 75, 9, 76, 10, 77, 78, 12, 79, 80, 14, 81,
|
33
|
+
83, 84, 85, 86, 88, 90, 92, 94, 20, 96, 97, 27, 98, 28, 99,
|
34
|
+
100, 30, 101, 102, 32, 103, 105, 106, 107, 108, 110, 112, 114, 116, 38,
|
35
|
+
118, 119, 45, 120, 46, 121, 122, 48, 123, 124, 50, 125, 127, 128, 129,
|
36
|
+
130, 132, 134, 136, 63, 138, 56, 140, 141, 71, 142, 143, 16, 144, 145,
|
37
|
+
22, 146, 147, 34, 148, 149, 40, 150, 151, 52, 152, 153, 58, 154};
|
38
|
+
scs_int P_p[] = {
|
39
|
+
0, 0, 1, 2, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9, 9,
|
40
|
+
10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 16, 17, 17, 18, 19,
|
41
|
+
19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 26, 27, 28,
|
42
|
+
28, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36,
|
43
|
+
37, 38, 39, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 47,
|
44
|
+
49, 50, 52, 54, 55, 57, 58, 60, 60, 61, 62, 63, 64, 64, 65,
|
45
|
+
65, 66, 66, 67, 67, 68, 68, 70, 71, 73, 75, 76, 78, 79, 81,
|
46
|
+
81, 82, 83, 84, 85, 85, 86, 86, 87, 87, 88, 88, 89, 89, 91,
|
47
|
+
92, 94, 96, 97, 99, 100, 102, 102, 103, 104, 105, 106, 106, 107, 107,
|
48
|
+
108, 108, 109, 109, 111, 111, 113, 114, 116, 117, 119, 120, 122, 123, 125,
|
49
|
+
126, 128, 129, 131, 132, 134};
|
50
|
+
scs_float A_x[] = {
|
51
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
52
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
53
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
54
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
55
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
56
|
+
1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
57
|
+
-1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
58
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
59
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
60
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
61
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
62
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
63
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
64
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
65
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
66
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
67
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
68
|
+
1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
69
|
+
-1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
70
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
71
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
72
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
73
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
74
|
+
1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
75
|
+
-1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
76
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
77
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
78
|
+
-1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
79
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
80
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
81
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
82
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
83
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
84
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
85
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
86
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
87
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
88
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
89
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
90
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
91
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
92
|
+
1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
93
|
+
-1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
94
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
95
|
+
1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
96
|
+
-1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
97
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
98
|
+
1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
99
|
+
-1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
100
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
101
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
102
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
103
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
104
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
105
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
106
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
107
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
108
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
109
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
110
|
+
1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
111
|
+
-1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000,
|
112
|
+
1.00000, 1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000,
|
113
|
+
1.00000, 1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000,
|
114
|
+
1.00000, 1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000,
|
115
|
+
1.00000, 1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
116
|
+
1.00000, -1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
|
117
|
+
-1.00000, 1.00000, 1.00000};
|
118
|
+
scs_int A_i[] = {
|
119
|
+
0, 3, 34, 96, 96, 197, 96, 166, 177, 1, 3, 34, 97, 97, 199,
|
120
|
+
2, 3, 34, 98, 98, 200, 98, 167, 179, 4, 9, 34, 99, 99, 201,
|
121
|
+
99, 168, 180, 5, 9, 34, 100, 100, 203, 6, 9, 34, 101, 101, 205,
|
122
|
+
7, 9, 34, 102, 102, 207, 8, 9, 34, 103, 103, 209, 10, 13, 34,
|
123
|
+
104, 104, 216, 11, 13, 34, 105, 105, 218, 12, 13, 34, 106, 106, 220,
|
124
|
+
106, 170, 183, 14, 19, 34, 107, 107, 221, 107, 171, 184, 15, 19, 34,
|
125
|
+
108, 108, 223, 16, 19, 34, 109, 109, 225, 17, 19, 34, 110, 110, 227,
|
126
|
+
18, 19, 34, 111, 111, 229, 20, 23, 34, 112, 112, 236, 21, 23, 34,
|
127
|
+
113, 113, 238, 22, 23, 34, 114, 114, 240, 114, 173, 187, 24, 29, 34,
|
128
|
+
115, 115, 241, 115, 174, 188, 25, 29, 34, 116, 116, 243, 26, 29, 34,
|
129
|
+
117, 117, 245, 27, 29, 34, 118, 118, 247, 28, 29, 34, 119, 119, 249,
|
130
|
+
30, 33, 34, 120, 120, 257, 31, 33, 34, 121, 121, 259, 32, 33, 34,
|
131
|
+
122, 122, 261, 122, 176, 191, 35, 36, 37, 123, 123, 255, 38, 43, 80,
|
132
|
+
124, 124, 192, 39, 43, 80, 125, 125, 193, 40, 43, 80, 126, 126, 194,
|
133
|
+
41, 43, 80, 127, 127, 195, 42, 43, 80, 128, 128, 198, 128, 166, 178,
|
134
|
+
44, 49, 80, 129, 129, 202, 129, 168, 181, 45, 49, 80, 130, 130, 204,
|
135
|
+
46, 49, 80, 131, 131, 206, 47, 49, 80, 132, 132, 210, 48, 49, 80,
|
136
|
+
133, 133, 211, 133, 169, 182, 50, 55, 80, 134, 134, 212, 51, 55, 80,
|
137
|
+
135, 135, 213, 52, 55, 80, 136, 136, 214, 53, 55, 80, 137, 137, 215,
|
138
|
+
54, 55, 80, 138, 138, 217, 56, 61, 80, 139, 139, 222, 139, 171, 185,
|
139
|
+
57, 61, 80, 140, 140, 224, 58, 61, 80, 141, 141, 226, 59, 61, 80,
|
140
|
+
142, 142, 230, 60, 61, 80, 143, 143, 231, 143, 172, 186, 62, 67, 80,
|
141
|
+
144, 144, 232, 63, 67, 80, 145, 145, 233, 64, 67, 80, 146, 146, 234,
|
142
|
+
65, 67, 80, 147, 147, 235, 66, 67, 80, 148, 148, 237, 68, 73, 80,
|
143
|
+
149, 149, 242, 149, 174, 189, 69, 73, 80, 150, 150, 244, 70, 73, 80,
|
144
|
+
151, 151, 246, 71, 73, 80, 152, 152, 250, 72, 73, 80, 153, 153, 251,
|
145
|
+
153, 175, 190, 74, 79, 80, 154, 154, 252, 75, 79, 80, 155, 155, 253,
|
146
|
+
76, 79, 80, 156, 156, 254, 77, 79, 80, 157, 157, 256, 78, 79, 80,
|
147
|
+
158, 158, 258, 81, 82, 95, 159, 159, 196, 83, 84, 95, 160, 160, 208,
|
148
|
+
85, 86, 95, 161, 161, 219, 87, 88, 95, 162, 162, 228, 89, 90, 95,
|
149
|
+
163, 163, 239, 91, 92, 95, 164, 164, 248, 93, 94, 95, 165, 165, 260};
|
150
|
+
scs_int A_p[] = {
|
151
|
+
0, 4, 6, 9, 13, 15, 19, 21, 24, 28, 30, 33, 37, 39, 43,
|
152
|
+
45, 49, 51, 55, 57, 61, 63, 67, 69, 73, 75, 78, 82, 84, 87,
|
153
|
+
91, 93, 97, 99, 103, 105, 109, 111, 115, 117, 121, 123, 127, 129, 132,
|
154
|
+
136, 138, 141, 145, 147, 151, 153, 157, 159, 163, 165, 169, 171, 175, 177,
|
155
|
+
181, 183, 186, 190, 192, 196, 198, 202, 204, 208, 210, 214, 216, 220, 222,
|
156
|
+
225, 229, 231, 234, 238, 240, 244, 246, 250, 252, 256, 258, 261, 265, 267,
|
157
|
+
271, 273, 277, 279, 283, 285, 289, 291, 295, 297, 300, 304, 306, 310, 312,
|
158
|
+
316, 318, 322, 324, 327, 331, 333, 337, 339, 343, 345, 349, 351, 355, 357,
|
159
|
+
361, 363, 366, 370, 372, 376, 378, 382, 384, 388, 390, 393, 397, 399, 403,
|
160
|
+
405, 409, 411, 415, 417, 421, 423, 427, 429, 433, 435, 439, 441, 445, 447,
|
161
|
+
451, 453, 457, 459, 463, 465};
|
162
|
+
scs_int n = 155;
|
163
|
+
scs_int m = 262;
|
164
|
+
scs_float l[] = {
|
165
|
+
30.00000, 30.00000, 59.00000, 119.00000, 30.00000, 30.00000,
|
166
|
+
30.00000, 30.00000, 30.00000, 150.00000, 30.00000, 30.00000,
|
167
|
+
59.00000, 119.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
168
|
+
30.00000, 150.00000, 30.00000, 30.00000, 59.00000, 119.00000,
|
169
|
+
30.00000, 30.00000, 30.00000, 30.00000, 30.00000, 150.00000,
|
170
|
+
30.00000, 30.00000, 59.00000, 119.00000, 926.00000, 31.00000,
|
171
|
+
31.00000, 31.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
172
|
+
30.00000, 150.00000, 31.00000, 31.00000, 31.00000, 30.00000,
|
173
|
+
28.00000, 151.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
174
|
+
30.00000, 150.00000, 31.00000, 31.00000, 31.00000, 30.00000,
|
175
|
+
28.00000, 151.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
176
|
+
30.00000, 150.00000, 31.00000, 31.00000, 31.00000, 30.00000,
|
177
|
+
28.00000, 151.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
178
|
+
30.00000, 150.00000, 1053.00000, 16.00000, 16.00000, 16.00000,
|
179
|
+
16.00000, 16.00000, 16.00000, 16.00000, 16.00000, 16.00000,
|
180
|
+
16.00000, 16.00000, 16.00000, 16.00000, 16.00000, 112.00000,
|
181
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
182
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
183
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
184
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
185
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
186
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
187
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
188
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
189
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
190
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
191
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
192
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
193
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
194
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
195
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
196
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
197
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
198
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
199
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
200
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
201
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
202
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
203
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
204
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
205
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
206
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
207
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
208
|
+
0.00000, 0.00000, 0.00000, 0.00000};
|
209
|
+
scs_float u[] = {
|
210
|
+
30.00000, 30.00000, 59.00000, 119.00000, 30.00000, 30.00000,
|
211
|
+
30.00000, 30.00000, 30.00000, 150.00000, 30.00000, 30.00000,
|
212
|
+
59.00000, 119.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
213
|
+
30.00000, 150.00000, 30.00000, 30.00000, 59.00000, 119.00000,
|
214
|
+
30.00000, 30.00000, 30.00000, 30.00000, 30.00000, 150.00000,
|
215
|
+
30.00000, 30.00000, 59.00000, 119.00000, 926.00000, 31.00000,
|
216
|
+
31.00000, 31.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
217
|
+
30.00000, 150.00000, 31.00000, 31.00000, 31.00000, 30.00000,
|
218
|
+
28.00000, 151.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
219
|
+
30.00000, 150.00000, 31.00000, 31.00000, 31.00000, 30.00000,
|
220
|
+
28.00000, 151.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
221
|
+
30.00000, 150.00000, 31.00000, 31.00000, 31.00000, 30.00000,
|
222
|
+
28.00000, 151.00000, 30.00000, 30.00000, 30.00000, 30.00000,
|
223
|
+
30.00000, 150.00000, 1053.00000, 36.00000, 17.00000, 36.00000,
|
224
|
+
17.00000, 36.00000, 17.00000, 36.00000, 17.00000, 36.00000,
|
225
|
+
17.00000, 36.00000, 17.00000, 36.00000, 17.00000, 112.00000,
|
226
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
227
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
228
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
229
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
230
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
231
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
232
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
233
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
234
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
235
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
236
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
237
|
+
0.00000, 0.00000, 0.00000, 0.00000, 30.00000, 28.00000,
|
238
|
+
54.00000, 52.00000, 28.00000, 54.00000, 52.00000, 28.00000,
|
239
|
+
52.00000, 52.00000, 28.00000, 96.00000, 96.00000, 96.00000,
|
240
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
241
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
242
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
243
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
244
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
245
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
246
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
247
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
248
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
249
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
250
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
251
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
252
|
+
96.00000, 96.00000, 96.00000, 96.00000, 96.00000, 96.00000,
|
253
|
+
96.00000, 96.00000, 96.00000, 96.00000};
|
254
|
+
scs_float q[] = {0.00000, 0.00000, -35.02643, 0.00000, 0.00000,
|
255
|
+
-3.56718, 0.00000, -17.41907, 0.00000, 0.00000,
|
256
|
+
-17.64691, 0.00000, 0.00000, 0.00000, 0.00000,
|
257
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
258
|
+
0.00000, 0.00000, 0.00000, -3.56718, 0.00000,
|
259
|
+
-32.17466, 0.00000, 0.00000, -17.64691, 0.00000,
|
260
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
261
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
262
|
+
0.00000, -3.56718, 0.00000, -32.17466, 0.00000,
|
263
|
+
0.00000, -17.07260, 0.00000, 0.00000, 0.00000,
|
264
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
265
|
+
0.00000, 0.00000, 0.00000, 0.00000, -3.56718,
|
266
|
+
0.00000, -32.17466, -1600.00000, 0.00000, 0.00000,
|
267
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
268
|
+
0.00000, 0.00000, 0.00000, 0.00000, -35.02643,
|
269
|
+
-1500.00000, 0.00000, -17.64691, -1500.00000, 0.00000,
|
270
|
+
-1500.00000, 0.00000, 0.00000, 0.00000, -750.00000,
|
271
|
+
0.00000, -31.69304, 0.00000, 0.00000, 0.00000,
|
272
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
273
|
+
0.00000, 0.00000, -1500.00000, 0.00000, -17.64691,
|
274
|
+
-1500.00000, 0.00000, -1500.00000, 0.00000, 0.00000,
|
275
|
+
0.00000, -750.00000, 0.00000, -31.69304, 0.00000,
|
276
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
277
|
+
0.00000, 0.00000, 0.00000, 0.00000, -1500.00000,
|
278
|
+
0.00000, -17.07260, -1500.00000, 0.00000, -1500.00000,
|
279
|
+
0.00000, 0.00000, 0.00000, -750.00000, 0.00000,
|
280
|
+
-31.69304, 0.00000, 0.00000, 0.00000, 0.00000,
|
281
|
+
0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
|
282
|
+
0.00000, -3.90625, 0.00000, -3.90625, 0.00000,
|
283
|
+
-3.90625, 0.00000, -3.90625, 0.00000, -3.90625,
|
284
|
+
0.00000, -3.90625, 0.00000, -3.90625, 0.00000};
|
285
|
+
scs_int A_nnz = 465;
|
286
|
+
|
287
|
+
static const char *small_qp(void) {
|
288
|
+
ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
|
289
|
+
ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
|
290
|
+
ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
|
291
|
+
ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
|
292
|
+
ScsInfo info = {0};
|
293
|
+
scs_int success, exitflag;
|
294
|
+
scs_int j;
|
295
|
+
const char *fail;
|
296
|
+
|
297
|
+
d->m = m + 1; /* t var in box cone */
|
298
|
+
d->n = n;
|
299
|
+
d->b = (scs_float *)scs_calloc(m + 1, sizeof(scs_float));
|
300
|
+
d->b[0] = 1; /* t var in box cone */
|
301
|
+
d->c = q;
|
302
|
+
|
303
|
+
d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
304
|
+
d->A->m = m + 1; /* t var in box cone */
|
305
|
+
d->A->n = n;
|
306
|
+
d->A->x = A_x;
|
307
|
+
d->A->i = A_i;
|
308
|
+
d->A->p = A_p;
|
309
|
+
|
310
|
+
/* Ax + s = b, s \in box, need to negate A */
|
311
|
+
for (j = 0; j < A_nnz; ++j) {
|
312
|
+
d->A->x[j] *= -1;
|
313
|
+
}
|
314
|
+
/* need to add row of all zeros to top of A */
|
315
|
+
for (j = 0; j < A_nnz; ++j) {
|
316
|
+
d->A->i[j] += 1;
|
317
|
+
}
|
318
|
+
|
319
|
+
d->P = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
320
|
+
d->P->m = n;
|
321
|
+
d->P->n = n;
|
322
|
+
d->P->x = P_x;
|
323
|
+
d->P->i = P_i;
|
324
|
+
d->P->p = P_p;
|
325
|
+
|
326
|
+
k->bu = u;
|
327
|
+
k->bl = l;
|
328
|
+
k->bsize = m + 1; /* t var in box cone */
|
329
|
+
|
330
|
+
scs_set_default_settings(stgs);
|
331
|
+
stgs->eps_abs = 1e-6;
|
332
|
+
stgs->eps_rel = 1e-6;
|
333
|
+
stgs->eps_infeas = 1e-10;
|
334
|
+
|
335
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
336
|
+
success = exitflag == SCS_SOLVED;
|
337
|
+
|
338
|
+
mu_assert("small_qp: SCS failed to produce outputflag SCS_SOLVED", success);
|
339
|
+
fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
340
|
+
|
341
|
+
scs_free(d->A);
|
342
|
+
scs_free(d->P);
|
343
|
+
scs_free(d->b);
|
344
|
+
scs_free(k);
|
345
|
+
scs_free(d);
|
346
|
+
scs_free(stgs);
|
347
|
+
scs_free(sol->x);
|
348
|
+
scs_free(sol->y);
|
349
|
+
scs_free(sol->s);
|
350
|
+
scs_free(sol);
|
351
|
+
return fail;
|
352
|
+
}
|