scs 0.3.2 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|