scs 0.2.2 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/LICENSE.txt +18 -18
  4. data/README.md +19 -14
  5. data/lib/scs/ffi.rb +31 -20
  6. data/lib/scs/solver.rb +32 -9
  7. data/lib/scs/version.rb +1 -1
  8. data/vendor/scs/CITATION.cff +39 -0
  9. data/vendor/scs/CMakeLists.txt +320 -0
  10. data/vendor/scs/Makefile +32 -23
  11. data/vendor/scs/README.md +9 -218
  12. data/vendor/scs/include/aa.h +67 -23
  13. data/vendor/scs/include/cones.h +22 -19
  14. data/vendor/scs/include/glbopts.h +107 -79
  15. data/vendor/scs/include/linalg.h +3 -4
  16. data/vendor/scs/include/linsys.h +58 -44
  17. data/vendor/scs/include/normalize.h +6 -5
  18. data/vendor/scs/include/rw.h +8 -2
  19. data/vendor/scs/include/scs.h +257 -141
  20. data/vendor/scs/include/scs_types.h +34 -0
  21. data/vendor/scs/include/scs_work.h +83 -0
  22. data/vendor/scs/include/util.h +3 -15
  23. data/vendor/scs/linsys/cpu/direct/private.c +241 -232
  24. data/vendor/scs/linsys/cpu/direct/private.h +13 -7
  25. data/vendor/scs/linsys/cpu/indirect/private.c +194 -118
  26. data/vendor/scs/linsys/cpu/indirect/private.h +7 -4
  27. data/vendor/scs/linsys/csparse.c +87 -0
  28. data/vendor/scs/linsys/csparse.h +34 -0
  29. data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +6 -6
  30. data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +6 -1
  31. data/vendor/scs/linsys/external/amd/amd_internal.h +1 -1
  32. data/vendor/scs/linsys/external/amd/amd_order.c +5 -5
  33. data/vendor/scs/linsys/external/qdldl/changes +2 -0
  34. data/vendor/scs/linsys/external/qdldl/qdldl.c +29 -46
  35. data/vendor/scs/linsys/external/qdldl/qdldl.h +33 -41
  36. data/vendor/scs/linsys/external/qdldl/qdldl_types.h +11 -3
  37. data/vendor/scs/linsys/gpu/gpu.c +58 -21
  38. data/vendor/scs/linsys/gpu/gpu.h +70 -35
  39. data/vendor/scs/linsys/gpu/indirect/private.c +394 -157
  40. data/vendor/scs/linsys/gpu/indirect/private.h +27 -12
  41. data/vendor/scs/linsys/scs_matrix.c +478 -0
  42. data/vendor/scs/linsys/scs_matrix.h +70 -0
  43. data/vendor/scs/scs.mk +14 -10
  44. data/vendor/scs/src/aa.c +394 -110
  45. data/vendor/scs/src/cones.c +497 -359
  46. data/vendor/scs/src/ctrlc.c +15 -5
  47. data/vendor/scs/src/linalg.c +107 -26
  48. data/vendor/scs/src/normalize.c +30 -72
  49. data/vendor/scs/src/rw.c +202 -27
  50. data/vendor/scs/src/scs.c +769 -571
  51. data/vendor/scs/src/scs_version.c +11 -3
  52. data/vendor/scs/src/util.c +37 -106
  53. data/vendor/scs/test/minunit.h +22 -8
  54. data/vendor/scs/test/problem_utils.h +180 -25
  55. data/vendor/scs/test/problems/degenerate.h +130 -0
  56. data/vendor/scs/test/problems/hs21_tiny_qp.h +124 -0
  57. data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +116 -0
  58. data/vendor/scs/test/problems/infeasible_tiny_qp.h +100 -0
  59. data/vendor/scs/test/problems/qafiro_tiny_qp.h +199 -0
  60. data/vendor/scs/test/problems/random_prob +0 -0
  61. data/vendor/scs/test/problems/random_prob.h +45 -0
  62. data/vendor/scs/test/problems/rob_gauss_cov_est.h +188 -31
  63. data/vendor/scs/test/problems/small_lp.h +14 -13
  64. data/vendor/scs/test/problems/small_qp.h +352 -0
  65. data/vendor/scs/test/problems/test_validation.h +43 -0
  66. data/vendor/scs/test/problems/unbounded_tiny_qp.h +82 -0
  67. data/vendor/scs/test/random_socp_prob.c +54 -53
  68. data/vendor/scs/test/rng.h +109 -0
  69. data/vendor/scs/test/run_from_file.c +20 -11
  70. data/vendor/scs/test/run_tests.c +35 -2
  71. metadata +29 -98
  72. data/vendor/scs/linsys/amatrix.c +0 -305
  73. data/vendor/scs/linsys/amatrix.h +0 -36
  74. data/vendor/scs/linsys/amatrix.o +0 -0
  75. data/vendor/scs/linsys/cpu/direct/private.o +0 -0
  76. data/vendor/scs/linsys/cpu/indirect/private.o +0 -0
  77. data/vendor/scs/linsys/external/amd/SuiteSparse_config.o +0 -0
  78. data/vendor/scs/linsys/external/amd/amd_1.o +0 -0
  79. data/vendor/scs/linsys/external/amd/amd_2.o +0 -0
  80. data/vendor/scs/linsys/external/amd/amd_aat.o +0 -0
  81. data/vendor/scs/linsys/external/amd/amd_control.o +0 -0
  82. data/vendor/scs/linsys/external/amd/amd_defaults.o +0 -0
  83. data/vendor/scs/linsys/external/amd/amd_dump.o +0 -0
  84. data/vendor/scs/linsys/external/amd/amd_global.o +0 -0
  85. data/vendor/scs/linsys/external/amd/amd_info.o +0 -0
  86. data/vendor/scs/linsys/external/amd/amd_order.o +0 -0
  87. data/vendor/scs/linsys/external/amd/amd_post_tree.o +0 -0
  88. data/vendor/scs/linsys/external/amd/amd_postorder.o +0 -0
  89. data/vendor/scs/linsys/external/amd/amd_preprocess.o +0 -0
  90. data/vendor/scs/linsys/external/amd/amd_valid.o +0 -0
  91. data/vendor/scs/linsys/external/qdldl/qdldl.o +0 -0
  92. data/vendor/scs/src/aa.o +0 -0
  93. data/vendor/scs/src/cones.o +0 -0
  94. data/vendor/scs/src/ctrlc.o +0 -0
  95. data/vendor/scs/src/linalg.o +0 -0
  96. data/vendor/scs/src/normalize.o +0 -0
  97. data/vendor/scs/src/rw.o +0 -0
  98. data/vendor/scs/src/scs.o +0 -0
  99. data/vendor/scs/src/scs_version.o +0 -0
  100. data/vendor/scs/src/util.o +0 -0
  101. data/vendor/scs/test/data/small_random_socp +0 -0
  102. data/vendor/scs/test/problems/small_random_socp.h +0 -33
  103. data/vendor/scs/test/run_tests +0 -2
