scs 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/README.md +42 -13
  4. data/lib/scs/ffi.rb +1 -7
  5. data/lib/scs/matrix.rb +72 -0
  6. data/lib/scs/solver.rb +19 -26
  7. data/lib/scs/version.rb +1 -1
  8. data/lib/scs.rb +1 -0
  9. data/vendor/scs/CITATION.cff +1 -1
  10. data/vendor/scs/CMakeLists.txt +55 -7
  11. data/vendor/scs/Makefile +9 -9
  12. data/vendor/scs/README.md +4 -1
  13. data/vendor/scs/include/aa.h +1 -1
  14. data/vendor/scs/include/cones.h +17 -12
  15. data/vendor/scs/include/glbopts.h +27 -66
  16. data/vendor/scs/include/linalg.h +2 -1
  17. data/vendor/scs/include/linsys.h +13 -13
  18. data/vendor/scs/include/normalize.h +7 -5
  19. data/vendor/scs/include/rw.h +3 -3
  20. data/vendor/scs/include/scs.h +85 -106
  21. data/vendor/scs/include/scs_types.h +34 -0
  22. data/vendor/scs/include/scs_work.h +80 -0
  23. data/vendor/scs/include/util.h +3 -1
  24. data/vendor/scs/linsys/cpu/direct/private.c +86 -73
  25. data/vendor/scs/linsys/cpu/direct/private.h +2 -2
  26. data/vendor/scs/linsys/cpu/indirect/private.c +42 -33
  27. data/vendor/scs/linsys/cpu/indirect/private.h +1 -2
  28. data/vendor/scs/linsys/csparse.c +3 -3
  29. data/vendor/scs/linsys/external/amd/LICENSE.txt +0 -897
  30. data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +9 -7
  31. data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +1 -1
  32. data/vendor/scs/linsys/external/amd/amd_order.c +5 -5
  33. data/vendor/scs/linsys/gpu/gpu.h +8 -11
  34. data/vendor/scs/linsys/gpu/indirect/private.c +72 -49
  35. data/vendor/scs/linsys/gpu/indirect/private.h +14 -13
  36. data/vendor/scs/linsys/scs_matrix.c +55 -104
  37. data/vendor/scs/linsys/scs_matrix.h +5 -4
  38. data/vendor/scs/scs.mk +1 -5
  39. data/vendor/scs/src/aa.c +13 -8
  40. data/vendor/scs/src/cones.c +197 -108
  41. data/vendor/scs/src/linalg.c +25 -0
  42. data/vendor/scs/src/normalize.c +75 -26
  43. data/vendor/scs/src/rw.c +74 -30
  44. data/vendor/scs/src/scs.c +300 -264
  45. data/vendor/scs/src/scs_version.c +8 -6
  46. data/vendor/scs/src/util.c +27 -13
  47. data/vendor/scs/test/minunit.h +6 -1
  48. data/vendor/scs/test/problem_utils.h +28 -35
  49. data/vendor/scs/test/problems/degenerate.h +2 -1
  50. data/vendor/scs/test/problems/hs21_tiny_qp.h +2 -1
  51. data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +6 -2
  52. data/vendor/scs/test/problems/infeasible_tiny_qp.h +2 -1
  53. data/vendor/scs/test/problems/qafiro_tiny_qp.h +5 -4
  54. data/vendor/scs/test/problems/random_prob.h +6 -2
  55. data/vendor/scs/test/problems/rob_gauss_cov_est.h +9 -2
  56. data/vendor/scs/test/problems/small_lp.h +7 -2
  57. data/vendor/scs/test/problems/small_qp.h +387 -0
  58. data/vendor/scs/test/problems/{test_fails.h → test_validation.h} +7 -4
  59. data/vendor/scs/test/problems/unbounded_tiny_qp.h +4 -4
  60. data/vendor/scs/test/random_socp_prob.c +4 -2
  61. data/vendor/scs/test/run_from_file.c +16 -4
  62. data/vendor/scs/test/run_tests.c +23 -14
  63. metadata +10 -35
  64. data/vendor/scs/linsys/cpu/direct/private.o +0 -0
  65. data/vendor/scs/linsys/cpu/indirect/private.o +0 -0
  66. data/vendor/scs/linsys/csparse.o +0 -0
  67. data/vendor/scs/linsys/external/amd/SuiteSparse_config.o +0 -0
  68. data/vendor/scs/linsys/external/amd/amd_1.o +0 -0
  69. data/vendor/scs/linsys/external/amd/amd_2.o +0 -0
  70. data/vendor/scs/linsys/external/amd/amd_aat.o +0 -0
  71. data/vendor/scs/linsys/external/amd/amd_control.o +0 -0
  72. data/vendor/scs/linsys/external/amd/amd_defaults.o +0 -0
  73. data/vendor/scs/linsys/external/amd/amd_dump.o +0 -0
  74. data/vendor/scs/linsys/external/amd/amd_global.o +0 -0
  75. data/vendor/scs/linsys/external/amd/amd_info.o +0 -0
  76. data/vendor/scs/linsys/external/amd/amd_order.o +0 -0
  77. data/vendor/scs/linsys/external/amd/amd_post_tree.o +0 -0
  78. data/vendor/scs/linsys/external/amd/amd_postorder.o +0 -0
  79. data/vendor/scs/linsys/external/amd/amd_preprocess.o +0 -0
  80. data/vendor/scs/linsys/external/amd/amd_valid.o +0 -0
  81. data/vendor/scs/linsys/external/qdldl/qdldl.o +0 -0
  82. data/vendor/scs/linsys/scs_matrix.o +0 -0
  83. data/vendor/scs/src/aa.o +0 -0
  84. data/vendor/scs/src/cones.o +0 -0
  85. data/vendor/scs/src/ctrlc.o +0 -0
  86. data/vendor/scs/src/linalg.o +0 -0
  87. data/vendor/scs/src/normalize.o +0 -0
  88. data/vendor/scs/src/rw.o +0 -0
  89. data/vendor/scs/src/scs.o +0 -0
  90. data/vendor/scs/src/scs_indir.o +0 -0
  91. data/vendor/scs/src/scs_version.o +0 -0
  92. 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
