scs 0.2.2 → 0.3.2
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 +16 -0
- data/LICENSE.txt +18 -18
- data/README.md +19 -14
- data/lib/scs/ffi.rb +31 -20
- data/lib/scs/solver.rb +32 -9
- data/lib/scs/version.rb +1 -1
- data/vendor/scs/CITATION.cff +39 -0
- data/vendor/scs/CMakeLists.txt +320 -0
- data/vendor/scs/Makefile +32 -23
- data/vendor/scs/README.md +9 -218
- data/vendor/scs/include/aa.h +67 -23
- data/vendor/scs/include/cones.h +22 -19
- data/vendor/scs/include/glbopts.h +107 -79
- data/vendor/scs/include/linalg.h +3 -4
- data/vendor/scs/include/linsys.h +58 -44
- data/vendor/scs/include/normalize.h +6 -5
- data/vendor/scs/include/rw.h +8 -2
- data/vendor/scs/include/scs.h +257 -141
- data/vendor/scs/include/scs_types.h +34 -0
- data/vendor/scs/include/scs_work.h +83 -0
- data/vendor/scs/include/util.h +3 -15
- data/vendor/scs/linsys/cpu/direct/private.c +241 -232
- data/vendor/scs/linsys/cpu/direct/private.h +13 -7
- data/vendor/scs/linsys/cpu/indirect/private.c +194 -118
- data/vendor/scs/linsys/cpu/indirect/private.h +7 -4
- data/vendor/scs/linsys/csparse.c +87 -0
- data/vendor/scs/linsys/csparse.h +34 -0
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +6 -6
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +6 -1
- data/vendor/scs/linsys/external/amd/amd_internal.h +1 -1
- data/vendor/scs/linsys/external/amd/amd_order.c +5 -5
- data/vendor/scs/linsys/external/qdldl/changes +2 -0
- data/vendor/scs/linsys/external/qdldl/qdldl.c +29 -46
- data/vendor/scs/linsys/external/qdldl/qdldl.h +33 -41
- data/vendor/scs/linsys/external/qdldl/qdldl_types.h +11 -3
- data/vendor/scs/linsys/gpu/gpu.c +58 -21
- data/vendor/scs/linsys/gpu/gpu.h +70 -35
- data/vendor/scs/linsys/gpu/indirect/private.c +394 -157
- data/vendor/scs/linsys/gpu/indirect/private.h +27 -12
- data/vendor/scs/linsys/scs_matrix.c +478 -0
- data/vendor/scs/linsys/scs_matrix.h +70 -0
- data/vendor/scs/scs.mk +14 -10
- data/vendor/scs/src/aa.c +394 -110
- data/vendor/scs/src/cones.c +497 -359
- data/vendor/scs/src/ctrlc.c +15 -5
- data/vendor/scs/src/linalg.c +107 -26
- data/vendor/scs/src/normalize.c +30 -72
- data/vendor/scs/src/rw.c +202 -27
- data/vendor/scs/src/scs.c +769 -571
- data/vendor/scs/src/scs_version.c +11 -3
- data/vendor/scs/src/util.c +37 -106
- data/vendor/scs/test/minunit.h +22 -8
- data/vendor/scs/test/problem_utils.h +180 -25
- data/vendor/scs/test/problems/degenerate.h +130 -0
- data/vendor/scs/test/problems/hs21_tiny_qp.h +124 -0
- data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +116 -0
- data/vendor/scs/test/problems/infeasible_tiny_qp.h +100 -0
- data/vendor/scs/test/problems/qafiro_tiny_qp.h +199 -0
- data/vendor/scs/test/problems/random_prob +0 -0
- data/vendor/scs/test/problems/random_prob.h +45 -0
- data/vendor/scs/test/problems/rob_gauss_cov_est.h +188 -31
- data/vendor/scs/test/problems/small_lp.h +14 -13
- data/vendor/scs/test/problems/small_qp.h +352 -0
- data/vendor/scs/test/problems/test_validation.h +43 -0
- data/vendor/scs/test/problems/unbounded_tiny_qp.h +82 -0
- data/vendor/scs/test/random_socp_prob.c +54 -53
- data/vendor/scs/test/rng.h +109 -0
- data/vendor/scs/test/run_from_file.c +20 -11
- data/vendor/scs/test/run_tests.c +35 -2
- metadata +29 -98
- data/vendor/scs/linsys/amatrix.c +0 -305
- data/vendor/scs/linsys/amatrix.h +0 -36
- data/vendor/scs/linsys/amatrix.o +0 -0
- data/vendor/scs/linsys/cpu/direct/private.o +0 -0
- data/vendor/scs/linsys/cpu/indirect/private.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/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_version.o +0 -0
- data/vendor/scs/src/util.o +0 -0
- data/vendor/scs/test/data/small_random_socp +0 -0
- data/vendor/scs/test/problems/small_random_socp.h +0 -33
- 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 "
|
|
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->
|
|
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->
|
|
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(
|
|
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->
|
|
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->
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
+
}
|