data/vendor/scs/src/rw.c CHANGED
@@ -4,16 +4,20 @@
4
4
  #include <stdio.h>
5
5
  #include <stdlib.h>
6
6
 
7
- #include "amatrix.h"
7
+ #include "linalg.h"
8
8
  #include "scs.h"
9
+ #include "scs_matrix.h"
9
10
  #include "util.h"
10
11
 
11
12
  /* writes/reads problem data to/from filename */
12
13
  /* This is a VERY naive implementation, doesn't care about portability etc */
13
14
 
14
15
  static void write_scs_cone(const ScsCone *k, FILE *fout) {
15
- fwrite(&(k->f), sizeof(scs_int), 1, fout);
16
+ fwrite(&(k->z), sizeof(scs_int), 1, fout);
16
17
  fwrite(&(k->l), sizeof(scs_int), 1, fout);
18
+ fwrite(&(k->bsize), sizeof(scs_int), 1, fout);
19
+ fwrite(k->bl, sizeof(scs_float), MAX(k->bsize - 1, 0), fout);
20
+ fwrite(k->bu, sizeof(scs_float), MAX(k->bsize - 1, 0), fout);
17
21
  fwrite(&(k->qsize), sizeof(scs_int), 1, fout);
18
22
  fwrite(k->q, sizeof(scs_int), k->qsize, fout);
19
23
  fwrite(&(k->ssize), sizeof(scs_int), 1, fout);
@@ -26,18 +30,23 @@ static void write_scs_cone(const ScsCone *k, FILE *fout) {
26
30
 
27
31
  static ScsCone *read_scs_cone(FILE *fin) {
28
32
  ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
29
- fread(&(k->f), sizeof(scs_int), 1, fin);
33
+ fread(&(k->z), sizeof(scs_int), 1, fin);
30
34
  fread(&(k->l), sizeof(scs_int), 1, fin);
35
+ fread(&(k->bsize), sizeof(scs_int), 1, fin);
36
+ k->bl = (scs_float *)scs_calloc(MAX(k->bsize - 1, 0), sizeof(scs_float));
37
+ k->bu = (scs_float *)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);
31
40
  fread(&(k->qsize), sizeof(scs_int), 1, fin);
32
- k->q = scs_calloc(k->qsize, sizeof(scs_int));
41
+ k->q = (scs_int *)scs_calloc(k->qsize, sizeof(scs_int));
33
42
  fread(k->q, sizeof(scs_int), k->qsize, fin);
34
43
  fread(&(k->ssize), sizeof(scs_int), 1, fin);
35
- k->s = scs_calloc(k->ssize, sizeof(scs_int));
44
+ k->s = (scs_int *)scs_calloc(k->ssize, sizeof(scs_int));
36
45
  fread(k->s, sizeof(scs_int), k->ssize, fin);
37
46
  fread(&(k->ep), sizeof(scs_int), 1, fin);
38
47
  fread(&(k->ed), sizeof(scs_int), 1, fin);
39
48
  fread(&(k->psize), sizeof(scs_int), 1, fin);
40
- k->p = scs_calloc(k->psize, sizeof(scs_int));
49
+ k->p = (scs_float *)scs_calloc(k->psize, sizeof(scs_float));
41
50
  fread(k->p, sizeof(scs_float), k->psize, fin);
42
51
  return k;
43
52
  }
@@ -49,13 +58,17 @@ static void write_scs_stgs(const ScsSettings *s, FILE *fout) {
49
58
  fwrite(&(s->scale), sizeof(scs_float), 1, fout);
50
59
  fwrite(&(s->rho_x), sizeof(scs_float), 1, fout);
51
60
  fwrite(&(s->max_iters), sizeof(scs_int), 1, fout);
52
- fwrite(&(s->eps), sizeof(scs_float), 1, fout);
61
+ fwrite(&(s->eps_abs), sizeof(scs_float), 1, fout);
62
+ fwrite(&(s->eps_rel), sizeof(scs_float), 1, fout);
63
+ fwrite(&(s->eps_infeas), sizeof(scs_float), 1, fout);
53
64
  fwrite(&(s->alpha), sizeof(scs_float), 1, fout);
54
- fwrite(&(s->cg_rate), sizeof(scs_float), 1, fout);
55
65
  fwrite(&(s->verbose), sizeof(scs_int), 1, fout);
56
66
  fwrite(&warm_start, sizeof(scs_int), 1, fout);
57
67
  fwrite(&(s->acceleration_lookback), sizeof(scs_int), 1, fout);
68
+ fwrite(&(s->acceleration_interval), sizeof(scs_int), 1, fout);
69
+ fwrite(&(s->adaptive_scale), sizeof(scs_int), 1, fout);
58
70
  /* Do not write the write_data_filename */
71
+ /* Do not write the log_csv_filename */
59
72
  }
60
73
 
61
74
  static ScsSettings *read_scs_stgs(FILE *fin) {
@@ -64,12 +77,15 @@ static ScsSettings *read_scs_stgs(FILE *fin) {
64
77
  fread(&(s->scale), sizeof(scs_float), 1, fin);
65
78
  fread(&(s->rho_x), sizeof(scs_float), 1, fin);
66
79
  fread(&(s->max_iters), sizeof(scs_int), 1, fin);
67
- fread(&(s->eps), sizeof(scs_float), 1, fin);
80
+ fread(&(s->eps_abs), sizeof(scs_float), 1, fin);
81
+ fread(&(s->eps_rel), sizeof(scs_float), 1, fin);
82
+ fread(&(s->eps_infeas), sizeof(scs_float), 1, fin);
68
83
  fread(&(s->alpha), sizeof(scs_float), 1, fin);
69
- fread(&(s->cg_rate), sizeof(scs_float), 1, fin);
70
84
  fread(&(s->verbose), sizeof(scs_int), 1, fin);
71
85
  fread(&(s->warm_start), sizeof(scs_int), 1, fin);
72
86
  fread(&(s->acceleration_lookback), sizeof(scs_int), 1, fin);
87
+ fread(&(s->acceleration_interval), sizeof(scs_int), 1, fin);
88
+ fread(&(s->adaptive_scale), sizeof(scs_int), 1, fin);
73
89
  return s;
74
90
  }
75
91
 
@@ -87,53 +103,70 @@ static ScsMatrix *read_amatrix(FILE *fin) {
87
103
  ScsMatrix *A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
88
104
  fread(&(A->m), sizeof(scs_int), 1, fin);
89
105
  fread(&(A->n), sizeof(scs_int), 1, fin);
90
- A->p = scs_calloc(A->n + 1, sizeof(scs_int));
106
+ A->p = (scs_int *)scs_calloc(A->n + 1, sizeof(scs_int));
91
107
  fread(A->p, sizeof(scs_int), A->n + 1, fin);
92
108
  Anz = A->p[A->n];
93
- A->x = scs_calloc(Anz, sizeof(scs_float));
94
- A->i = scs_calloc(Anz, sizeof(scs_int));
109
+ A->x = (scs_float *)scs_calloc(Anz, sizeof(scs_float));
110
+ A->i = (scs_int *)scs_calloc(Anz, sizeof(scs_int));
95
111
  fread(A->x, sizeof(scs_float), Anz, fin);
96
112
  fread(A->i, sizeof(scs_int), Anz, fin);
97
113
  return A;
98
114
  }
99
115
 
100
116
  static void write_scs_data(const ScsData *d, FILE *fout) {
117
+ scs_int has_p = d->P ? 1 : 0;
101
118
  fwrite(&(d->m), sizeof(scs_int), 1, fout);
102
119
  fwrite(&(d->n), sizeof(scs_int), 1, fout);
103
120
  fwrite(d->b, sizeof(scs_float), d->m, fout);
104
121
  fwrite(d->c, sizeof(scs_float), d->n, fout);
105
- write_scs_stgs(d->stgs, fout);
106
122
  write_amatrix(d->A, fout);
123
+ /* write has P bit */
124
+ fwrite(&has_p, sizeof(scs_int), 1, fout);
125
+ if (d->P) {
126
+ write_amatrix(d->P, fout);
127
+ }
107
128
  }
108
129
 
109
130
  static ScsData *read_scs_data(FILE *fin) {
131
+ scs_int has_p = 0;
110
132
  ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
111
133
  fread(&(d->m), sizeof(scs_int), 1, fin);
112
134
  fread(&(d->n), sizeof(scs_int), 1, fin);
113
- d->b = scs_calloc(d->m, sizeof(scs_float));
114
- d->c = scs_calloc(d->n, sizeof(scs_float));
135
+ d->b = (scs_float *)scs_calloc(d->m, sizeof(scs_float));
136
+ d->c = (scs_float *)scs_calloc(d->n, sizeof(scs_float));
115
137
  fread(d->b, sizeof(scs_float), d->m, fin);
116
138
  fread(d->c, sizeof(scs_float), d->n, fin);
117
- d->stgs = read_scs_stgs(fin);
118
139
  d->A = read_amatrix(fin);
140
+ /* If has_p bit is not set or this hits end of file then has_p = 0 */
141
+ has_p &= fread(&has_p, sizeof(scs_int), 1, fin);
142
+ d->P = has_p ? read_amatrix(fin) : SCS_NULL;
119
143
  return d;
120
144
  }
121
145
 
122
- void SCS(write_data)(const ScsData *d, const ScsCone *k) {
123
- FILE *fout = fopen(d->stgs->write_data_filename, "wb");
146
+ void SCS(write_data)(const ScsData *d, const ScsCone *k,
147
+ const ScsSettings *stgs) {
148
+ FILE *fout = fopen(stgs->write_data_filename, "wb");
124
149
  uint32_t scs_int_sz = (uint32_t)sizeof(scs_int);
125
150
  uint32_t scs_float_sz = (uint32_t)sizeof(scs_float);
126
- scs_printf("writing data to %s\n", d->stgs->write_data_filename);
151
+ const char *scs_version = SCS_VERSION;
152
+ uint32_t scs_version_sz = (uint32_t)strlen(scs_version);
153
+ scs_printf("writing data to %s\n", stgs->write_data_filename);
127
154
  fwrite(&(scs_int_sz), sizeof(uint32_t), 1, fout);
128
155
  fwrite(&(scs_float_sz), sizeof(uint32_t), 1, fout);
156
+ fwrite(&(scs_version_sz), sizeof(uint32_t), 1, fout);
157
+ fwrite(scs_version, 1, scs_version_sz, fout);
129
158
  write_scs_cone(k, fout);
130
159
  write_scs_data(d, fout);
160
+ write_scs_stgs(stgs, fout);
131
161
  fclose(fout);
132
162
  }
133
163
 
134
- scs_int SCS(read_data)(const char *filename, ScsData **d, ScsCone **k) {
164
+ scs_int SCS(read_data)(const char *filename, ScsData **d, ScsCone **k,
165
+ ScsSettings **stgs) {
135
166
  uint32_t file_int_sz;
136
167
  uint32_t file_float_sz;
168
+ uint32_t file_version_sz;
169
+ char file_version[16];
137
170
  FILE *fin = fopen(filename, "rb");
138
171
  if (!fin) {
139
172
  scs_printf("Error reading file %s\n", filename);
@@ -142,26 +175,168 @@ scs_int SCS(read_data)(const char *filename, ScsData **d, ScsCone **k) {
142
175
  scs_printf("Reading data from %s\n", filename);
143
176
  fread(&(file_int_sz), sizeof(uint32_t), 1, fin);
144
177
  fread(&(file_float_sz), sizeof(uint32_t), 1, fin);
145
-
146
178
  if (file_int_sz != (uint32_t)sizeof(scs_int)) {
147
179
  scs_printf(
148
- "Error, sizeof(file int) is %lu, but scs expects sizeof(int) "
149
- "%lu, scs should be recompiled with correct flags.\n",
180
+ "Error, sizeof(file int) is %lu, but scs expects sizeof(int) %lu, "
181
+ "scs should be recompiled with correct flags.\n",
150
182
  (unsigned long)file_int_sz, (unsigned long)sizeof(scs_int));
151
183
  fclose(fin);
152
184
  return -1;
153
185
  }
154
186
  if (file_float_sz != (uint32_t)sizeof(scs_float)) {
155
187
  scs_printf(
156
- "Error, sizeof(file float) is %lu, but scs expects "
157
- "sizeof(float) %lu, scs should be recompiled with the correct flags.\n",
188
+ "Error, sizeof(file float) is %lu, but scs expects sizeof(float) %lu, "
189
+ "scs should be recompiled with the correct flags.\n",
158
190
  (unsigned long)file_float_sz, (unsigned long)sizeof(scs_float));
159
191
  fclose(fin);
160
192
  return -1;
161
193
  }
162
-
194
+ fread(&(file_version_sz), sizeof(uint32_t), 1, fin);
195
+ fread(file_version, 1, file_version_sz, fin);
196
+ file_version[file_version_sz] = '\0';
197
+ if (strcmp(file_version, SCS_VERSION) != 0) {
198
+ scs_printf("************************************************************\n"
199
+ "Warning: SCS file version %s, this is SCS version %s.\n"
200
+ "The file reading / writing logic might have changed.\n"
201
+ "************************************************************\n",
202
+ file_version, SCS_VERSION);
203
+ }
163
204
  *k = read_scs_cone(fin);
164
205
  *d = read_scs_data(fin);
206
+ *stgs = read_scs_stgs(fin);
165
207
  fclose(fin);
166
208
  return 0;
167
209
  }
210
+
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) {
214
+ ScsResiduals *r = w->r_orig;
215
+ ScsResiduals *r_n = w->r_normalized;
216
+ ScsSolution *sol = w->xys_orig;
217
+ ScsSolution *sol_n = w->xys_normalized;
218
+ /* if iter 0 open to write, else open to append */
219
+ FILE *fout = fopen(stgs->log_csv_filename, iter == 0 ? "w" : "a");
220
+ if (!fout) {
221
+ scs_printf("Error: Could not open %s for writing\n",
222
+ stgs->log_csv_filename);
223
+ return;
224
+ }
225
+ scs_int l = w->m + w->n + 1;
226
+ if (iter == 0) {
227
+ /* need to end in comma so that csv parsing is correct */
228
+ fprintf(fout, "iter,"
229
+ "res_pri,"
230
+ "res_dual,"
231
+ "gap,"
232
+ "x_nrm_inf,"
233
+ "y_nrm_inf,"
234
+ "s_nrm_inf,"
235
+ "x_nrm_2,"
236
+ "y_nrm_2,"
237
+ "s_nrm_2,"
238
+ "x_nrm_inf_normalized,"
239
+ "y_nrm_inf_normalized,"
240
+ "s_nrm_inf_normalized,"
241
+ "x_nrm_2_normalized,"
242
+ "y_nrm_2_normalized,"
243
+ "s_nrm_2_normalized,"
244
+ "ax_s_btau_nrm_inf,"
245
+ "px_aty_ctau_nrm_inf,"
246
+ "ax_s_btau_nrm_2,"
247
+ "px_aty_ctau_nrm_2,"
248
+ "res_infeas,"
249
+ "res_unbdd_a,"
250
+ "res_unbdd_p,"
251
+ "pobj,"
252
+ "dobj,"
253
+ "tau,"
254
+ "kap,"
255
+ "res_pri_normalized,"
256
+ "res_dual_normalized,"
257
+ "gap_normalized,"
258
+ "ax_s_btau_nrm_inf_normalized,"
259
+ "px_aty_ctau_nrm_inf_normalized,"
260
+ "ax_s_btau_nrm_2_normalized,"
261
+ "px_aty_ctau_nrm_2_normalized,"
262
+ "res_infeas_normalized,"
263
+ "res_unbdd_a_normalized,"
264
+ "res_unbdd_p_normalized,"
265
+ "pobj_normalized,"
266
+ "dobj_normalized,"
267
+ "tau_normalized,"
268
+ "kap_normalized,"
269
+ "ax_nrm_inf,"
270
+ "px_nrm_inf,"
271
+ "aty_nrm_inf,"
272
+ "b_nrm_inf,"
273
+ "c_nrm_inf,"
274
+ "scale,"
275
+ "diff_u_ut_nrm_2,"
276
+ "diff_v_v_prev_nrm_2,"
277
+ "diff_u_ut_nrm_inf,"
278
+ "diff_v_v_prev_nrm_inf,"
279
+ "aa_norm,"
280
+ "accepted_accel_steps,"
281
+ "rejected_accel_steps,"
282
+ "time,"
283
+ "\n");
284
+ }
285
+ fprintf(fout, "%li,", (long)iter);
286
+ fprintf(fout, "%.16e,", r->res_pri);
287
+ fprintf(fout, "%.16e,", r->res_dual);
288
+ fprintf(fout, "%.16e,", r->gap);
289
+ fprintf(fout, "%.16e,", SCS(norm_inf)(sol->x, w->n));
290
+ fprintf(fout, "%.16e,", SCS(norm_inf)(sol->y, w->m));
291
+ fprintf(fout, "%.16e,", SCS(norm_inf)(sol->s, w->m));
292
+ fprintf(fout, "%.16e,", SCS(norm_2)(sol->x, w->n));
293
+ fprintf(fout, "%.16e,", SCS(norm_2)(sol->y, w->m));
294
+ fprintf(fout, "%.16e,", SCS(norm_2)(sol->s, w->m));
295
+ fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->x, w->n));
296
+ fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->y, w->m));
297
+ fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->s, w->m));
298
+ fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->x, w->n));
299
+ fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->y, w->m));
300
+ fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->s, w->m));
301
+ fprintf(fout, "%.16e,", SCS(norm_inf)(r->ax_s_btau, w->m));
302
+ fprintf(fout, "%.16e,", SCS(norm_inf)(r->px_aty_ctau, w->n));
303
+ fprintf(fout, "%.16e,", SCS(norm_2)(r->ax_s_btau, w->m));
304
+ fprintf(fout, "%.16e,", SCS(norm_2)(r->px_aty_ctau, w->n));
305
+ fprintf(fout, "%.16e,", r->res_infeas);
306
+ fprintf(fout, "%.16e,", r->res_unbdd_a);
307
+ fprintf(fout, "%.16e,", r->res_unbdd_p);
308
+ fprintf(fout, "%.16e,", r->pobj);
309
+ fprintf(fout, "%.16e,", r->dobj);
310
+ fprintf(fout, "%.16e,", r->tau);
311
+ fprintf(fout, "%.16e,", r->kap);
312
+ fprintf(fout, "%.16e,", r_n->res_pri);
313
+ fprintf(fout, "%.16e,", r_n->res_dual);
314
+ fprintf(fout, "%.16e,", r_n->gap);
315
+ fprintf(fout, "%.16e,", SCS(norm_inf)(r_n->ax_s_btau, w->m));
316
+ fprintf(fout, "%.16e,", SCS(norm_inf)(r_n->px_aty_ctau, w->n));
317
+ fprintf(fout, "%.16e,", SCS(norm_2)(r_n->ax_s_btau, w->m));
318
+ fprintf(fout, "%.16e,", SCS(norm_2)(r_n->px_aty_ctau, w->n));
319
+ fprintf(fout, "%.16e,", r_n->res_infeas);
320
+ fprintf(fout, "%.16e,", r_n->res_unbdd_a);
321
+ fprintf(fout, "%.16e,", r_n->res_unbdd_p);
322
+ fprintf(fout, "%.16e,", r_n->pobj);
323
+ fprintf(fout, "%.16e,", r_n->dobj);
324
+ fprintf(fout, "%.16e,", r_n->tau);
325
+ fprintf(fout, "%.16e,", r_n->kap);
326
+ fprintf(fout, "%.16e,", SCS(norm_inf)(r->ax, w->m));
327
+ fprintf(fout, "%.16e,", SCS(norm_inf)(r->px, w->n));
328
+ fprintf(fout, "%.16e,", SCS(norm_inf)(r->aty, w->n));
329
+ fprintf(fout, "%.16e,", SCS(norm_inf)(w->b_orig, w->m));
330
+ fprintf(fout, "%.16e,", SCS(norm_inf)(w->c_orig, w->n));
331
+ fprintf(fout, "%.16e,", w->scale);
332
+ fprintf(fout, "%.16e,", SCS(norm_diff)(w->u, w->u_t, l));
333
+ fprintf(fout, "%.16e,", SCS(norm_diff)(w->v, w->v_prev, l));
334
+ fprintf(fout, "%.16e,", SCS(norm_inf_diff)(w->u, w->u_t, l));
335
+ fprintf(fout, "%.16e,", SCS(norm_inf_diff)(w->v, w->v_prev, l));
336
+ fprintf(fout, "%.16e,", w->aa_norm);
337
+ fprintf(fout, "%li,", (long)w->accepted_accel_steps);
338
+ fprintf(fout, "%li,", (long)w->rejected_accel_steps);
339
+ fprintf(fout, "%.16e,", SCS(tocq)(solve_timer) / 1e3);
340
+ fprintf(fout, "\n");
341
+ fclose(fout);
342
+ }