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,83 @@
|
|
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
|
+
static const char *complex_PSD(void)
|
11
|
+
{
|
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[] = {1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0};
|
24
|
+
scs_int Ai[] = {0, 1, 2, 3, 4, 5, 0, 6, 7, 8, 0, 9};
|
25
|
+
scs_int Ap[] = {0, 2, 3, 4, 5, 6, 8, 9, 10, 12};
|
26
|
+
scs_float b[] = {1.0, 0., 0., 0., 0., 0., 0., 0., 0., 0.};
|
27
|
+
scs_float c[] = {1, 2 * sqrt(2), 3 * sqrt(2), 4 * sqrt(2), 5 * sqrt(2), 6,
|
28
|
+
7 * sqrt(2), -8 * sqrt(2), 9};
|
29
|
+
|
30
|
+
scs_int m = 10;
|
31
|
+
scs_int n = 9;
|
32
|
+
scs_int cs[] = {3};
|
33
|
+
scs_int cssize = 1;
|
34
|
+
k->z = 1;
|
35
|
+
k->cs = cs;
|
36
|
+
k->cssize = cssize;
|
37
|
+
|
38
|
+
// computed offline
|
39
|
+
scs_float opt = -5.228930;
|
40
|
+
/* end data */
|
41
|
+
|
42
|
+
d->m = m;
|
43
|
+
d->n = n;
|
44
|
+
d->b = b;
|
45
|
+
d->c = c;
|
46
|
+
|
47
|
+
d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
48
|
+
d->A->m = m;
|
49
|
+
d->A->n = n;
|
50
|
+
d->A->x = Ax;
|
51
|
+
d->A->i = Ai;
|
52
|
+
d->A->p = Ap;
|
53
|
+
|
54
|
+
scs_set_default_settings(stgs);
|
55
|
+
stgs->eps_abs = 1e-7;
|
56
|
+
stgs->eps_rel = 1e-7;
|
57
|
+
stgs->eps_infeas = 1e-9;
|
58
|
+
|
59
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
60
|
+
|
61
|
+
perr = SCS(dot)(d->c, sol->x, d->n) - opt;
|
62
|
+
derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
|
63
|
+
|
64
|
+
scs_printf("primal obj error %4e\n", perr);
|
65
|
+
scs_printf("dual obj error %4e\n", derr);
|
66
|
+
|
67
|
+
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
68
|
+
|
69
|
+
mu_assert("complex_PSD: SCS failed to produce outputflag SCS_SOLVED", success);
|
70
|
+
|
71
|
+
fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
72
|
+
if (fail)
|
73
|
+
return fail;
|
74
|
+
|
75
|
+
/* kill data */
|
76
|
+
scs_free(d->A);
|
77
|
+
scs_free(k);
|
78
|
+
scs_free(stgs);
|
79
|
+
scs_free(d);
|
80
|
+
SCS(free_sol)(sol);
|
81
|
+
|
82
|
+
return fail;
|
83
|
+
}
|
data/vendor/scs/test/rng.h
CHANGED
@@ -52,14 +52,14 @@ long ran_arr_buf[QUALITY];
|
|
52
52
|
long ran_arr_dummy = -1, ran_arr_started = -1;
|
53
53
|
long *ran_arr_ptr = &ran_arr_dummy; /* the next random number, or -1 */
|
54
54
|
|
55
|
-
#define TT 70
|
56
|
-
#define is_odd(x) ((x)&1) /* units bit of x */
|
55
|
+
#define TT 70 /* guaranteed separation between streams */
|
56
|
+
#define is_odd(x) ((x) & 1) /* units bit of x */
|
57
57
|
|
58
58
|
#ifdef __STDC__
|
59
59
|
void ran_start(long seed)
|
60
60
|
#else
|
61
|
-
void ran_start(seed)
|
62
|
-
long seed;
|
61
|
+
void ran_start(seed) /* do this before using ran_array */
|
62
|
+
long seed; /* selector for different streams */
|
63
63
|
#endif
|
64
64
|
{
|
65
65
|
register int t, j;
|
data/vendor/scs/test/run_tests.c
CHANGED
@@ -33,11 +33,29 @@ _SKIP(test_validation)
|
|
33
33
|
|
34
34
|
/* solve SDPs, requires blas / lapack */
|
35
35
|
#if defined(USE_LAPACK) && NO_READ_WRITE == 0
|
36
|
+
#include "problems/complex_PSD.h"
|
36
37
|
#include "problems/random_prob.h"
|
37
38
|
#include "problems/rob_gauss_cov_est.h"
|
38
39
|
#else
|
39
40
|
_SKIP(rob_gauss_cov_est)
|
40
41
|
_SKIP(random_prob)
|
42
|
+
_SKIP(complex_PSD)
|
43
|
+
#endif
|
44
|
+
|
45
|
+
#if defined(USE_SPECTRAL_CONES) && NO_READ_WRITE == 0
|
46
|
+
#include "spectral_cones_problems/exp_design.h"
|
47
|
+
#include "spectral_cones_problems/graph_partitioning.h"
|
48
|
+
#include "spectral_cones_problems/robust_pca.h"
|
49
|
+
#include "spectral_cones_problems/several_logdet_cones.h"
|
50
|
+
#include "spectral_cones_problems/several_nuc_cone.h"
|
51
|
+
#include "spectral_cones_problems/several_sum_largest.h"
|
52
|
+
#else
|
53
|
+
_SKIP(exp_design)
|
54
|
+
_SKIP(robust_pca)
|
55
|
+
_SKIP(graph_partitioning)
|
56
|
+
_SKIP(several_sum_largest)
|
57
|
+
_SKIP(several_nuc_cone)
|
58
|
+
_SKIP(several_logdet_cones)
|
41
59
|
#endif
|
42
60
|
|
43
61
|
#if NO_READ_WRITE == 0 /* reads / writes */
|
@@ -56,6 +74,7 @@ static const char *all_tests(void) {
|
|
56
74
|
mu_run_test(small_lp);
|
57
75
|
mu_run_test(small_qp);
|
58
76
|
mu_run_test(rob_gauss_cov_est);
|
77
|
+
mu_run_test(complex_PSD);
|
59
78
|
mu_run_test(hs21_tiny_qp);
|
60
79
|
mu_run_test(hs21_tiny_qp_rw);
|
61
80
|
mu_run_test(qafiro_tiny_qp);
|
@@ -65,6 +84,12 @@ static const char *all_tests(void) {
|
|
65
84
|
mu_run_test(max_ent);
|
66
85
|
mu_run_test(mpc_bug);
|
67
86
|
mu_run_test(test_exp_cone);
|
87
|
+
mu_run_test(exp_design);
|
88
|
+
mu_run_test(robust_pca);
|
89
|
+
mu_run_test(graph_partitioning);
|
90
|
+
mu_run_test(several_sum_largest);
|
91
|
+
mu_run_test(several_nuc_cone);
|
92
|
+
mu_run_test(several_logdet_cones);
|
68
93
|
return 0;
|
69
94
|
}
|
70
95
|
int main(void) {
|
@@ -0,0 +1,141 @@
|
|
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 *exp_design(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., 3.24, 0.16,
|
25
|
+
1., 4.84, 3.61, 1., -1.,
|
26
|
+
2.54558441, -0.11313708, -0.14142136, 1.24450793, 0.26870058,
|
27
|
+
-2.12132034, -1., 2.03646753, 0.05656854, 0.56568542,
|
28
|
+
0.93338095, 4.03050865, 0.28284271, -1., 1.,
|
29
|
+
0.04, 0.01, 0.16, 0.01, 2.25,
|
30
|
+
-1., 1.13137085, -0.02828427, -0.05656854, 0.16970563,
|
31
|
+
0.21213203, -0.42426407, -1., 0.64, 0.01,
|
32
|
+
0.16, 0.09, 2.25, 0.04, -1.};
|
33
|
+
scs_int Ai[] = {7, 0, 8, 1, 2, 3, 4, 5, 6, 9, 1, 2, 3, 4, 5,
|
34
|
+
6, 10, 1, 2, 3, 4, 5, 6, 11, 1, 2, 3, 4, 5, 6,
|
35
|
+
12, 1, 2, 3, 4, 5, 6, 13, 1, 2, 3, 4, 5, 6, 14};
|
36
|
+
scs_int Ap[] = {0, 1, 3, 10, 17, 24, 31, 38, 45};
|
37
|
+
|
38
|
+
scs_float b[] = {1., 1., 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.};
|
39
|
+
scs_float c[] = {1., 0., 0., 0., 0., 0., 0., 0.};
|
40
|
+
|
41
|
+
scs_int m = 15;
|
42
|
+
scs_int n = 8;
|
43
|
+
|
44
|
+
scs_int z = 1;
|
45
|
+
scs_int l = 6;
|
46
|
+
scs_int *q = SCS_NULL;
|
47
|
+
scs_int qsize = 0;
|
48
|
+
scs_int *s = SCS_NULL;
|
49
|
+
scs_int ssize = 0;
|
50
|
+
scs_int ep = 0;
|
51
|
+
scs_int ed = 0;
|
52
|
+
scs_float *p = SCS_NULL;
|
53
|
+
scs_int psize = 0;
|
54
|
+
scs_int d_array[] = {3};
|
55
|
+
scs_int dsize = 1;
|
56
|
+
scs_int *nuc_m = SCS_NULL;
|
57
|
+
scs_int *nuc_n = SCS_NULL;
|
58
|
+
scs_int nucsize = 0;
|
59
|
+
scs_int *ell1 = SCS_NULL;
|
60
|
+
scs_int ell1_size = 0;
|
61
|
+
scs_int *sl_n = SCS_NULL;
|
62
|
+
scs_int *sl_k = SCS_NULL;
|
63
|
+
scs_int sl_size = 0;
|
64
|
+
|
65
|
+
// computed using mosek (the input of Ax is truncated, and mosek solved
|
66
|
+
// the problem with the non-truncated data)
|
67
|
+
scs_float opt = 3.0333290743428574;
|
68
|
+
/* end data */
|
69
|
+
|
70
|
+
d->m = m;
|
71
|
+
d->n = n;
|
72
|
+
d->b = b;
|
73
|
+
d->c = c;
|
74
|
+
|
75
|
+
d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
76
|
+
|
77
|
+
d->A->m = m;
|
78
|
+
d->A->n = n;
|
79
|
+
d->A->x = Ax;
|
80
|
+
d->A->i = Ai;
|
81
|
+
d->A->p = Ap;
|
82
|
+
|
83
|
+
k->z = z;
|
84
|
+
k->l = l;
|
85
|
+
k->q = q;
|
86
|
+
k->qsize = qsize;
|
87
|
+
k->s = s;
|
88
|
+
k->ssize = ssize;
|
89
|
+
k->ep = ep;
|
90
|
+
k->ed = ed;
|
91
|
+
k->p = p;
|
92
|
+
k->psize = psize;
|
93
|
+
k->d = d_array;
|
94
|
+
k->dsize = dsize;
|
95
|
+
k->nuc_m = nuc_m;
|
96
|
+
k->nuc_n = nuc_n;
|
97
|
+
k->nucsize = nucsize;
|
98
|
+
k->ell1 = ell1;
|
99
|
+
k->ell1_size = ell1_size;
|
100
|
+
k->sl_n = sl_n;
|
101
|
+
k->sl_k = sl_k;
|
102
|
+
k->sl_size = sl_size;
|
103
|
+
|
104
|
+
scs_set_default_settings(stgs);
|
105
|
+
stgs->eps_abs = 1e-7;
|
106
|
+
stgs->eps_rel = 1e-7;
|
107
|
+
stgs->eps_infeas = 1e-9;
|
108
|
+
|
109
|
+
stgs->log_csv_filename = "test_exp_design.csv";
|
110
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
111
|
+
|
112
|
+
perr = SCS(dot)(d->c, sol->x, d->n) - opt;
|
113
|
+
derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
|
114
|
+
|
115
|
+
scs_printf("primal obj error %4e\n", perr);
|
116
|
+
scs_printf("dual obj error %4e\n", derr);
|
117
|
+
|
118
|
+
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
119
|
+
|
120
|
+
mu_assert("exp_design: SCS failed to produce outputflag SCS_SOLVED", success);
|
121
|
+
|
122
|
+
fail = 0;
|
123
|
+
// TODO: This test fails because of the complementary slackness check.
|
124
|
+
// The complementary slackness tolerance is a bit too tight.
|
125
|
+
// fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
126
|
+
// if (fail)
|
127
|
+
// return fail;
|
128
|
+
|
129
|
+
mu_assert("exp_design: primal feas error: ", ABS(info.res_pri) < 1e-6);
|
130
|
+
mu_assert("exp_design: dual feas error: ", ABS(info.res_dual) < 1e-6);
|
131
|
+
mu_assert("exp_design: duality gap error: ", ABS(info.gap) < 1e-6);
|
132
|
+
|
133
|
+
/* kill data */
|
134
|
+
scs_free(d->A);
|
135
|
+
scs_free(k);
|
136
|
+
scs_free(stgs);
|
137
|
+
scs_free(d);
|
138
|
+
SCS(free_sol)(sol);
|
139
|
+
|
140
|
+
return fail;
|
141
|
+
}
|
@@ -0,0 +1,275 @@
|
|
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 *graph_partitioning(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[] = {-1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
|
24
|
+
-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.,
|
26
|
+
-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.,
|
28
|
+
-1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
|
29
|
+
-1., 1., -1., 1., -1., 1., -1., 1., -1.};
|
30
|
+
scs_int Ai[] = {1, 0, 2, 0, 42, 0, 81, 0, 119, 0, 156, 0, 192, 0,
|
31
|
+
227, 0, 261, 0, 294, 0, 326, 0, 357, 0, 387, 0, 416, 0,
|
32
|
+
444, 0, 471, 0, 497, 0, 522, 0, 546, 0, 569, 0, 591, 0,
|
33
|
+
612, 0, 632, 0, 651, 0, 669, 0, 686, 0, 702, 0, 717, 0,
|
34
|
+
731, 0, 744, 0, 756, 0, 767, 0, 777, 0, 786, 0, 794, 0,
|
35
|
+
801, 0, 807, 0, 812, 0, 816, 0, 819, 0, 821};
|
36
|
+
scs_int Ap[] = {0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25,
|
37
|
+
27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53,
|
38
|
+
55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81};
|
39
|
+
|
40
|
+
scs_float b[] = {
|
41
|
+
0., 0., -1., -0., -0., -0.,
|
42
|
+
-0., -0., -0., -0., -0., -0.,
|
43
|
+
-0., -0., -0., -0., -0., -0.,
|
44
|
+
-0., -0., -0., -0., -0., -0.,
|
45
|
+
-0., -0., -0., -0., -0., -0.,
|
46
|
+
-0., -0., -0., -0., -0., -0.,
|
47
|
+
-0., -0., 1.41421356, -0., -0., -0.,
|
48
|
+
-1., -0., 1.41421356, -0., -0., -0.,
|
49
|
+
-0., -0., -0., -0., -0., -0.,
|
50
|
+
-0., -0., -0., -0., -0., -0.,
|
51
|
+
-0., -0., -0., -0., -0., -0.,
|
52
|
+
-0., -0., -0., -0., -0., -0.,
|
53
|
+
-0., -0., -0., -0., -0., -0.,
|
54
|
+
-0., -0., -0., -1., -0., -0.,
|
55
|
+
-0., -0., -0., -0., -0., -0.,
|
56
|
+
-0., -0., -0., -0., -0., -0.,
|
57
|
+
-0., -0., -0., -0., -0., -0.,
|
58
|
+
-0., -0., -0., -0., -0., -0.,
|
59
|
+
-0., -0., -0., -0., -0., -0.,
|
60
|
+
-0., -0., -0., 1.41421356, -0., -6.,
|
61
|
+
-0., -0., -0., 1.41421356, -0., -0.,
|
62
|
+
-0., -0., -0., -0., 1.41421356, 1.41421356,
|
63
|
+
-0., -0., -0., -0., -0., -0.,
|
64
|
+
1.41421356, -0., -0., -0., -0., -0.,
|
65
|
+
-0., -0., -0., 1.41421356, -0., -0.,
|
66
|
+
-0., -0., -0., -0., -0., -0.,
|
67
|
+
-2., -0., -0., -0., -0., -0.,
|
68
|
+
-0., -0., -0., -0., -0., -0.,
|
69
|
+
-0., -0., -0., -0., -0., -0.,
|
70
|
+
-0., -0., 1.41421356, -0., -0., 1.41421356,
|
71
|
+
-0., -0., -0., -0., -0., -0.,
|
72
|
+
-0., -0., -0., -0., -0., -0.,
|
73
|
+
-2., -0., 1.41421356, -0., -0., -0.,
|
74
|
+
-0., -0., -0., -0., -0., -0.,
|
75
|
+
-0., -0., -0., 1.41421356, -0., -0.,
|
76
|
+
-0., -0., -0., -0., -0., -0.,
|
77
|
+
-0., -0., -0., -0., -0., -0.,
|
78
|
+
-0., -0., -0., -0., -0., -3.,
|
79
|
+
-0., -0., -0., -0., -0., -0.,
|
80
|
+
1.41421356, -0., -0., -0., -0., -0.,
|
81
|
+
-0., -0., -0., -0., -0., -0.,
|
82
|
+
-0., -0., -0., -0., -0., -0.,
|
83
|
+
-0., -0., -0., -0., -0., 1.41421356,
|
84
|
+
1.41421356, -0., -0., -6., -0., -0.,
|
85
|
+
-0., 1.41421356, -0., -0., -0., -0.,
|
86
|
+
-0., -0., -0., -0., -0., -0.,
|
87
|
+
1.41421356, -0., -0., -0., -0., -0.,
|
88
|
+
-0., 1.41421356, -0., -0., -0., -0.,
|
89
|
+
-0., -0., -0., -0., 1.41421356, -0.,
|
90
|
+
-1., -0., -0., -0., -0., -0.,
|
91
|
+
-0., -0., -0., -0., -0., -0.,
|
92
|
+
-0., -0., -0., -0., -0., -0.,
|
93
|
+
-0., -0., -0., -0., -0., -0.,
|
94
|
+
-0., -0., -0., 1.41421356, -0., -0.,
|
95
|
+
-0., -0., -1., -0., -0., -0.,
|
96
|
+
-0., -0., -0., -0., -0., -0.,
|
97
|
+
-0., -0., -0., -0., -0., -0.,
|
98
|
+
-0., -0., -0., 1.41421356, -0., -0.,
|
99
|
+
-0., -0., -0., -0., -0., -0.,
|
100
|
+
-0., -0., -0., -3., -0., -0.,
|
101
|
+
-0., -0., -0., -0., -0., -0.,
|
102
|
+
-0., -0., -0., -0., -0., -0.,
|
103
|
+
-0., 1.41421356, -0., -0., -0., -0.,
|
104
|
+
-0., -0., -0., -0., -0., -0.,
|
105
|
+
1.41421356, -0., 1.41421356, -2., 1.41421356, -0.,
|
106
|
+
-0., -0., -0., -0., -0., -0.,
|
107
|
+
-0., -0., -0., -0., -0., -0.,
|
108
|
+
-0., -0., -0., -0., -0., -0.,
|
109
|
+
-0., -0., -0., -0., -0., -0.,
|
110
|
+
-0., -0., -3., 1.41421356, -0., -0.,
|
111
|
+
-0., -0., -0., -0., -0., -0.,
|
112
|
+
-0., -0., -0., -0., -0., -0.,
|
113
|
+
-0., 1.41421356, -0., -0., -0., -0.,
|
114
|
+
-0., -0., -0., -0., -0., -0.,
|
115
|
+
-4., 1.41421356, -0., -0., 1.41421356, -0.,
|
116
|
+
-0., -0., -0., -0., -0., -0.,
|
117
|
+
-0., -0., -0., -0., -0., -0.,
|
118
|
+
-0., -0., -0., -0., -0., -0.,
|
119
|
+
-0., -0., -0., -3., -0., -0.,
|
120
|
+
-0., -0., -0., -0., -0., -0.,
|
121
|
+
-0., -0., -0., 1.41421356, -0., -0.,
|
122
|
+
-0., -0., -0., -0., -0., -0.,
|
123
|
+
-0., -0., -0., -0., -0., -5.,
|
124
|
+
-0., -0., -0., -0., -0., -0.,
|
125
|
+
-0., -0., -0., -0., 1.41421356, -0.,
|
126
|
+
-0., 1.41421356, -0., -0., -0., -0.,
|
127
|
+
-0., -0., 1.41421356, -0., 1.41421356, -0.,
|
128
|
+
-2., -0., -0., -0., -0., -0.,
|
129
|
+
-0., -0., -0., 1.41421356, -0., 1.41421356,
|
130
|
+
-0., -0., -0., -0., -0., -0.,
|
131
|
+
-0., -0., -0., -0., -0., -0.,
|
132
|
+
-3., -0., -0., -0., -0., -0.,
|
133
|
+
-0., -0., -0., -0., -0., -0.,
|
134
|
+
-0., -0., -0., -0., 1.41421356, -0.,
|
135
|
+
1.41421356, -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., -2., -0., -0.,
|
140
|
+
-0., -0., -0., -0., -0., -0.,
|
141
|
+
-0., -0., -0., -0., -0., 1.41421356,
|
142
|
+
-0., -0., 1.41421356, -0., -0., -0.,
|
143
|
+
-2., -0., -0., -0., -0., -0.,
|
144
|
+
-0., -0., -0., -0., -0., -0.,
|
145
|
+
-0., 1.41421356, -0., -0., -0., -0.,
|
146
|
+
-0., -0., -1., -0., -0., -0.,
|
147
|
+
-0., 1.41421356, -0., -0., -0., -0.,
|
148
|
+
-0., -0., -0., -0., -0., -0.,
|
149
|
+
-0., -0., -0., -2., -0., -0.,
|
150
|
+
-0., -0., -0., -0., -0., -0.,
|
151
|
+
-0., -0., -0., -0., -0., -0.,
|
152
|
+
-0., -0., -0., -2., -0., -0.,
|
153
|
+
-0., -0., -0., -0., -0., -0.,
|
154
|
+
-0., 1.41421356, -0., -0., 1.41421356, -0.,
|
155
|
+
-0., -0., -3., -0., -0., -0.,
|
156
|
+
1.41421356, 1.41421356, -0., -0., -0., -0.,
|
157
|
+
-0., -0., -0., -0., -0., -0.,
|
158
|
+
-1., -0., -0., -0., -0., -0.,
|
159
|
+
-0., -0., -0., -0., -0., -0.,
|
160
|
+
-0., -0., -0., -5., -0., -0.,
|
161
|
+
-0., -0., -0., 1.41421356, -0., -0.,
|
162
|
+
-0., -0., -0., -0., -0., -2.,
|
163
|
+
-0., -0., -0., -0., -0., -0.,
|
164
|
+
-0., -0., -0., -0., -0., -0.,
|
165
|
+
-4., -0., -0., -0., -0., -0.,
|
166
|
+
-0., -0., 1.41421356, -0., 1.41421356, -0.,
|
167
|
+
-4., -0., -0., -0., -0., -0.,
|
168
|
+
-0., -0., -0., -0., -0., -2.,
|
169
|
+
-0., -0., -0., -0., 1.41421356, 1.41421356,
|
170
|
+
-0., -0., -0., -1., -0., -0.,
|
171
|
+
-0., -0., -0., -0., -0., -0.,
|
172
|
+
-3., -0., 1.41421356, -0., -0., -0.,
|
173
|
+
-0., 1.41421356, -4., -0., -0., -0.,
|
174
|
+
-0., -0., -0., -1., -0., -0.,
|
175
|
+
-0., -0., -0., -4., -0., -0.,
|
176
|
+
-0., 1.41421356, -7., -0., -0., -0.,
|
177
|
+
-2., -0., -0., -4., -0., -3.};
|
178
|
+
scs_float c[] = {1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
179
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
|
180
|
+
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
|
181
|
+
|
182
|
+
scs_int m = 822;
|
183
|
+
scs_int n = 41;
|
184
|
+
|
185
|
+
scs_int z = 1;
|
186
|
+
scs_int l = 0;
|
187
|
+
scs_int *q = SCS_NULL;
|
188
|
+
scs_int qsize = 0;
|
189
|
+
scs_int *s = SCS_NULL;
|
190
|
+
scs_int ssize = 0;
|
191
|
+
scs_int ep = 0;
|
192
|
+
scs_int ed = 0;
|
193
|
+
scs_float *p = SCS_NULL;
|
194
|
+
scs_int psize = 0;
|
195
|
+
scs_int *d_array = SCS_NULL;
|
196
|
+
scs_int dsize = 0;
|
197
|
+
scs_int *nuc_m = SCS_NULL;
|
198
|
+
scs_int *nuc_n = SCS_NULL;
|
199
|
+
scs_int nucsize = 0;
|
200
|
+
scs_int *ell1 = SCS_NULL;
|
201
|
+
scs_int ell1_size = 0;
|
202
|
+
scs_int sl_n[] = {40};
|
203
|
+
scs_int sl_k[] = {3};
|
204
|
+
scs_int sl_size = 1;
|
205
|
+
|
206
|
+
// computed using mosek (the input of Ax is truncated, and mosek solved
|
207
|
+
// the problem with the non-truncated data)
|
208
|
+
scs_float opt = -0.7736762265822145;
|
209
|
+
/* end data */
|
210
|
+
|
211
|
+
d->m = m;
|
212
|
+
d->n = n;
|
213
|
+
d->b = b;
|
214
|
+
d->c = c;
|
215
|
+
|
216
|
+
d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
217
|
+
|
218
|
+
d->A->m = m;
|
219
|
+
d->A->n = n;
|
220
|
+
d->A->x = Ax;
|
221
|
+
d->A->i = Ai;
|
222
|
+
d->A->p = Ap;
|
223
|
+
|
224
|
+
k->z = z;
|
225
|
+
k->l = l;
|
226
|
+
k->q = q;
|
227
|
+
k->qsize = qsize;
|
228
|
+
k->s = s;
|
229
|
+
k->ssize = ssize;
|
230
|
+
k->ep = ep;
|
231
|
+
k->ed = ed;
|
232
|
+
k->p = p;
|
233
|
+
k->psize = psize;
|
234
|
+
k->d = d_array;
|
235
|
+
k->dsize = dsize;
|
236
|
+
k->nuc_m = nuc_m;
|
237
|
+
k->nuc_n = nuc_n;
|
238
|
+
k->nucsize = nucsize;
|
239
|
+
k->ell1 = ell1;
|
240
|
+
k->ell1_size = ell1_size;
|
241
|
+
k->sl_n = sl_n;
|
242
|
+
k->sl_k = sl_k;
|
243
|
+
k->sl_size = sl_size;
|
244
|
+
|
245
|
+
scs_set_default_settings(stgs);
|
246
|
+
stgs->eps_abs = 1e-7;
|
247
|
+
stgs->eps_rel = 1e-7;
|
248
|
+
stgs->eps_infeas = 1e-9;
|
249
|
+
|
250
|
+
exitflag = scs(d, k, stgs, sol, &info);
|
251
|
+
|
252
|
+
perr = SCS(dot)(d->c, sol->x, d->n) - opt;
|
253
|
+
derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
|
254
|
+
|
255
|
+
scs_printf("primal obj error %4e\n", perr);
|
256
|
+
scs_printf("dual obj error %4e\n", derr);
|
257
|
+
|
258
|
+
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
259
|
+
|
260
|
+
mu_assert("graph partitioning: SCS failed to produce outputflag SCS_SOLVED",
|
261
|
+
success);
|
262
|
+
|
263
|
+
fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
|
264
|
+
if (fail)
|
265
|
+
return fail;
|
266
|
+
|
267
|
+
/* kill data */
|
268
|
+
scs_free(d->A);
|
269
|
+
scs_free(k);
|
270
|
+
scs_free(stgs);
|
271
|
+
scs_free(d);
|
272
|
+
SCS(free_sol)(sol);
|
273
|
+
|
274
|
+
return fail;
|
275
|
+
}
|