scs 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +42 -13
- data/lib/scs/ffi.rb +1 -7
- data/lib/scs/matrix.rb +72 -0
- data/lib/scs/solver.rb +19 -26
- data/lib/scs/version.rb +1 -1
- data/lib/scs.rb +1 -0
- data/vendor/scs/CITATION.cff +1 -1
- data/vendor/scs/CMakeLists.txt +55 -7
- data/vendor/scs/Makefile +9 -9
- data/vendor/scs/README.md +4 -1
- data/vendor/scs/include/aa.h +1 -1
- data/vendor/scs/include/cones.h +17 -12
- data/vendor/scs/include/glbopts.h +27 -66
- data/vendor/scs/include/linalg.h +2 -1
- data/vendor/scs/include/linsys.h +13 -13
- data/vendor/scs/include/normalize.h +7 -5
- data/vendor/scs/include/rw.h +3 -3
- data/vendor/scs/include/scs.h +85 -106
- data/vendor/scs/include/scs_types.h +34 -0
- data/vendor/scs/include/scs_work.h +80 -0
- data/vendor/scs/include/util.h +3 -1
- data/vendor/scs/linsys/cpu/direct/private.c +86 -73
- data/vendor/scs/linsys/cpu/direct/private.h +2 -2
- data/vendor/scs/linsys/cpu/indirect/private.c +42 -33
- data/vendor/scs/linsys/cpu/indirect/private.h +1 -2
- data/vendor/scs/linsys/csparse.c +3 -3
- data/vendor/scs/linsys/external/amd/LICENSE.txt +0 -897
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +9 -7
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +1 -1
- data/vendor/scs/linsys/external/amd/amd_order.c +5 -5
- data/vendor/scs/linsys/gpu/gpu.h +8 -11
- data/vendor/scs/linsys/gpu/indirect/private.c +72 -49
- data/vendor/scs/linsys/gpu/indirect/private.h +14 -13
- data/vendor/scs/linsys/scs_matrix.c +55 -104
- data/vendor/scs/linsys/scs_matrix.h +5 -4
- data/vendor/scs/scs.mk +1 -5
- data/vendor/scs/src/aa.c +13 -8
- data/vendor/scs/src/cones.c +197 -108
- data/vendor/scs/src/linalg.c +25 -0
- data/vendor/scs/src/normalize.c +75 -26
- data/vendor/scs/src/rw.c +74 -30
- data/vendor/scs/src/scs.c +300 -264
- data/vendor/scs/src/scs_version.c +8 -6
- data/vendor/scs/src/util.c +27 -13
- data/vendor/scs/test/minunit.h +6 -1
- data/vendor/scs/test/problem_utils.h +28 -35
- data/vendor/scs/test/problems/degenerate.h +2 -1
- data/vendor/scs/test/problems/hs21_tiny_qp.h +2 -1
- data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +6 -2
- data/vendor/scs/test/problems/infeasible_tiny_qp.h +2 -1
- data/vendor/scs/test/problems/qafiro_tiny_qp.h +5 -4
- data/vendor/scs/test/problems/random_prob.h +6 -2
- data/vendor/scs/test/problems/rob_gauss_cov_est.h +9 -2
- data/vendor/scs/test/problems/small_lp.h +7 -2
- data/vendor/scs/test/problems/small_qp.h +387 -0
- data/vendor/scs/test/problems/{test_fails.h → test_validation.h} +7 -4
- data/vendor/scs/test/problems/unbounded_tiny_qp.h +4 -4
- data/vendor/scs/test/random_socp_prob.c +4 -2
- data/vendor/scs/test/run_from_file.c +16 -4
- data/vendor/scs/test/run_tests.c +23 -14
- metadata +10 -35
- data/vendor/scs/linsys/cpu/direct/private.o +0 -0
- data/vendor/scs/linsys/cpu/indirect/private.o +0 -0
- data/vendor/scs/linsys/csparse.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/linsys/scs_matrix.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_indir.o +0 -0
- data/vendor/scs/src/scs_version.o +0 -0
- data/vendor/scs/src/util.o +0 -0
data/vendor/scs/src/rw.c
CHANGED
|
@@ -33,21 +33,29 @@ static ScsCone *read_scs_cone(FILE *fin) {
|
|
|
33
33
|
fread(&(k->z), sizeof(scs_int), 1, fin);
|
|
34
34
|
fread(&(k->l), sizeof(scs_int), 1, fin);
|
|
35
35
|
fread(&(k->bsize), sizeof(scs_int), 1, fin);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
if (k->bsize > 1) {
|
|
37
|
+
k->bl = (scs_float *)scs_calloc(MAX(k->bsize - 1, 0), sizeof(scs_float));
|
|
38
|
+
k->bu = (scs_float *)scs_calloc(MAX(k->bsize - 1, 0), sizeof(scs_float));
|
|
39
|
+
fread(k->bl, sizeof(scs_float), MAX(k->bsize - 1, 0), fin);
|
|
40
|
+
fread(k->bu, sizeof(scs_float), MAX(k->bsize - 1, 0), fin);
|
|
41
|
+
}
|
|
40
42
|
fread(&(k->qsize), sizeof(scs_int), 1, fin);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
if (k->qsize) {
|
|
44
|
+
k->q = (scs_int *)scs_calloc(k->qsize, sizeof(scs_int));
|
|
45
|
+
fread(k->q, sizeof(scs_int), k->qsize, fin);
|
|
46
|
+
}
|
|
43
47
|
fread(&(k->ssize), sizeof(scs_int), 1, fin);
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
if (k->ssize) {
|
|
49
|
+
k->s = (scs_int *)scs_calloc(k->ssize, sizeof(scs_int));
|
|
50
|
+
fread(k->s, sizeof(scs_int), k->ssize, fin);
|
|
51
|
+
}
|
|
46
52
|
fread(&(k->ep), sizeof(scs_int), 1, fin);
|
|
47
53
|
fread(&(k->ed), sizeof(scs_int), 1, fin);
|
|
48
54
|
fread(&(k->psize), sizeof(scs_int), 1, fin);
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
if (k->psize) {
|
|
56
|
+
k->p = (scs_float *)scs_calloc(k->psize, sizeof(scs_float));
|
|
57
|
+
fread(k->p, sizeof(scs_float), k->psize, fin);
|
|
58
|
+
}
|
|
51
59
|
return k;
|
|
52
60
|
}
|
|
53
61
|
|
|
@@ -103,11 +111,11 @@ static ScsMatrix *read_amatrix(FILE *fin) {
|
|
|
103
111
|
ScsMatrix *A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
|
104
112
|
fread(&(A->m), sizeof(scs_int), 1, fin);
|
|
105
113
|
fread(&(A->n), sizeof(scs_int), 1, fin);
|
|
106
|
-
A->p = scs_calloc(A->n + 1, sizeof(scs_int));
|
|
114
|
+
A->p = (scs_int *)scs_calloc(A->n + 1, sizeof(scs_int));
|
|
107
115
|
fread(A->p, sizeof(scs_int), A->n + 1, fin);
|
|
108
116
|
Anz = A->p[A->n];
|
|
109
|
-
A->x = scs_calloc(Anz, sizeof(scs_float));
|
|
110
|
-
A->i = scs_calloc(Anz, sizeof(scs_int));
|
|
117
|
+
A->x = (scs_float *)scs_calloc(Anz, sizeof(scs_float));
|
|
118
|
+
A->i = (scs_int *)scs_calloc(Anz, sizeof(scs_int));
|
|
111
119
|
fread(A->x, sizeof(scs_float), Anz, fin);
|
|
112
120
|
fread(A->i, sizeof(scs_int), Anz, fin);
|
|
113
121
|
return A;
|
|
@@ -132,8 +140,8 @@ static ScsData *read_scs_data(FILE *fin) {
|
|
|
132
140
|
ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
|
|
133
141
|
fread(&(d->m), sizeof(scs_int), 1, fin);
|
|
134
142
|
fread(&(d->n), sizeof(scs_int), 1, fin);
|
|
135
|
-
d->b = scs_calloc(d->m, sizeof(scs_float));
|
|
136
|
-
d->c = scs_calloc(d->n, sizeof(scs_float));
|
|
143
|
+
d->b = (scs_float *)scs_calloc(d->m, sizeof(scs_float));
|
|
144
|
+
d->c = (scs_float *)scs_calloc(d->n, sizeof(scs_float));
|
|
137
145
|
fread(d->b, sizeof(scs_float), d->m, fin);
|
|
138
146
|
fread(d->c, sizeof(scs_float), d->n, fin);
|
|
139
147
|
d->A = read_amatrix(fin);
|
|
@@ -146,8 +154,8 @@ static ScsData *read_scs_data(FILE *fin) {
|
|
|
146
154
|
void SCS(write_data)(const ScsData *d, const ScsCone *k,
|
|
147
155
|
const ScsSettings *stgs) {
|
|
148
156
|
FILE *fout = fopen(stgs->write_data_filename, "wb");
|
|
149
|
-
uint32_t scs_int_sz = (uint32_t)
|
|
150
|
-
uint32_t scs_float_sz = (uint32_t)
|
|
157
|
+
uint32_t scs_int_sz = (uint32_t)sizeof(scs_int);
|
|
158
|
+
uint32_t scs_float_sz = (uint32_t)sizeof(scs_float);
|
|
151
159
|
const char *scs_version = SCS_VERSION;
|
|
152
160
|
uint32_t scs_version_sz = (uint32_t)strlen(scs_version);
|
|
153
161
|
scs_printf("writing data to %s\n", stgs->write_data_filename);
|
|
@@ -208,11 +216,13 @@ scs_int SCS(read_data)(const char *filename, ScsData **d, ScsCone **k,
|
|
|
208
216
|
return 0;
|
|
209
217
|
}
|
|
210
218
|
|
|
211
|
-
void SCS(log_data_to_csv)(const
|
|
212
|
-
const
|
|
213
|
-
|
|
219
|
+
void SCS(log_data_to_csv)(const ScsCone *k, const ScsSettings *stgs,
|
|
220
|
+
const ScsWork *w, scs_int iter,
|
|
221
|
+
SCS(timer) * solve_timer) {
|
|
214
222
|
ScsResiduals *r = w->r_orig;
|
|
215
223
|
ScsResiduals *r_n = w->r_normalized;
|
|
224
|
+
ScsSolution *sol = w->xys_orig;
|
|
225
|
+
ScsSolution *sol_n = w->xys_normalized;
|
|
216
226
|
/* if iter 0 open to write, else open to append */
|
|
217
227
|
FILE *fout = fopen(stgs->log_csv_filename, iter == 0 ? "w" : "a");
|
|
218
228
|
if (!fout) {
|
|
@@ -220,13 +230,25 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
|
220
230
|
stgs->log_csv_filename);
|
|
221
231
|
return;
|
|
222
232
|
}
|
|
223
|
-
scs_int l = w->m + w->n + 1;
|
|
233
|
+
scs_int l = w->d->m + w->d->n + 1;
|
|
224
234
|
if (iter == 0) {
|
|
225
235
|
/* need to end in comma so that csv parsing is correct */
|
|
226
236
|
fprintf(fout, "iter,"
|
|
227
237
|
"res_pri,"
|
|
228
238
|
"res_dual,"
|
|
229
239
|
"gap,"
|
|
240
|
+
"x_nrm_inf,"
|
|
241
|
+
"y_nrm_inf,"
|
|
242
|
+
"s_nrm_inf,"
|
|
243
|
+
"x_nrm_2,"
|
|
244
|
+
"y_nrm_2,"
|
|
245
|
+
"s_nrm_2,"
|
|
246
|
+
"x_nrm_inf_normalized,"
|
|
247
|
+
"y_nrm_inf_normalized,"
|
|
248
|
+
"s_nrm_inf_normalized,"
|
|
249
|
+
"x_nrm_2_normalized,"
|
|
250
|
+
"y_nrm_2_normalized,"
|
|
251
|
+
"s_nrm_2_normalized,"
|
|
230
252
|
"ax_s_btau_nrm_inf,"
|
|
231
253
|
"px_aty_ctau_nrm_inf,"
|
|
232
254
|
"ax_s_btau_nrm_2,"
|
|
@@ -252,6 +274,11 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
|
252
274
|
"dobj_normalized,"
|
|
253
275
|
"tau_normalized,"
|
|
254
276
|
"kap_normalized,"
|
|
277
|
+
"ax_nrm_inf,"
|
|
278
|
+
"px_nrm_inf,"
|
|
279
|
+
"aty_nrm_inf,"
|
|
280
|
+
"b_nrm_inf,"
|
|
281
|
+
"c_nrm_inf,"
|
|
255
282
|
"scale,"
|
|
256
283
|
"diff_u_ut_nrm_2,"
|
|
257
284
|
"diff_v_v_prev_nrm_2,"
|
|
@@ -267,10 +294,22 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
|
267
294
|
fprintf(fout, "%.16e,", r->res_pri);
|
|
268
295
|
fprintf(fout, "%.16e,", r->res_dual);
|
|
269
296
|
fprintf(fout, "%.16e,", r->gap);
|
|
270
|
-
fprintf(fout, "%.16e,", SCS(norm_inf)(
|
|
271
|
-
fprintf(fout, "%.16e,", SCS(norm_inf)(
|
|
272
|
-
fprintf(fout, "%.16e,", SCS(
|
|
273
|
-
fprintf(fout, "%.16e,", SCS(norm_2)(
|
|
297
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol->x, w->d->n));
|
|
298
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol->y, w->d->m));
|
|
299
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol->s, w->d->m));
|
|
300
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol->x, w->d->n));
|
|
301
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol->y, w->d->m));
|
|
302
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol->s, w->d->m));
|
|
303
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->x, w->d->n));
|
|
304
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->y, w->d->m));
|
|
305
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->s, w->d->m));
|
|
306
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->x, w->d->n));
|
|
307
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->y, w->d->m));
|
|
308
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->s, w->d->m));
|
|
309
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->ax_s_btau, w->d->m));
|
|
310
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->px_aty_ctau, w->d->n));
|
|
311
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(r->ax_s_btau, w->d->m));
|
|
312
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(r->px_aty_ctau, w->d->n));
|
|
274
313
|
fprintf(fout, "%.16e,", r->res_infeas);
|
|
275
314
|
fprintf(fout, "%.16e,", r->res_unbdd_a);
|
|
276
315
|
fprintf(fout, "%.16e,", r->res_unbdd_p);
|
|
@@ -281,10 +320,10 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
|
281
320
|
fprintf(fout, "%.16e,", r_n->res_pri);
|
|
282
321
|
fprintf(fout, "%.16e,", r_n->res_dual);
|
|
283
322
|
fprintf(fout, "%.16e,", r_n->gap);
|
|
284
|
-
fprintf(fout, "%.16e,", SCS(norm_inf)(r_n->ax_s_btau, w->m));
|
|
285
|
-
fprintf(fout, "%.16e,", SCS(norm_inf)(r_n->px_aty_ctau, w->n));
|
|
286
|
-
fprintf(fout, "%.16e,", SCS(norm_2)(r_n->ax_s_btau, w->m));
|
|
287
|
-
fprintf(fout, "%.16e,", SCS(norm_2)(r_n->px_aty_ctau, w->n));
|
|
323
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r_n->ax_s_btau, w->d->m));
|
|
324
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r_n->px_aty_ctau, w->d->n));
|
|
325
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(r_n->ax_s_btau, w->d->m));
|
|
326
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(r_n->px_aty_ctau, w->d->n));
|
|
288
327
|
fprintf(fout, "%.16e,", r_n->res_infeas);
|
|
289
328
|
fprintf(fout, "%.16e,", r_n->res_unbdd_a);
|
|
290
329
|
fprintf(fout, "%.16e,", r_n->res_unbdd_p);
|
|
@@ -292,7 +331,12 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
|
292
331
|
fprintf(fout, "%.16e,", r_n->dobj);
|
|
293
332
|
fprintf(fout, "%.16e,", r_n->tau);
|
|
294
333
|
fprintf(fout, "%.16e,", r_n->kap);
|
|
295
|
-
fprintf(fout, "%.16e,", w->
|
|
334
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->ax, w->d->m));
|
|
335
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->px, w->d->n));
|
|
336
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->aty, w->d->n));
|
|
337
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(w->b_orig, w->d->m));
|
|
338
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(w->c_orig, w->d->n));
|
|
339
|
+
fprintf(fout, "%.16e,", w->stgs->scale);
|
|
296
340
|
fprintf(fout, "%.16e,", SCS(norm_diff)(w->u, w->u_t, l));
|
|
297
341
|
fprintf(fout, "%.16e,", SCS(norm_diff)(w->v, w->v_prev, l));
|
|
298
342
|
fprintf(fout, "%.16e,", SCS(norm_inf_diff)(w->u, w->u_t, l));
|