- k->bl = scs_calloc(MAX(k->bsize - 1, 0), sizeof(scs_float));
37
- k->bu = scs_calloc(MAX(k->bsize - 1, 0), sizeof(scs_float));
38
- fread(k->bl, sizeof(scs_float), MAX(k->bsize - 1, 0), fin);
39
- fread(k->bu, sizeof(scs_float), MAX(k->bsize - 1, 0), fin);
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
- k->q = scs_calloc(k->qsize, sizeof(scs_int));
42
- fread(k->q, sizeof(scs_int), k->qsize, fin);
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
- k->s = scs_calloc(k->ssize, sizeof(scs_int));
45
- fread(k->s, sizeof(scs_int), k->ssize, fin);
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
- k->p = scs_calloc(k->psize, sizeof(scs_float));
50
- fread(k->p, sizeof(scs_float), k->psize, fin);
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)SCS(sizeof_int)();
150
- uint32_t scs_float_sz = (uint32_t)SCS(sizeof_float)();
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 ScsData *d, const ScsCone *k,
212
- const ScsSettings *stgs, const ScsWork *w,
213
- scs_int iter, SCS(timer) * solve_timer) {
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)(r->ax_s_btau, w->m));
271
- fprintf(fout, "%.16e,", SCS(norm_inf)(r->px_aty_ctau, w->n));
272
- fprintf(fout, "%.16e,", SCS(norm_2)(r->ax_s_btau, w->m));
273
- fprintf(fout, "%.16e,", SCS(norm_2)(r->px_aty_ctau, w->n));
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->scale);
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));