scs 0.5.0 → 0.5.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 +8 -0
- data/lib/scs/ffi.rb +2 -0
- data/lib/scs/solver.rb +15 -7
- data/lib/scs/version.rb +1 -1
- data/vendor/scs/CITATION.cff +2 -2
- data/vendor/scs/CMakeLists.txt +136 -6
- data/vendor/scs/Makefile +53 -3
- data/vendor/scs/README.md +1 -1
- data/vendor/scs/include/cones.h +47 -2
- data/vendor/scs/include/glbopts.h +1 -1
- data/vendor/scs/include/scs.h +29 -0
- data/vendor/scs/include/scs_blas.h +4 -0
- data/vendor/scs/include/scs_types.h +3 -1
- data/vendor/scs/include/util_spectral_cones.h +45 -0
- data/vendor/scs/linsys/cpu/direct/private.c +3 -3
- data/vendor/scs/linsys/cpu/direct/private.h +2 -1
- data/vendor/scs/linsys/csparse.c +1 -1
- data/vendor/scs/linsys/cudss/direct/private.c +279 -0
- data/vendor/scs/linsys/cudss/direct/private.h +63 -0
- data/vendor/scs/linsys/external/qdldl/qdldl_types.h +1 -1
- data/vendor/scs/linsys/gpu/indirect/private.c +14 -21
- data/vendor/scs/scs.mk +17 -2
- data/vendor/scs/src/aa.c +8 -12
- data/vendor/scs/src/cones.c +783 -12
- data/vendor/scs/src/rw.c +15 -1
- data/vendor/scs/src/scs.c +4 -0
- data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_IPM.c +660 -0
- data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_Newton.c +279 -0
- data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_wrapper.c +205 -0
- data/vendor/scs/src/spectral_cones/logdeterminant/logdet_cone.c +143 -0
- data/vendor/scs/src/spectral_cones/nuclear/ell1_cone.c +221 -0
- data/vendor/scs/src/spectral_cones/nuclear/nuclear_cone.c +99 -0
- data/vendor/scs/src/spectral_cones/sum-largest/sum_largest_cone.c +196 -0
- data/vendor/scs/src/spectral_cones/sum-largest/sum_largest_eval_cone.c +140 -0
- data/vendor/scs/src/spectral_cones/util_spectral_cones.c +52 -0
- data/vendor/scs/test/problems/complex_PSD.h +83 -0
- data/vendor/scs/test/rng.h +4 -4
- data/vendor/scs/test/run_tests.c +25 -0
- data/vendor/scs/test/spectral_cones_problems/exp_design.h +141 -0
- data/vendor/scs/test/spectral_cones_problems/graph_partitioning.h +275 -0
- data/vendor/scs/test/spectral_cones_problems/robust_pca.h +253 -0
- data/vendor/scs/test/spectral_cones_problems/several_logdet_cones.h +222 -0
- data/vendor/scs/test/spectral_cones_problems/several_nuc_cone.h +285 -0
- data/vendor/scs/test/spectral_cones_problems/several_sum_largest.h +420 -0
- metadata +22 -7
@@ -0,0 +1,253 @@
|
|
1
|
+
#include "glbopts.h"
|
2
|
+
#include "linalg.h"
|
3
|
+
#include "minunit.h"
|
4
|
+
#include "problem_utils.h"
|
5
|
+
#include "rw.h"
|
6
|
+
#include "scs.h"
|
7
|
+
#include "scs_matrix.h"
|
8
|
+
#include "util.h"
|
9
|
+
|
10
|
+
// for SpectralSCS
|
11
|
+
static const char *robust_pca(void) {
|
12
|
+
ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
|
13
|
+
ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
|
14
|
+
ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
|
15
|
+
ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
|
16
|
+
ScsInfo info = {0};
|
17
|
+
scs_int exitflag;
|
18
|
+
scs_float perr, derr;
|
19
|
+
scs_int success;
|
20
|
+
const char *fail;
|
21
|
+
|
22
|
+
/* data */
|
23
|
+
scs_float Ax[] = {
|
24
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
25
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
26
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
27
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
28
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
29
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
30
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
31
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
32
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
33
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
34
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
35
|
+
1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
|
36
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
37
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
38
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
39
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
40
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
41
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
42
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
43
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
44
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
45
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
46
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
47
|
+
1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
|
48
|
+
-1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
|
49
|
+
1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
|
50
|
+
-1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
|
51
|
+
1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
|
52
|
+
-1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
|
53
|
+
1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
|
54
|
+
-1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
|
55
|
+
1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
|
56
|
+
-1.};
|
57
|
+
scs_int Ai[] = {
|
58
|
+
60, 61, 121, 60, 62, 122, 60, 63, 123, 60, 64, 124, 60, 65, 125,
|
59
|
+
60, 66, 126, 60, 67, 127, 60, 68, 128, 60, 69, 129, 60, 70, 130,
|
60
|
+
60, 71, 131, 60, 72, 132, 60, 73, 133, 60, 74, 134, 60, 75, 135,
|
61
|
+
60, 76, 136, 60, 77, 137, 60, 78, 138, 60, 79, 139, 60, 80, 140,
|
62
|
+
60, 81, 141, 60, 82, 142, 60, 83, 143, 60, 84, 144, 60, 85, 145,
|
63
|
+
60, 86, 146, 60, 87, 147, 60, 88, 148, 60, 89, 149, 60, 90, 150,
|
64
|
+
60, 91, 151, 60, 92, 152, 60, 93, 153, 60, 94, 154, 60, 95, 155,
|
65
|
+
60, 96, 156, 60, 97, 157, 60, 98, 158, 60, 99, 159, 60, 100, 160,
|
66
|
+
60, 101, 161, 60, 102, 162, 60, 103, 163, 60, 104, 164, 60, 105, 165,
|
67
|
+
60, 106, 166, 60, 107, 167, 60, 108, 168, 60, 109, 169, 60, 110, 170,
|
68
|
+
60, 111, 171, 60, 112, 172, 60, 113, 173, 60, 114, 174, 60, 115, 175,
|
69
|
+
60, 116, 176, 60, 117, 177, 60, 118, 178, 60, 119, 179, 60, 120, 180,
|
70
|
+
0, 61, 121, 1, 62, 122, 2, 63, 123, 3, 64, 124, 4, 65, 125,
|
71
|
+
5, 66, 126, 6, 67, 127, 7, 68, 128, 8, 69, 129, 9, 70, 130,
|
72
|
+
10, 71, 131, 11, 72, 132, 12, 73, 133, 13, 74, 134, 14, 75, 135,
|
73
|
+
15, 76, 136, 16, 77, 137, 17, 78, 138, 18, 79, 139, 19, 80, 140,
|
74
|
+
20, 81, 141, 21, 82, 142, 22, 83, 143, 23, 84, 144, 24, 85, 145,
|
75
|
+
25, 86, 146, 26, 87, 147, 27, 88, 148, 28, 89, 149, 29, 90, 150,
|
76
|
+
30, 91, 151, 31, 92, 152, 32, 93, 153, 33, 94, 154, 34, 95, 155,
|
77
|
+
35, 96, 156, 36, 97, 157, 37, 98, 158, 38, 99, 159, 39, 100, 160,
|
78
|
+
40, 101, 161, 41, 102, 162, 42, 103, 163, 43, 104, 164, 44, 105, 165,
|
79
|
+
45, 106, 166, 46, 107, 167, 47, 108, 168, 48, 109, 169, 49, 110, 170,
|
80
|
+
50, 111, 171, 51, 112, 172, 52, 113, 173, 53, 114, 174, 54, 115, 175,
|
81
|
+
55, 116, 176, 56, 117, 177, 57, 118, 178, 58, 119, 179, 59, 120, 180,
|
82
|
+
181, 0, 182, 1, 183, 2, 184, 3, 185, 4, 186, 5, 187, 6, 188,
|
83
|
+
7, 189, 8, 190, 9, 191, 10, 192, 11, 193, 12, 194, 13, 195, 14,
|
84
|
+
196, 15, 197, 16, 198, 17, 199, 18, 200, 19, 201, 20, 202, 21, 203,
|
85
|
+
22, 204, 23, 205, 24, 206, 25, 207, 26, 208, 27, 209, 28, 210, 29,
|
86
|
+
211, 30, 212, 31, 213, 32, 214, 33, 215, 34, 216, 35, 217, 36, 218,
|
87
|
+
37, 219, 38, 220, 39, 221, 40, 222, 41, 223, 42, 224, 43, 225, 44,
|
88
|
+
226, 45, 227, 46, 228, 47, 229, 48, 230, 49, 231, 50, 232, 51, 233,
|
89
|
+
52, 234, 53, 235, 54, 236, 55, 237, 56, 238, 57, 239, 58, 240, 59,
|
90
|
+
241};
|
91
|
+
scs_int Ap[] = {
|
92
|
+
0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39,
|
93
|
+
42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81,
|
94
|
+
84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 123,
|
95
|
+
126, 129, 132, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 165,
|
96
|
+
168, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207,
|
97
|
+
210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249,
|
98
|
+
252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291,
|
99
|
+
294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333,
|
100
|
+
336, 339, 342, 345, 348, 351, 354, 357, 360, 361, 363, 365, 367, 369,
|
101
|
+
371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397,
|
102
|
+
399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425,
|
103
|
+
427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453,
|
104
|
+
455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481};
|
105
|
+
|
106
|
+
scs_float b[] = {
|
107
|
+
1.00346258, 1.058972, 1.3338978, 0.95502671, 0.76639009, 0.61628772,
|
108
|
+
1.42111113, 1.03841293, 0.44615864, 0.85861969, 0.90243625, 0.72213324,
|
109
|
+
0.94699689, 0.81716838, 1.01510945, 0.13007678, 1.198153, 0.95044553,
|
110
|
+
0.4949946, 1.07831368, 1.32720261, 1.07903274, 1.68375286, 1.27474549,
|
111
|
+
1.18000824, 0.61398833, 1.82853889, 1.27952122, 0.75345835, 1.20492083,
|
112
|
+
1.2038308, 1.03174759, 1.68585985, 1.11247234, 1.00162586, 0.62169897,
|
113
|
+
1.69182118, 1.29236728, 0.59968048, 1.17087666, 0.39423923, 0.29843035,
|
114
|
+
0.53155946, 0.40310646, 0.3583775, 0.18407451, 0.53328188, 0.34513123,
|
115
|
+
0.26243805, 0.37141265, 0.72923936, 0.60496262, 0.78424416, 0.6510247,
|
116
|
+
0.76451821, 0.16999683, 0.98700998, 0.79590066, 0.37119843, 0.86498628,
|
117
|
+
0.58937813, 0., 0., 0., 0., 0.,
|
118
|
+
0., 0., 0., 0., 0., 0.,
|
119
|
+
0., 0., 0., 0., 0., 0.,
|
120
|
+
0., 0., 0., 0., 0., 0.,
|
121
|
+
0., 0., 0., 0., 0., 0.,
|
122
|
+
0., 0., 0., 0., 0., 0.,
|
123
|
+
0., 0., 0., 0., 0., 0.,
|
124
|
+
0., 0., 0., 0., 0., 0.,
|
125
|
+
0., 0., 0., 0., 0., 0.,
|
126
|
+
0., 0., 0., 0., 0., 0.,
|
127
|
+
0., 0., 0., 0., 0., 0.,
|
128
|
+
0., 0., 0., 0., 0., 0.,
|
129
|
+
0., 0., 0., 0., 0., 0.,
|
130
|
+
0., 0., 0., 0., 0., 0.,
|
131
|
+
0., 0., 0., 0., 0., 0.,
|
132
|
+
0., 0., 0., 0., 0., 0.,
|
133
|
+
0., 0., 0., 0., 0., 0.,
|
134
|
+
0., 0., 0., 0., 0., 0.,
|
135
|
+
0., 0., 0., 0., 0., 0.,
|
136
|
+
0., 0., 0., 0., 0., 0.,
|
137
|
+
0., 0., 0., 0., 0., 0.,
|
138
|
+
0., 0., 0., 0., 0., 0.,
|
139
|
+
0., 0., 0., 0., 0., 0.,
|
140
|
+
0., 0., 0., 0., 0., 0.,
|
141
|
+
0., 0., 0., 0., 0., 0.,
|
142
|
+
0., 0., 0., 0., 0., 0.,
|
143
|
+
0., 0., 0., 0., 0., 0.,
|
144
|
+
0., 0., 0., 0., 0., 0.,
|
145
|
+
0., 0., 0., 0., 0., 0.,
|
146
|
+
0., 0., 0., 0., 0., 0.,
|
147
|
+
0., 0.};
|
148
|
+
scs_float c[] = {
|
149
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
150
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
151
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
152
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
153
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
154
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
155
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
156
|
+
0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
157
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
158
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
159
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
|
160
|
+
|
161
|
+
scs_int m = 242;
|
162
|
+
scs_int n = 181;
|
163
|
+
|
164
|
+
scs_int z = 60;
|
165
|
+
scs_int l = 121;
|
166
|
+
scs_int *q = SCS_NULL;
|
167
|
+
scs_int qsize = 0;
|
168
|
+
scs_int *s = SCS_NULL;
|
169
|
+
scs_int ssize = 0;
|
170
|
+
scs_int ep = 0;
|
171
|
+
scs_int ed = 0;
|
172
|
+
scs_float *p = SCS_NULL;
|
173
|
+
scs_int psize = 0;
|
174
|
+
scs_int *d_array = SCS_NULL;
|
175
|
+
scs_int dsize = 0;
|
176
|
+
scs_int nuc_m[] = {10};
|
177
|
+
scs_int nuc_n[] = {6};
|
178
|
+
scs_int nucsize = 1;
|
179
|
+
scs_int *ell1 = SCS_NULL;
|
180
|
+
scs_int ell1_size = 0;
|
181
|
+
scs_int *sl_n = SCS_NULL;
|
182
|
+
scs_int *sl_k = SCS_NULL;
|
183
|
+
scs_int sl_size = 0;
|
184
|
+
|
185
|
+
// computed using mosek (the input of Ax is truncated, and mosek solved
|
186
|
+
// the problem with the non-truncated data)
|
187
|
+
scs_float opt = 8.046737895443831;
|
188
|
+
/* end data */
|
189
|
+
|
190
|
+
d->m = m;
|
191
|
+
d->n = n;
|
192
|
+
d->b = b;
|
193
|
+
d->c = c;
|
194
|
+
|
195
|
+
d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
196
|
+
|
197
|
+
d->A->m = m;
|
198
|
+
d->A->n = n;
|
199
|
+
d->A->x = Ax;
|
200
|
+
d->A->i = Ai;
|
201
|
+
d->A->p = Ap;
|
202
|
+
|
203
|
+
k->z = z;
|
204
|
+
k->l = l;
|
205
|
+
k->q = q;
|
206
|
+
k->qsize = qsize;
|
207
|
+
k->s = s;
|
208
|
+
k->ssize = ssize;
|
209
|
+
k->ep = ep;
|
210
|
+
k->ed = ed;
|
211
|
+
k->p = p;
|
212
|
+
k->psize = psize;
|
213
|
+
k->d = d_array;
|
214
|
+
k->dsize = dsize;
|
215
|
+
k->nuc_m = nuc_m;
|
216
|
+
k->nuc_n = nuc_n;
|
217
|
+
k->nucsize = nucsize;
|
218
|
+
k->ell1 = ell1;
|
219
|
+
k->ell1_size = ell1_size;
|
220
|
+
k->sl_n = sl_n;
|
221
|
+
k->sl_k = sl_k;
|
222
|
+
k->sl_size = sl_size;
|
223
|
+
|
224
|
+
scs_set_default_settings(stgs);
|
225
|
+
stgs->eps_abs = 1e-7;
|
226
|
+
stgs->eps_rel = 1e-7;
|
227
|
+
stgs->eps_infeas = 1e-9;
|
228
|
+
|
229
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
230
|
+
|
231
|
+
perr = SCS(dot)(d->c, sol->x, d->n) - opt;
|
232
|
+
derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
|
233
|
+
|
234
|
+
scs_printf("primal obj error %4e\n", perr);
|
235
|
+
scs_printf("dual obj error %4e\n", derr);
|
236
|
+
|
237
|
+
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
238
|
+
|
239
|
+
mu_assert("robust_pca: SCS failed to produce outputflag SCS_SOLVED", success);
|
240
|
+
|
241
|
+
fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
242
|
+
if (fail)
|
243
|
+
return fail;
|
244
|
+
|
245
|
+
/* kill data */
|
246
|
+
scs_free(d->A);
|
247
|
+
scs_free(k);
|
248
|
+
scs_free(stgs);
|
249
|
+
scs_free(d);
|
250
|
+
SCS(free_sol)(sol);
|
251
|
+
|
252
|
+
return fail;
|
253
|
+
}
|
@@ -0,0 +1,222 @@
|
|
1
|
+
#include "glbopts.h"
|
2
|
+
#include "linalg.h"
|
3
|
+
#include "minunit.h"
|
4
|
+
#include "problem_utils.h"
|
5
|
+
#include "rw.h"
|
6
|
+
#include "scs.h"
|
7
|
+
#include "scs_matrix.h"
|
8
|
+
#include "util.h"
|
9
|
+
|
10
|
+
// for SpectralSCS
|
11
|
+
static const char *several_logdet_cones(void) {
|
12
|
+
ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
|
13
|
+
ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
|
14
|
+
ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
|
15
|
+
ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
|
16
|
+
ScsInfo info = {0};
|
17
|
+
scs_int exitflag;
|
18
|
+
scs_float perr, derr;
|
19
|
+
scs_int success;
|
20
|
+
const char *fail;
|
21
|
+
|
22
|
+
/* data */
|
23
|
+
scs_float Ax[] = {
|
24
|
+
-1., -1., 1., -1., 1.,
|
25
|
+
-1., 3.24, 0.16, 1., 4.84,
|
26
|
+
3.61, 1., 1., 0.04, 0.01,
|
27
|
+
0.16, -1., 0.25455844, 0.84852814, 1.13137085,
|
28
|
+
0.31112698, 1.07480231, -0.42426407, 2.12132034, 0.05656854,
|
29
|
+
-0.04242641, -0.50911688, -1., -6.61851947, 0.3959798,
|
30
|
+
1.27279221, -2.17788889, 6.18011327, 2.12132034, 0.05656854,
|
31
|
+
-0.21213203, 0.84852814, -1., 0.50911688, 0.22627417,
|
32
|
+
-1.27279221, -6.22253967, -0.80610173, -0.28284271, 1.69705627,
|
33
|
+
-0.33941125, 0.05656854, -0.16970563, -1., -2.54558441,
|
34
|
+
-0.79195959, -2.40416306, 6.22253967, -1.34350288, 0.56568542,
|
35
|
+
-1.83847763, -0.22627417, 0.22627417, -0.11313708, -1.,
|
36
|
+
0.01, 2.25, 0.64, 0.01, 0.16,
|
37
|
+
0.09, 2.25, 0.04, 0.09, 0.81,
|
38
|
+
-1., -0.36769553, 1.48492424, 1.01823376, -0.09899495,
|
39
|
+
1.30107648, -0.6363961, 0.05656854, 0.6363961, -1.90918831,
|
40
|
+
-1., 0.02828427, 0.84852814, -1.01823376, -0.28284271,
|
41
|
+
-0.16970563, 0.08485281, 2.54558441, -0.33941125, -0.16970563,
|
42
|
+
0.38183766, -1., -0.14142136, -2.96984848, -1.92333044,
|
43
|
+
0.28284271, -0.28284271, -0.16970563, -2.75771645, -0.22627417,
|
44
|
+
-0.67882251, 0.25455844, -1., 6.76, 0.49,
|
45
|
+
0.81, 0.49, 5.29, 2.25, 0.04,
|
46
|
+
2.25, 2.25, -1., -0.73539105, 0.3959798,
|
47
|
+
-1.14551299, 1.97989899, -0.97580736, -0.42426407, -0.33941125,
|
48
|
+
-0.84852814, -0.6363961, -1., 3.67695526, -1.38592929,
|
49
|
+
-2.16374675, -1.97989899, -1.6263456, 0.84852814, -0.22627417,
|
50
|
+
-3.39411255, -0.42426407, -1., 0.04, 0.16,
|
51
|
+
0.81, 4., 0.09, 0.04, 1.44,
|
52
|
+
1.44, 0.16, 0.09, -1., -0.28284271,
|
53
|
+
-0.79195959, 2.16374675, -5.65685425, 0.21213203, -0.11313708,
|
54
|
+
-2.20617316, 1.35764502, 0.90509668, 0.08485281, -1.,
|
55
|
+
1., 1.96, 2.89, 4., 0.25,
|
56
|
+
0.16, 1.69, 0.64, 2.56, 0.04,
|
57
|
+
-1., 3.24, 0.16, 1., 4.84,
|
58
|
+
3.61, 1., 1., 0.04, 0.01,
|
59
|
+
0.16, -1., 0.25455844, 0.84852814, 1.13137085,
|
60
|
+
0.31112698, 1.07480231, -0.42426407, 2.12132034, 0.05656854,
|
61
|
+
-0.04242641, -0.50911688, -1., -6.61851947, 0.3959798,
|
62
|
+
1.27279221, -2.17788889, 6.18011327, 2.12132034, 0.05656854,
|
63
|
+
-0.21213203, 0.84852814, -1., 0.50911688, 0.22627417,
|
64
|
+
-1.27279221, -6.22253967, -0.80610173, -0.28284271, 1.69705627,
|
65
|
+
-0.33941125, 0.05656854, -0.16970563, -1., -2.54558441,
|
66
|
+
-0.79195959, -2.40416306, 6.22253967, -1.34350288, 0.56568542,
|
67
|
+
-1.83847763, -0.22627417, 0.22627417, -0.11313708, -1.,
|
68
|
+
0.01, 2.25, 0.64, 0.01, 0.16,
|
69
|
+
0.09, 2.25, 0.04, 0.09, 0.81,
|
70
|
+
-1., -0.36769553, 1.48492424, 1.01823376, -0.09899495,
|
71
|
+
1.30107648, -0.6363961, 0.05656854, 0.6363961, -1.90918831,
|
72
|
+
-1., 0.02828427, 0.84852814, -1.01823376, -0.28284271,
|
73
|
+
-0.16970563, 0.08485281, 2.54558441, -0.33941125, -0.16970563,
|
74
|
+
0.38183766, -1., -0.14142136, -2.96984848, -1.92333044,
|
75
|
+
0.28284271, -0.28284271, -0.16970563, -2.75771645, -0.22627417,
|
76
|
+
-0.67882251, 0.25455844, -1., 6.76, 0.49,
|
77
|
+
0.81, 0.49, 5.29, 2.25, 0.04,
|
78
|
+
2.25, 2.25, -1., -0.73539105, 0.3959798,
|
79
|
+
-1.14551299, 1.97989899, -0.97580736, -0.42426407, -0.33941125,
|
80
|
+
-0.84852814, -0.6363961, -1., 3.67695526, -1.38592929,
|
81
|
+
-2.16374675, -1.97989899, -1.6263456, 0.84852814, -0.22627417,
|
82
|
+
-3.39411255, -0.42426407, -1., 0.04, 0.16,
|
83
|
+
0.81, 4., 0.09, 0.04, 1.44,
|
84
|
+
1.44, 0.16, 0.09, -1., -0.28284271,
|
85
|
+
-0.79195959, 2.16374675, -5.65685425, 0.21213203, -0.11313708,
|
86
|
+
-2.20617316, 1.35764502, 0.90509668, 0.08485281, -1.,
|
87
|
+
1., 1.96, 2.89, 4., 0.25,
|
88
|
+
0.16, 1.69, 0.64, 2.56, 0.04,
|
89
|
+
-1.};
|
90
|
+
scs_int Ai[] = {
|
91
|
+
12, 29, 0, 13, 1, 30, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 2,
|
92
|
+
3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 2, 3, 4, 5, 6, 7, 9, 10,
|
93
|
+
11, 16, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 17, 2, 3, 4, 5, 6,
|
94
|
+
7, 8, 9, 10, 11, 18, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 19, 2,
|
95
|
+
3, 4, 5, 6, 7, 9, 10, 11, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10,
|
96
|
+
11, 21, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 22, 2, 3, 4, 5, 6,
|
97
|
+
7, 9, 10, 11, 23, 2, 3, 4, 5, 6, 7, 9, 10, 11, 24, 2, 3, 4,
|
98
|
+
5, 6, 7, 9, 10, 11, 25, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 26,
|
99
|
+
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 27, 2, 3, 4, 5, 6, 7, 8,
|
100
|
+
9, 10, 11, 28, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 31, 2, 3, 4,
|
101
|
+
5, 6, 7, 8, 9, 10, 11, 32, 2, 3, 4, 5, 6, 7, 9, 10, 11, 33,
|
102
|
+
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 34, 2, 3, 4, 5, 6, 7, 8,
|
103
|
+
9, 10, 11, 35, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 36, 2, 3, 4,
|
104
|
+
5, 6, 7, 9, 10, 11, 37, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 38,
|
105
|
+
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 39, 2, 3, 4, 5, 6, 7, 9,
|
106
|
+
10, 11, 40, 2, 3, 4, 5, 6, 7, 9, 10, 11, 41, 2, 3, 4, 5, 6,
|
107
|
+
7, 9, 10, 11, 42, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 43, 2, 3,
|
108
|
+
4, 5, 6, 7, 8, 9, 10, 11, 44, 2, 3, 4, 5, 6, 7, 8, 9, 10,
|
109
|
+
11, 45};
|
110
|
+
scs_int Ap[] = {0, 1, 2, 4, 6, 17, 28, 38, 49, 60, 71, 81,
|
111
|
+
92, 103, 113, 123, 133, 144, 155, 166, 177, 188, 198, 209,
|
112
|
+
220, 231, 241, 252, 263, 273, 283, 293, 304, 315, 326};
|
113
|
+
|
114
|
+
scs_float b[] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
|
115
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
116
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
117
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
|
118
|
+
scs_float c[] = {1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
119
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
120
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
|
121
|
+
scs_int m = 46;
|
122
|
+
scs_int n = 34;
|
123
|
+
|
124
|
+
scs_int z = 2;
|
125
|
+
scs_int l = 10;
|
126
|
+
scs_int *q = SCS_NULL;
|
127
|
+
scs_int qsize = 0;
|
128
|
+
scs_int *s = SCS_NULL;
|
129
|
+
scs_int ssize = 0;
|
130
|
+
scs_int ep = 0;
|
131
|
+
scs_int ed = 0;
|
132
|
+
scs_float *p = SCS_NULL;
|
133
|
+
scs_int psize = 0;
|
134
|
+
scs_int d_array[] = {5, 5};
|
135
|
+
scs_int dsize = 2;
|
136
|
+
scs_int *nuc_m = SCS_NULL;
|
137
|
+
scs_int *nuc_n = SCS_NULL;
|
138
|
+
scs_int nucsize = 0;
|
139
|
+
scs_int *ell1 = SCS_NULL;
|
140
|
+
scs_int ell1_size = 0;
|
141
|
+
scs_int *sl_n = SCS_NULL;
|
142
|
+
scs_int *sl_k = SCS_NULL;
|
143
|
+
scs_int sl_size = 0;
|
144
|
+
|
145
|
+
// computed using mosek (the input of Ax is truncated, and mosek solved
|
146
|
+
// the problem with the non-truncated data)
|
147
|
+
scs_float opt = 24.097175949228443;
|
148
|
+
/* end data */
|
149
|
+
|
150
|
+
d->m = m;
|
151
|
+
d->n = n;
|
152
|
+
d->b = b;
|
153
|
+
d->c = c;
|
154
|
+
|
155
|
+
d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
156
|
+
|
157
|
+
d->A->m = m;
|
158
|
+
d->A->n = n;
|
159
|
+
d->A->x = Ax;
|
160
|
+
d->A->i = Ai;
|
161
|
+
d->A->p = Ap;
|
162
|
+
|
163
|
+
k->z = z;
|
164
|
+
k->l = l;
|
165
|
+
k->q = q;
|
166
|
+
k->qsize = qsize;
|
167
|
+
k->s = s;
|
168
|
+
k->ssize = ssize;
|
169
|
+
k->ep = ep;
|
170
|
+
k->ed = ed;
|
171
|
+
k->p = p;
|
172
|
+
k->psize = psize;
|
173
|
+
k->d = d_array;
|
174
|
+
k->dsize = dsize;
|
175
|
+
k->nuc_m = nuc_m;
|
176
|
+
k->nuc_n = nuc_n;
|
177
|
+
k->nucsize = nucsize;
|
178
|
+
k->ell1 = ell1;
|
179
|
+
k->ell1_size = ell1_size;
|
180
|
+
k->sl_n = sl_n;
|
181
|
+
k->sl_k = sl_k;
|
182
|
+
k->sl_size = sl_size;
|
183
|
+
|
184
|
+
scs_set_default_settings(stgs);
|
185
|
+
stgs->eps_abs = 1e-7;
|
186
|
+
stgs->eps_rel = 1e-7;
|
187
|
+
stgs->eps_infeas = 1e-9;
|
188
|
+
|
189
|
+
stgs->log_csv_filename = "several_logdet_cone.csv";
|
190
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
191
|
+
|
192
|
+
perr = SCS(dot)(d->c, sol->x, d->n) - opt;
|
193
|
+
derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
|
194
|
+
|
195
|
+
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
196
|
+
|
197
|
+
mu_assert("several_logdet_cones: SCS failed to produce outputflag SCS_SOLVED",
|
198
|
+
success);
|
199
|
+
|
200
|
+
fail = 0;
|
201
|
+
// TODO: This test fails because of the complementary slackness check.
|
202
|
+
// The complementary slackness tolerance is a bit too tight.
|
203
|
+
// fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
204
|
+
// if (fail)
|
205
|
+
// return fail;
|
206
|
+
|
207
|
+
mu_assert("several logdet cones: primal feas error ",
|
208
|
+
ABS(info.res_pri) < 5 * 1e-6);
|
209
|
+
mu_assert("several logdet cones: dual feas error ",
|
210
|
+
ABS(info.res_dual) < 1e-6);
|
211
|
+
mu_assert("several logdet cones: duality gap error ",
|
212
|
+
ABS(info.gap) < 5 * 1e-6);
|
213
|
+
|
214
|
+
/* kill data */
|
215
|
+
scs_free(d->A);
|
216
|
+
scs_free(k);
|
217
|
+
scs_free(stgs);
|
218
|
+
scs_free(d);
|
219
|
+
SCS(free_sol)(sol);
|
220
|
+
|
221
|
+
return fail;
|
222
|
+
}
|