scs 0.3.2 → 0.4.1
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 +10 -0
- data/LICENSE.txt +1 -1
- data/README.md +35 -6
- 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 +2 -2
- data/vendor/scs/CMakeLists.txt +285 -169
- data/vendor/scs/Makefile +43 -18
- data/vendor/scs/README.md +3 -1
- data/vendor/scs/include/cones.h +5 -3
- data/vendor/scs/include/glbopts.h +35 -17
- data/vendor/scs/include/linsys.h +8 -8
- data/vendor/scs/include/normalize.h +1 -0
- data/vendor/scs/include/rw.h +3 -3
- data/vendor/scs/include/scs.h +51 -24
- data/vendor/scs/include/scs_types.h +3 -1
- data/vendor/scs/include/scs_work.h +13 -15
- data/vendor/scs/include/util.h +4 -2
- data/vendor/scs/linsys/cpu/direct/private.c +32 -153
- data/vendor/scs/linsys/cpu/direct/private.h +6 -6
- data/vendor/scs/linsys/cpu/indirect/private.c +9 -22
- data/vendor/scs/linsys/cpu/indirect/private.h +4 -2
- data/vendor/scs/linsys/csparse.c +140 -12
- data/vendor/scs/linsys/csparse.h +10 -17
- data/vendor/scs/linsys/external/amd/LICENSE.txt +0 -897
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +4 -2
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +0 -5
- data/vendor/scs/linsys/gpu/gpu.c +4 -4
- data/vendor/scs/linsys/gpu/gpu.h +1 -1
- data/vendor/scs/linsys/gpu/indirect/private.c +15 -26
- data/vendor/scs/linsys/mkl/direct/private.c +182 -0
- data/vendor/scs/linsys/mkl/direct/private.h +38 -0
- data/vendor/scs/linsys/scs_matrix.c +49 -72
- data/vendor/scs/linsys/scs_matrix.h +4 -3
- data/vendor/scs/scs.mk +39 -30
- data/vendor/scs/src/aa.c +0 -4
- data/vendor/scs/src/cones.c +78 -184
- data/vendor/scs/src/exp_cone.c +399 -0
- data/vendor/scs/src/normalize.c +51 -0
- data/vendor/scs/src/rw.c +139 -76
- data/vendor/scs/src/scs.c +275 -202
- data/vendor/scs/src/util.c +36 -13
- data/vendor/scs/test/minunit.h +2 -1
- data/vendor/scs/test/problem_utils.h +5 -4
- data/vendor/scs/test/problems/degenerate.h +1 -0
- data/vendor/scs/test/problems/hs21_tiny_qp.h +2 -1
- data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +13 -4
- data/vendor/scs/test/problems/infeasible_tiny_qp.h +1 -0
- data/vendor/scs/test/problems/max_ent +0 -0
- data/vendor/scs/test/problems/max_ent.h +8 -0
- data/vendor/scs/test/problems/qafiro_tiny_qp.h +2 -1
- data/vendor/scs/test/problems/random_prob.h +2 -39
- data/vendor/scs/test/problems/rob_gauss_cov_est.h +15 -3
- data/vendor/scs/test/problems/small_lp.h +4 -1
- data/vendor/scs/test/problems/small_qp.h +42 -7
- data/vendor/scs/test/problems/test_exp_cone.h +84 -0
- data/vendor/scs/test/problems/test_prob_from_data_file.h +57 -0
- data/vendor/scs/test/problems/test_validation.h +4 -1
- data/vendor/scs/test/problems/unbounded_tiny_qp.h +3 -3
- data/vendor/scs/test/random_socp_prob.c +3 -1
- data/vendor/scs/test/run_from_file.c +22 -4
- data/vendor/scs/test/run_tests.c +22 -9
- metadata +12 -4
data/vendor/scs/src/rw.c
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#include "rw.h"
|
2
2
|
|
3
|
+
#include <errno.h>
|
3
4
|
#include <stdint.h>
|
4
5
|
#include <stdio.h>
|
5
6
|
#include <stdlib.h>
|
@@ -9,6 +10,25 @@
|
|
9
10
|
#include "scs_matrix.h"
|
10
11
|
#include "util.h"
|
11
12
|
|
13
|
+
#if NO_READ_WRITE > 0 /* Disables all read / write functionality */
|
14
|
+
|
15
|
+
void SCS(write_data)(const ScsData *d, const ScsCone *k,
|
16
|
+
const ScsSettings *stgs) {
|
17
|
+
/* Do nothing */
|
18
|
+
}
|
19
|
+
scs_int SCS(read_data)(const char *filename, ScsData **d, ScsCone **k,
|
20
|
+
ScsSettings **stgs) {
|
21
|
+
/* Failure */
|
22
|
+
return -1;
|
23
|
+
}
|
24
|
+
void SCS(log_data_to_csv)(const ScsCone *k, const ScsSettings *stgs,
|
25
|
+
const ScsWork *w, scs_int iter,
|
26
|
+
SCS(timer) * solve_timer) {
|
27
|
+
/* Do nothing */
|
28
|
+
}
|
29
|
+
|
30
|
+
#else
|
31
|
+
|
12
32
|
/* writes/reads problem data to/from filename */
|
13
33
|
/* This is a VERY naive implementation, doesn't care about portability etc */
|
14
34
|
|
@@ -28,26 +48,65 @@ static void write_scs_cone(const ScsCone *k, FILE *fout) {
|
|
28
48
|
fwrite(k->p, sizeof(scs_float), k->psize, fout);
|
29
49
|
}
|
30
50
|
|
31
|
-
|
51
|
+
/*
|
52
|
+
* Read integer data from file. If the integer width on file is
|
53
|
+
* different to scs_int then it will cast the ints after reading
|
54
|
+
* to be compatible with the SCS data types.
|
55
|
+
*/
|
56
|
+
static size_t read_int(scs_int *dest, size_t file_int_sz, size_t nitems,
|
57
|
+
FILE *fin) {
|
58
|
+
if (file_int_sz == sizeof(scs_int)) {
|
59
|
+
return fread(dest, sizeof(scs_int), nitems, fin);
|
60
|
+
}
|
61
|
+
void *ptr = scs_calloc(nitems, file_int_sz);
|
62
|
+
size_t val = fread(ptr, file_int_sz, nitems, fin);
|
63
|
+
scs_int i;
|
64
|
+
switch (file_int_sz) {
|
65
|
+
case 4:
|
66
|
+
for (i = 0; i < nitems; ++i) {
|
67
|
+
dest[i] = (scs_int)(((int *)ptr)[i]);
|
68
|
+
}
|
69
|
+
break;
|
70
|
+
case 8:
|
71
|
+
for (i = 0; i < nitems; ++i) {
|
72
|
+
dest[i] = (scs_int)(((long long *)ptr)[i]);
|
73
|
+
}
|
74
|
+
break;
|
75
|
+
}
|
76
|
+
if (ptr) {
|
77
|
+
scs_free(ptr);
|
78
|
+
}
|
79
|
+
return val;
|
80
|
+
}
|
81
|
+
|
82
|
+
static ScsCone *read_scs_cone(FILE *fin, size_t file_int_sz) {
|
32
83
|
ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
84
|
+
read_int(&(k->z), file_int_sz, 1, fin);
|
85
|
+
read_int(&(k->l), file_int_sz, 1, fin);
|
86
|
+
read_int(&(k->bsize), file_int_sz, 1, fin);
|
87
|
+
if (k->bsize > 1) {
|
88
|
+
k->bl = (scs_float *)scs_calloc(MAX(k->bsize - 1, 0), sizeof(scs_float));
|
89
|
+
k->bu = (scs_float *)scs_calloc(MAX(k->bsize - 1, 0), sizeof(scs_float));
|
90
|
+
fread(k->bl, sizeof(scs_float), MAX(k->bsize - 1, 0), fin);
|
91
|
+
fread(k->bu, sizeof(scs_float), MAX(k->bsize - 1, 0), fin);
|
92
|
+
}
|
93
|
+
read_int(&(k->qsize), file_int_sz, 1, fin);
|
94
|
+
if (k->qsize) {
|
95
|
+
k->q = (scs_int *)scs_calloc(k->qsize, sizeof(scs_int));
|
96
|
+
read_int(k->q, file_int_sz, k->qsize, fin);
|
97
|
+
}
|
98
|
+
read_int(&(k->ssize), file_int_sz, 1, fin);
|
99
|
+
if (k->ssize) {
|
100
|
+
k->s = (scs_int *)scs_calloc(k->ssize, sizeof(scs_int));
|
101
|
+
read_int(k->s, file_int_sz, k->ssize, fin);
|
102
|
+
}
|
103
|
+
read_int(&(k->ep), file_int_sz, 1, fin);
|
104
|
+
read_int(&(k->ed), file_int_sz, 1, fin);
|
105
|
+
read_int(&(k->psize), file_int_sz, 1, fin);
|
106
|
+
if (k->psize) {
|
107
|
+
k->p = (scs_float *)scs_calloc(k->psize, sizeof(scs_float));
|
108
|
+
fread(k->p, sizeof(scs_float), k->psize, fin);
|
109
|
+
}
|
51
110
|
return k;
|
52
111
|
}
|
53
112
|
|
@@ -71,21 +130,21 @@ static void write_scs_stgs(const ScsSettings *s, FILE *fout) {
|
|
71
130
|
/* Do not write the log_csv_filename */
|
72
131
|
}
|
73
132
|
|
74
|
-
static ScsSettings *read_scs_stgs(FILE *fin) {
|
133
|
+
static ScsSettings *read_scs_stgs(FILE *fin, size_t file_int_sz) {
|
75
134
|
ScsSettings *s = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
|
76
|
-
|
135
|
+
read_int(&(s->normalize), file_int_sz, 1, fin);
|
77
136
|
fread(&(s->scale), sizeof(scs_float), 1, fin);
|
78
137
|
fread(&(s->rho_x), sizeof(scs_float), 1, fin);
|
79
|
-
|
138
|
+
read_int(&(s->max_iters), file_int_sz, 1, fin);
|
80
139
|
fread(&(s->eps_abs), sizeof(scs_float), 1, fin);
|
81
140
|
fread(&(s->eps_rel), sizeof(scs_float), 1, fin);
|
82
141
|
fread(&(s->eps_infeas), sizeof(scs_float), 1, fin);
|
83
142
|
fread(&(s->alpha), sizeof(scs_float), 1, fin);
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
143
|
+
read_int(&(s->verbose), file_int_sz, 1, fin);
|
144
|
+
read_int(&(s->warm_start), file_int_sz, 1, fin);
|
145
|
+
read_int(&(s->acceleration_lookback), file_int_sz, 1, fin);
|
146
|
+
read_int(&(s->acceleration_interval), file_int_sz, 1, fin);
|
147
|
+
read_int(&(s->adaptive_scale), file_int_sz, 1, fin);
|
89
148
|
return s;
|
90
149
|
}
|
91
150
|
|
@@ -98,18 +157,18 @@ static void write_amatrix(const ScsMatrix *A, FILE *fout) {
|
|
98
157
|
fwrite(A->i, sizeof(scs_int), Anz, fout);
|
99
158
|
}
|
100
159
|
|
101
|
-
static ScsMatrix *read_amatrix(FILE *fin) {
|
160
|
+
static ScsMatrix *read_amatrix(FILE *fin, size_t file_int_sz) {
|
102
161
|
scs_int Anz;
|
103
162
|
ScsMatrix *A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
104
|
-
|
105
|
-
|
163
|
+
read_int(&(A->m), file_int_sz, 1, fin);
|
164
|
+
read_int(&(A->n), file_int_sz, 1, fin);
|
106
165
|
A->p = (scs_int *)scs_calloc(A->n + 1, sizeof(scs_int));
|
107
|
-
|
166
|
+
read_int(A->p, file_int_sz, A->n + 1, fin);
|
108
167
|
Anz = A->p[A->n];
|
109
168
|
A->x = (scs_float *)scs_calloc(Anz, sizeof(scs_float));
|
110
169
|
A->i = (scs_int *)scs_calloc(Anz, sizeof(scs_int));
|
111
170
|
fread(A->x, sizeof(scs_float), Anz, fin);
|
112
|
-
|
171
|
+
read_int(A->i, file_int_sz, Anz, fin);
|
113
172
|
return A;
|
114
173
|
}
|
115
174
|
|
@@ -127,19 +186,20 @@ static void write_scs_data(const ScsData *d, FILE *fout) {
|
|
127
186
|
}
|
128
187
|
}
|
129
188
|
|
130
|
-
static ScsData *read_scs_data(FILE *fin) {
|
189
|
+
static ScsData *read_scs_data(FILE *fin, size_t file_int_sz) {
|
131
190
|
scs_int has_p = 0;
|
132
191
|
ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
|
133
|
-
|
134
|
-
|
192
|
+
|
193
|
+
read_int(&(d->m), file_int_sz, 1, fin);
|
194
|
+
read_int(&(d->n), file_int_sz, 1, fin);
|
135
195
|
d->b = (scs_float *)scs_calloc(d->m, sizeof(scs_float));
|
136
196
|
d->c = (scs_float *)scs_calloc(d->n, sizeof(scs_float));
|
137
197
|
fread(d->b, sizeof(scs_float), d->m, fin);
|
138
198
|
fread(d->c, sizeof(scs_float), d->n, fin);
|
139
|
-
d->A = read_amatrix(fin);
|
199
|
+
d->A = read_amatrix(fin, file_int_sz);
|
140
200
|
/* If has_p bit is not set or this hits end of file then has_p = 0 */
|
141
|
-
has_p &=
|
142
|
-
d->P = has_p ? read_amatrix(fin) : SCS_NULL;
|
201
|
+
has_p &= read_int(&has_p, file_int_sz, 1, fin);
|
202
|
+
d->P = has_p ? read_amatrix(fin, file_int_sz) : SCS_NULL;
|
143
203
|
return d;
|
144
204
|
}
|
145
205
|
|
@@ -150,7 +210,6 @@ void SCS(write_data)(const ScsData *d, const ScsCone *k,
|
|
150
210
|
uint32_t scs_float_sz = (uint32_t)sizeof(scs_float);
|
151
211
|
const char *scs_version = SCS_VERSION;
|
152
212
|
uint32_t scs_version_sz = (uint32_t)strlen(scs_version);
|
153
|
-
scs_printf("writing data to %s\n", stgs->write_data_filename);
|
154
213
|
fwrite(&(scs_int_sz), sizeof(uint32_t), 1, fout);
|
155
214
|
fwrite(&(scs_float_sz), sizeof(uint32_t), 1, fout);
|
156
215
|
fwrite(&(scs_version_sz), sizeof(uint32_t), 1, fout);
|
@@ -167,9 +226,11 @@ scs_int SCS(read_data)(const char *filename, ScsData **d, ScsCone **k,
|
|
167
226
|
uint32_t file_float_sz;
|
168
227
|
uint32_t file_version_sz;
|
169
228
|
char file_version[16];
|
229
|
+
errno = 0;
|
170
230
|
FILE *fin = fopen(filename, "rb");
|
171
231
|
if (!fin) {
|
172
232
|
scs_printf("Error reading file %s\n", filename);
|
233
|
+
scs_printf("errno:%i:%s\n", errno, strerror(errno));
|
173
234
|
return -1;
|
174
235
|
}
|
175
236
|
scs_printf("Reading data from %s\n", filename);
|
@@ -177,11 +238,10 @@ scs_int SCS(read_data)(const char *filename, ScsData **d, ScsCone **k,
|
|
177
238
|
fread(&(file_float_sz), sizeof(uint32_t), 1, fin);
|
178
239
|
if (file_int_sz != (uint32_t)sizeof(scs_int)) {
|
179
240
|
scs_printf(
|
180
|
-
"
|
181
|
-
"
|
241
|
+
"Warning, sizeof(file int) is %lu, but scs expects sizeof(int) %lu. "
|
242
|
+
"SCS will attempt to cast the data, which may be slow. "
|
243
|
+
"This message can be avoided by recompiling with the correct flags.\n",
|
182
244
|
(unsigned long)file_int_sz, (unsigned long)sizeof(scs_int));
|
183
|
-
fclose(fin);
|
184
|
-
return -1;
|
185
245
|
}
|
186
246
|
if (file_float_sz != (uint32_t)sizeof(scs_float)) {
|
187
247
|
scs_printf(
|
@@ -201,16 +261,17 @@ scs_int SCS(read_data)(const char *filename, ScsData **d, ScsCone **k,
|
|
201
261
|
"************************************************************\n",
|
202
262
|
file_version, SCS_VERSION);
|
203
263
|
}
|
204
|
-
*k = read_scs_cone(fin);
|
205
|
-
*d = read_scs_data(fin);
|
206
|
-
*stgs = read_scs_stgs(fin);
|
264
|
+
*k = read_scs_cone(fin, file_int_sz);
|
265
|
+
*d = read_scs_data(fin, file_int_sz);
|
266
|
+
*stgs = read_scs_stgs(fin, file_int_sz);
|
267
|
+
scs_printf("Finished reading data.\n");
|
207
268
|
fclose(fin);
|
208
269
|
return 0;
|
209
270
|
}
|
210
271
|
|
211
|
-
void SCS(log_data_to_csv)(const
|
212
|
-
const
|
213
|
-
|
272
|
+
void SCS(log_data_to_csv)(const ScsCone *k, const ScsSettings *stgs,
|
273
|
+
const ScsWork *w, scs_int iter,
|
274
|
+
SCS(timer) * solve_timer) {
|
214
275
|
ScsResiduals *r = w->r_orig;
|
215
276
|
ScsResiduals *r_n = w->r_normalized;
|
216
277
|
ScsSolution *sol = w->xys_orig;
|
@@ -222,7 +283,7 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
222
283
|
stgs->log_csv_filename);
|
223
284
|
return;
|
224
285
|
}
|
225
|
-
scs_int l = w->m + w->n + 1;
|
286
|
+
scs_int l = w->d->m + w->d->n + 1;
|
226
287
|
if (iter == 0) {
|
227
288
|
/* need to end in comma so that csv parsing is correct */
|
228
289
|
fprintf(fout, "iter,"
|
@@ -286,22 +347,22 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
286
347
|
fprintf(fout, "%.16e,", r->res_pri);
|
287
348
|
fprintf(fout, "%.16e,", r->res_dual);
|
288
349
|
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));
|
350
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol->x, w->d->n));
|
351
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol->y, w->d->m));
|
352
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol->s, w->d->m));
|
353
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol->x, w->d->n));
|
354
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol->y, w->d->m));
|
355
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol->s, w->d->m));
|
356
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->x, w->d->n));
|
357
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->y, w->d->m));
|
358
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(sol_n->s, w->d->m));
|
359
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->x, w->d->n));
|
360
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->y, w->d->m));
|
361
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(sol_n->s, w->d->m));
|
362
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->ax_s_btau, w->d->m));
|
363
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->px_aty_ctau, w->d->n));
|
364
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(r->ax_s_btau, w->d->m));
|
365
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(r->px_aty_ctau, w->d->n));
|
305
366
|
fprintf(fout, "%.16e,", r->res_infeas);
|
306
367
|
fprintf(fout, "%.16e,", r->res_unbdd_a);
|
307
368
|
fprintf(fout, "%.16e,", r->res_unbdd_p);
|
@@ -312,10 +373,10 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
312
373
|
fprintf(fout, "%.16e,", r_n->res_pri);
|
313
374
|
fprintf(fout, "%.16e,", r_n->res_dual);
|
314
375
|
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));
|
376
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r_n->ax_s_btau, w->d->m));
|
377
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r_n->px_aty_ctau, w->d->n));
|
378
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(r_n->ax_s_btau, w->d->m));
|
379
|
+
fprintf(fout, "%.16e,", SCS(norm_2)(r_n->px_aty_ctau, w->d->n));
|
319
380
|
fprintf(fout, "%.16e,", r_n->res_infeas);
|
320
381
|
fprintf(fout, "%.16e,", r_n->res_unbdd_a);
|
321
382
|
fprintf(fout, "%.16e,", r_n->res_unbdd_p);
|
@@ -323,12 +384,12 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
323
384
|
fprintf(fout, "%.16e,", r_n->dobj);
|
324
385
|
fprintf(fout, "%.16e,", r_n->tau);
|
325
386
|
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);
|
387
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->ax, w->d->m));
|
388
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->px, w->d->n));
|
389
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(r->aty, w->d->n));
|
390
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(w->b_orig, w->d->m));
|
391
|
+
fprintf(fout, "%.16e,", SCS(norm_inf)(w->c_orig, w->d->n));
|
392
|
+
fprintf(fout, "%.16e,", w->stgs->scale);
|
332
393
|
fprintf(fout, "%.16e,", SCS(norm_diff)(w->u, w->u_t, l));
|
333
394
|
fprintf(fout, "%.16e,", SCS(norm_diff)(w->v, w->v_prev, l));
|
334
395
|
fprintf(fout, "%.16e,", SCS(norm_inf_diff)(w->u, w->u_t, l));
|
@@ -340,3 +401,5 @@ void SCS(log_data_to_csv)(const ScsData *d, const ScsCone *k,
|
|
340
401
|
fprintf(fout, "\n");
|
341
402
|
fclose(fout);
|
342
403
|
}
|
404
|
+
|
405
|
+
#endif
|