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
metadata
CHANGED
|
@@ -1,73 +1,17 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: scs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Kane
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
-
dependencies:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: rake
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: minitest
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '5'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '5'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: numo-narray
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ">="
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0'
|
|
69
|
-
description:
|
|
70
|
-
email: andrew@chartkick.com
|
|
11
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description:
|
|
14
|
+
email: andrew@ankane.org
|
|
71
15
|
executables: []
|
|
72
16
|
extensions:
|
|
73
17
|
- ext/scs/extconf.rb
|
|
@@ -81,6 +25,8 @@ files:
|
|
|
81
25
|
- lib/scs/ffi.rb
|
|
82
26
|
- lib/scs/solver.rb
|
|
83
27
|
- lib/scs/version.rb
|
|
28
|
+
- vendor/scs/CITATION.cff
|
|
29
|
+
- vendor/scs/CMakeLists.txt
|
|
84
30
|
- vendor/scs/LICENSE.txt
|
|
85
31
|
- vendor/scs/Makefile
|
|
86
32
|
- vendor/scs/README.md
|
|
@@ -94,94 +40,79 @@ files:
|
|
|
94
40
|
- vendor/scs/include/rw.h
|
|
95
41
|
- vendor/scs/include/scs.h
|
|
96
42
|
- vendor/scs/include/scs_blas.h
|
|
43
|
+
- vendor/scs/include/scs_types.h
|
|
44
|
+
- vendor/scs/include/scs_work.h
|
|
97
45
|
- vendor/scs/include/util.h
|
|
98
|
-
- vendor/scs/linsys/amatrix.c
|
|
99
|
-
- vendor/scs/linsys/amatrix.h
|
|
100
|
-
- vendor/scs/linsys/amatrix.o
|
|
101
46
|
- vendor/scs/linsys/cpu/direct/private.c
|
|
102
47
|
- vendor/scs/linsys/cpu/direct/private.h
|
|
103
|
-
- vendor/scs/linsys/cpu/direct/private.o
|
|
104
48
|
- vendor/scs/linsys/cpu/indirect/private.c
|
|
105
49
|
- vendor/scs/linsys/cpu/indirect/private.h
|
|
106
|
-
- vendor/scs/linsys/
|
|
50
|
+
- vendor/scs/linsys/csparse.c
|
|
51
|
+
- vendor/scs/linsys/csparse.h
|
|
107
52
|
- vendor/scs/linsys/external/amd/LICENSE.txt
|
|
108
53
|
- vendor/scs/linsys/external/amd/SuiteSparse_config.c
|
|
109
54
|
- vendor/scs/linsys/external/amd/SuiteSparse_config.h
|
|
110
|
-
- vendor/scs/linsys/external/amd/SuiteSparse_config.o
|
|
111
55
|
- vendor/scs/linsys/external/amd/amd.h
|
|
112
56
|
- vendor/scs/linsys/external/amd/amd_1.c
|
|
113
|
-
- vendor/scs/linsys/external/amd/amd_1.o
|
|
114
57
|
- vendor/scs/linsys/external/amd/amd_2.c
|
|
115
|
-
- vendor/scs/linsys/external/amd/amd_2.o
|
|
116
58
|
- vendor/scs/linsys/external/amd/amd_aat.c
|
|
117
|
-
- vendor/scs/linsys/external/amd/amd_aat.o
|
|
118
59
|
- vendor/scs/linsys/external/amd/amd_control.c
|
|
119
|
-
- vendor/scs/linsys/external/amd/amd_control.o
|
|
120
60
|
- vendor/scs/linsys/external/amd/amd_defaults.c
|
|
121
|
-
- vendor/scs/linsys/external/amd/amd_defaults.o
|
|
122
61
|
- vendor/scs/linsys/external/amd/amd_dump.c
|
|
123
|
-
- vendor/scs/linsys/external/amd/amd_dump.o
|
|
124
62
|
- vendor/scs/linsys/external/amd/amd_global.c
|
|
125
|
-
- vendor/scs/linsys/external/amd/amd_global.o
|
|
126
63
|
- vendor/scs/linsys/external/amd/amd_info.c
|
|
127
|
-
- vendor/scs/linsys/external/amd/amd_info.o
|
|
128
64
|
- vendor/scs/linsys/external/amd/amd_internal.h
|
|
129
65
|
- vendor/scs/linsys/external/amd/amd_order.c
|
|
130
|
-
- vendor/scs/linsys/external/amd/amd_order.o
|
|
131
66
|
- vendor/scs/linsys/external/amd/amd_post_tree.c
|
|
132
|
-
- vendor/scs/linsys/external/amd/amd_post_tree.o
|
|
133
67
|
- vendor/scs/linsys/external/amd/amd_postorder.c
|
|
134
|
-
- vendor/scs/linsys/external/amd/amd_postorder.o
|
|
135
68
|
- vendor/scs/linsys/external/amd/amd_preprocess.c
|
|
136
|
-
- vendor/scs/linsys/external/amd/amd_preprocess.o
|
|
137
69
|
- vendor/scs/linsys/external/amd/amd_valid.c
|
|
138
|
-
- vendor/scs/linsys/external/amd/amd_valid.o
|
|
139
70
|
- vendor/scs/linsys/external/amd/changes
|
|
140
71
|
- vendor/scs/linsys/external/qdldl/LICENSE
|
|
141
72
|
- vendor/scs/linsys/external/qdldl/README.md
|
|
142
73
|
- vendor/scs/linsys/external/qdldl/changes
|
|
143
74
|
- vendor/scs/linsys/external/qdldl/qdldl.c
|
|
144
75
|
- vendor/scs/linsys/external/qdldl/qdldl.h
|
|
145
|
-
- vendor/scs/linsys/external/qdldl/qdldl.o
|
|
146
76
|
- vendor/scs/linsys/external/qdldl/qdldl_types.h
|
|
147
77
|
- vendor/scs/linsys/gpu/gpu.c
|
|
148
78
|
- vendor/scs/linsys/gpu/gpu.h
|
|
149
79
|
- vendor/scs/linsys/gpu/indirect/private.c
|
|
150
80
|
- vendor/scs/linsys/gpu/indirect/private.h
|
|
81
|
+
- vendor/scs/linsys/scs_matrix.c
|
|
82
|
+
- vendor/scs/linsys/scs_matrix.h
|
|
151
83
|
- vendor/scs/scs.mk
|
|
152
84
|
- vendor/scs/src/aa.c
|
|
153
|
-
- vendor/scs/src/aa.o
|
|
154
85
|
- vendor/scs/src/cones.c
|
|
155
|
-
- vendor/scs/src/cones.o
|
|
156
86
|
- vendor/scs/src/ctrlc.c
|
|
157
|
-
- vendor/scs/src/ctrlc.o
|
|
158
87
|
- vendor/scs/src/linalg.c
|
|
159
|
-
- vendor/scs/src/linalg.o
|
|
160
88
|
- vendor/scs/src/normalize.c
|
|
161
|
-
- vendor/scs/src/normalize.o
|
|
162
89
|
- vendor/scs/src/rw.c
|
|
163
|
-
- vendor/scs/src/rw.o
|
|
164
90
|
- vendor/scs/src/scs.c
|
|
165
|
-
- vendor/scs/src/scs.o
|
|
166
91
|
- vendor/scs/src/scs_version.c
|
|
167
|
-
- vendor/scs/src/scs_version.o
|
|
168
92
|
- vendor/scs/src/util.c
|
|
169
|
-
- vendor/scs/src/util.o
|
|
170
|
-
- vendor/scs/test/data/small_random_socp
|
|
171
93
|
- vendor/scs/test/minunit.h
|
|
172
94
|
- vendor/scs/test/problem_utils.h
|
|
95
|
+
- vendor/scs/test/problems/degenerate.h
|
|
96
|
+
- vendor/scs/test/problems/hs21_tiny_qp.h
|
|
97
|
+
- vendor/scs/test/problems/hs21_tiny_qp_rw.h
|
|
98
|
+
- vendor/scs/test/problems/infeasible_tiny_qp.h
|
|
99
|
+
- vendor/scs/test/problems/qafiro_tiny_qp.h
|
|
100
|
+
- vendor/scs/test/problems/random_prob
|
|
101
|
+
- vendor/scs/test/problems/random_prob.h
|
|
173
102
|
- vendor/scs/test/problems/rob_gauss_cov_est.h
|
|
174
103
|
- vendor/scs/test/problems/small_lp.h
|
|
175
|
-
- vendor/scs/test/problems/
|
|
104
|
+
- vendor/scs/test/problems/small_qp.h
|
|
105
|
+
- vendor/scs/test/problems/test_validation.h
|
|
106
|
+
- vendor/scs/test/problems/unbounded_tiny_qp.h
|
|
176
107
|
- vendor/scs/test/random_socp_prob.c
|
|
108
|
+
- vendor/scs/test/rng.h
|
|
177
109
|
- vendor/scs/test/run_from_file.c
|
|
178
|
-
- vendor/scs/test/run_tests
|
|
179
110
|
- vendor/scs/test/run_tests.c
|
|
180
|
-
homepage: https://github.com/ankane/scs
|
|
111
|
+
homepage: https://github.com/ankane/scs-ruby
|
|
181
112
|
licenses:
|
|
182
113
|
- MIT
|
|
183
114
|
metadata: {}
|
|
184
|
-
post_install_message:
|
|
115
|
+
post_install_message:
|
|
185
116
|
rdoc_options: []
|
|
186
117
|
require_paths:
|
|
187
118
|
- lib
|
|
@@ -196,8 +127,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
196
127
|
- !ruby/object:Gem::Version
|
|
197
128
|
version: '0'
|
|
198
129
|
requirements: []
|
|
199
|
-
rubygems_version: 3.
|
|
200
|
-
signing_key:
|
|
130
|
+
rubygems_version: 3.3.3
|
|
131
|
+
signing_key:
|
|
201
132
|
specification_version: 4
|
|
202
133
|
summary: SCS - the splitting conic solver - for Ruby
|
|
203
134
|
test_files: []
|
data/vendor/scs/linsys/amatrix.c
DELETED
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
/* contains routines common to direct and indirect sparse solvers */
|
|
2
|
-
#include "amatrix.h"
|
|
3
|
-
|
|
4
|
-
#include "linsys.h"
|
|
5
|
-
|
|
6
|
-
#define MIN_SCALE (1e-4)
|
|
7
|
-
#define MAX_SCALE (1e4)
|
|
8
|
-
#define NUM_SCALE_PASSES 10 /* additional passes don't help much */
|
|
9
|
-
|
|
10
|
-
scs_int SCS(copy_a_matrix)(ScsMatrix **dstp, const ScsMatrix *src) {
|
|
11
|
-
scs_int Anz = src->p[src->n];
|
|
12
|
-
ScsMatrix *A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
|
|
13
|
-
if (!A) {
|
|
14
|
-
return 0;
|
|
15
|
-
}
|
|
16
|
-
A->n = src->n;
|
|
17
|
-
A->m = src->m;
|
|
18
|
-
A->x = (scs_float *)scs_malloc(sizeof(scs_float) *
|
|
19
|
-
Anz); /* A values, size: NNZ A */
|
|
20
|
-
A->i = (scs_int *)scs_malloc(sizeof(scs_int) *
|
|
21
|
-
Anz); /* A row index, size: NNZ A */
|
|
22
|
-
A->p = (scs_int *)scs_malloc(sizeof(scs_int) *
|
|
23
|
-
(src->n + 1)); /* A column pointer, size: n+1 */
|
|
24
|
-
if (!A->x || !A->i || !A->p) {
|
|
25
|
-
return 0;
|
|
26
|
-
}
|
|
27
|
-
memcpy(A->x, src->x, sizeof(scs_float) * Anz);
|
|
28
|
-
memcpy(A->i, src->i, sizeof(scs_int) * Anz);
|
|
29
|
-
memcpy(A->p, src->p, sizeof(scs_int) * (src->n + 1));
|
|
30
|
-
*dstp = A;
|
|
31
|
-
return 1;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
scs_int SCS(validate_lin_sys)(const ScsMatrix *A) {
|
|
35
|
-
scs_int i, r_max, Anz;
|
|
36
|
-
if (!A->x || !A->i || !A->p) {
|
|
37
|
-
scs_printf("data incompletely specified\n");
|
|
38
|
-
return -1;
|
|
39
|
-
}
|
|
40
|
-
/* detects some errors in A col ptrs: */
|
|
41
|
-
Anz = A->p[A->n];
|
|
42
|
-
if (Anz > 0) {
|
|
43
|
-
for (i = 0; i < A->n; ++i) {
|
|
44
|
-
if (A->p[i] == A->p[i + 1]) {
|
|
45
|
-
scs_printf(
|
|
46
|
-
"WARN: A->p (column pointers) not strictly increasing, "
|
|
47
|
-
"column %li empty\n",
|
|
48
|
-
(long)i);
|
|
49
|
-
} else if (A->p[i] > A->p[i + 1]) {
|
|
50
|
-
scs_printf("ERROR: A->p (column pointers) decreasing\n");
|
|
51
|
-
return -1;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (((scs_float)Anz / A->m > A->n) || (Anz < 0)) {
|
|
56
|
-
scs_printf("Anz (nonzeros in A) = %li, outside of valid range\n",
|
|
57
|
-
(long)Anz);
|
|
58
|
-
return -1;
|
|
59
|
-
}
|
|
60
|
-
r_max = 0;
|
|
61
|
-
for (i = 0; i < Anz; ++i) {
|
|
62
|
-
if (A->i[i] > r_max) {
|
|
63
|
-
r_max = A->i[i];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (r_max > A->m - 1) {
|
|
67
|
-
scs_printf("number of rows in A inconsistent with input dimension\n");
|
|
68
|
-
return -1;
|
|
69
|
-
}
|
|
70
|
-
return 0;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
void SCS(free_a_matrix)(ScsMatrix *A) {
|
|
74
|
-
if (A) {
|
|
75
|
-
scs_free(A->x);
|
|
76
|
-
scs_free(A->i);
|
|
77
|
-
scs_free(A->p);
|
|
78
|
-
scs_free(A);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
#if EXTRA_VERBOSE > 0
|
|
83
|
-
static void print_a_matrix(const ScsMatrix *A) {
|
|
84
|
-
scs_int i, j;
|
|
85
|
-
/* TODO: this is to prevent clogging stdout */
|
|
86
|
-
if (A->p[A->n] < 2500) {
|
|
87
|
-
scs_printf("\n");
|
|
88
|
-
for (i = 0; i < A->n; ++i) {
|
|
89
|
-
scs_printf("Col %li: ", (long)i);
|
|
90
|
-
for (j = A->p[i]; j < A->p[i + 1]; j++) {
|
|
91
|
-
scs_printf("A[%li,%li] = %4f, ", (long)A->i[j], (long)i, A->x[j]);
|
|
92
|
-
}
|
|
93
|
-
scs_printf("norm col = %4f\n",
|
|
94
|
-
SCS(norm)(&(A->x[A->p[i]]), A->p[i + 1] - A->p[i]));
|
|
95
|
-
}
|
|
96
|
-
scs_printf("norm A = %4f\n", SCS(norm)(A->x, A->p[A->n]));
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
#endif
|
|
100
|
-
|
|
101
|
-
void SCS(_normalize_a)(ScsMatrix *A, const ScsSettings *stgs, const ScsCone *k,
|
|
102
|
-
ScsScaling *scal) {
|
|
103
|
-
scs_float *D = (scs_float *)scs_malloc(A->m * sizeof(scs_float));
|
|
104
|
-
scs_float *E = (scs_float *)scs_malloc(A->n * sizeof(scs_float));
|
|
105
|
-
scs_float *Dt = (scs_float *)scs_malloc(A->m * sizeof(scs_float));
|
|
106
|
-
scs_float *Et = (scs_float *)scs_malloc(A->n * sizeof(scs_float));
|
|
107
|
-
scs_float *nms = (scs_float *)scs_calloc(A->m, sizeof(scs_float));
|
|
108
|
-
scs_int i, j, l, count, delta, *boundaries;
|
|
109
|
-
scs_int num_boundaries = SCS(get_cone_boundaries)(k, &boundaries);
|
|
110
|
-
scs_float wrk;
|
|
111
|
-
|
|
112
|
-
#if EXTRA_VERBOSE > 0
|
|
113
|
-
SCS(timer) normalize_timer;
|
|
114
|
-
SCS(tic)(&normalize_timer);
|
|
115
|
-
scs_printf("normalizing A\n");
|
|
116
|
-
print_a_matrix(A);
|
|
117
|
-
#endif
|
|
118
|
-
|
|
119
|
-
for (l = 0; l < NUM_SCALE_PASSES; ++l) {
|
|
120
|
-
memset(D, 0, A->m * sizeof(scs_float));
|
|
121
|
-
memset(E, 0, A->n * sizeof(scs_float));
|
|
122
|
-
/* calculate row norms */
|
|
123
|
-
for (i = 0; i < A->n; ++i) {
|
|
124
|
-
for (j = A->p[i]; j < A->p[i + 1]; ++j) {
|
|
125
|
-
D[A->i[j]] = MAX(D[A->i[j]], ABS(A->x[j]));
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
for (i = 0; i < A->m; ++i) {
|
|
129
|
-
D[i] = SQRTF(D[i]);
|
|
130
|
-
D[i] = D[i] < MIN_SCALE ? 1.0 : D[i];
|
|
131
|
-
D[i] = D[i] > MAX_SCALE ? MAX_SCALE : D[i];
|
|
132
|
-
}
|
|
133
|
-
/* calculate col norms, E */
|
|
134
|
-
for (i = 0; i < A->n; ++i) {
|
|
135
|
-
E[i] = SCS(norm_inf)(&(A->x[A->p[i]]), A->p[i + 1] - A->p[i]);
|
|
136
|
-
E[i] = SQRTF(E[i]);
|
|
137
|
-
E[i] = E[i] < MIN_SCALE ? 1.0 : E[i];
|
|
138
|
-
E[i] = E[i] > MAX_SCALE ? MAX_SCALE : E[i];
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/* mean of D across each cone */
|
|
142
|
-
count = boundaries[0];
|
|
143
|
-
for (i = 1; i < num_boundaries; ++i) {
|
|
144
|
-
wrk = 0;
|
|
145
|
-
delta = boundaries[i];
|
|
146
|
-
for (j = count; j < count + delta; ++j) {
|
|
147
|
-
wrk += D[j];
|
|
148
|
-
}
|
|
149
|
-
wrk /= delta;
|
|
150
|
-
for (j = count; j < count + delta; ++j) {
|
|
151
|
-
D[j] = wrk;
|
|
152
|
-
}
|
|
153
|
-
count += delta;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/* scale the rows with D */
|
|
157
|
-
for (i = 0; i < A->n; ++i) {
|
|
158
|
-
for (j = A->p[i]; j < A->p[i + 1]; ++j) {
|
|
159
|
-
A->x[j] /= D[A->i[j]];
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/* scale the cols with E */
|
|
164
|
-
for (i = 0; i < A->n; ++i) {
|
|
165
|
-
SCS(scale_array)(&(A->x[A->p[i]]), 1.0 / E[i], A->p[i + 1] - A->p[i]);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/* Accumulate scaling */
|
|
169
|
-
for (i = 0; i < A->m; ++i) {
|
|
170
|
-
Dt[i] = (l == 0) ? D[i] : Dt[i] * D[i];
|
|
171
|
-
}
|
|
172
|
-
for (i = 0; i < A->n; ++i) {
|
|
173
|
-
Et[i] = (l == 0) ? E[i] : Et[i] * E[i];
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
scs_free(boundaries);
|
|
177
|
-
scs_free(D);
|
|
178
|
-
scs_free(E);
|
|
179
|
-
|
|
180
|
-
/* calculate mean of row norms of A */
|
|
181
|
-
for (i = 0; i < A->n; ++i) {
|
|
182
|
-
for (j = A->p[i]; j < A->p[i + 1]; ++j) {
|
|
183
|
-
wrk = A->x[j];
|
|
184
|
-
nms[A->i[j]] += wrk * wrk;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
scal->mean_norm_row_a = 0.0;
|
|
188
|
-
for (i = 0; i < A->m; ++i) {
|
|
189
|
-
scal->mean_norm_row_a += SQRTF(nms[i]) / A->m;
|
|
190
|
-
}
|
|
191
|
-
scs_free(nms);
|
|
192
|
-
|
|
193
|
-
/* calculate mean of col norms of A */
|
|
194
|
-
scal->mean_norm_col_a = 0.0;
|
|
195
|
-
for (i = 0; i < A->n; ++i) {
|
|
196
|
-
scal->mean_norm_col_a +=
|
|
197
|
-
SCS(norm)(&(A->x[A->p[i]]), A->p[i + 1] - A->p[i]) / A->n;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/* scale up by d->SCALE if not equal to 1 */
|
|
201
|
-
if (stgs->scale != 1) {
|
|
202
|
-
SCS(scale_array)(A->x, stgs->scale, A->p[A->n]);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
scal->D = Dt;
|
|
206
|
-
scal->E = Et;
|
|
207
|
-
|
|
208
|
-
#if EXTRA_VERBOSE > 0
|
|
209
|
-
scs_printf("finished normalizing A, time: %1.2es\n",
|
|
210
|
-
SCS(tocq)(&normalize_timer) / 1e3);
|
|
211
|
-
print_a_matrix(A);
|
|
212
|
-
#endif
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
void SCS(_un_normalize_a)(ScsMatrix *A, const ScsSettings *stgs,
|
|
216
|
-
const ScsScaling *scal) {
|
|
217
|
-
scs_int i, j;
|
|
218
|
-
scs_float *D = scal->D;
|
|
219
|
-
scs_float *E = scal->E;
|
|
220
|
-
for (i = 0; i < A->n; ++i) {
|
|
221
|
-
SCS(scale_array)
|
|
222
|
-
(&(A->x[A->p[i]]), E[i] / stgs->scale, A->p[i + 1] - A->p[i]);
|
|
223
|
-
}
|
|
224
|
-
for (i = 0; i < A->n; ++i) {
|
|
225
|
-
for (j = A->p[i]; j < A->p[i + 1]; ++j) {
|
|
226
|
-
A->x[j] *= D[A->i[j]];
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
void SCS(_accum_by_atrans)(scs_int n, scs_float *Ax, scs_int *Ai, scs_int *Ap,
|
|
232
|
-
const scs_float *x, scs_float *y) {
|
|
233
|
-
/* y += A'*x
|
|
234
|
-
A in column compressed format
|
|
235
|
-
parallelizes over columns (rows of A')
|
|
236
|
-
*/
|
|
237
|
-
scs_int p, j;
|
|
238
|
-
scs_int c1, c2;
|
|
239
|
-
scs_float yj;
|
|
240
|
-
#if EXTRA_VERBOSE > 0
|
|
241
|
-
SCS(timer) mult_by_atrans_timer;
|
|
242
|
-
SCS(tic)(&mult_by_atrans_timer);
|
|
243
|
-
#endif
|
|
244
|
-
#ifdef _OPENMP
|
|
245
|
-
#pragma omp parallel for private(p, c1, c2, yj)
|
|
246
|
-
#endif
|
|
247
|
-
for (j = 0; j < n; j++) {
|
|
248
|
-
yj = y[j];
|
|
249
|
-
c1 = Ap[j];
|
|
250
|
-
c2 = Ap[j + 1];
|
|
251
|
-
for (p = c1; p < c2; p++) {
|
|
252
|
-
yj += Ax[p] * x[Ai[p]];
|
|
253
|
-
}
|
|
254
|
-
y[j] = yj;
|
|
255
|
-
}
|
|
256
|
-
#if EXTRA_VERBOSE > 0
|
|
257
|
-
scs_printf("mult By A trans time: %1.2es\n",
|
|
258
|
-
SCS(tocq)(&mult_by_atrans_timer) / 1e3);
|
|
259
|
-
#endif
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
scs_float SCS(cumsum)(scs_int *p, scs_int *c, scs_int n) {
|
|
263
|
-
scs_int i, nz = 0;
|
|
264
|
-
scs_float nz2 = 0;
|
|
265
|
-
if (!p || !c) {
|
|
266
|
-
return (-1);
|
|
267
|
-
} /* check inputs */
|
|
268
|
-
for (i = 0; i < n; i++) {
|
|
269
|
-
p[i] = nz;
|
|
270
|
-
nz += c[i];
|
|
271
|
-
nz2 += c[i]; /* also in scs_float to avoid scs_int overflow */
|
|
272
|
-
c[i] = p[i]; /* also copy p[0..n-1] back into c[0..n-1]*/
|
|
273
|
-
}
|
|
274
|
-
p[n] = nz;
|
|
275
|
-
return nz2; /* return sum (c [0..n-1]) */
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
void SCS(_accum_by_a)(scs_int n, scs_float *Ax, scs_int *Ai, scs_int *Ap,
|
|
279
|
-
const scs_float *x, scs_float *y) {
|
|
280
|
-
/*y += A*x
|
|
281
|
-
A in column compressed format
|
|
282
|
-
this parallelizes over columns and uses
|
|
283
|
-
pragma atomic to prevent concurrent writes to y
|
|
284
|
-
*/
|
|
285
|
-
scs_int p, j;
|
|
286
|
-
scs_int c1, c2;
|
|
287
|
-
scs_float xj;
|
|
288
|
-
#if EXTRA_VERBOSE > 0
|
|
289
|
-
SCS(timer) mult_by_a_timer;
|
|
290
|
-
SCS(tic)(&mult_by_a_timer);
|
|
291
|
-
#endif
|
|
292
|
-
/*#pragma omp parallel for private(p,c1,c2,xj) */
|
|
293
|
-
for (j = 0; j < n; j++) {
|
|
294
|
-
xj = x[j];
|
|
295
|
-
c1 = Ap[j];
|
|
296
|
-
c2 = Ap[j + 1];
|
|
297
|
-
for (p = c1; p < c2; p++) {
|
|
298
|
-
/*#pragma omp atomic */
|
|
299
|
-
y[Ai[p]] += Ax[p] * xj;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
#if EXTRA_VERBOSE > 0
|
|
303
|
-
scs_printf("mult By A time: %1.2es\n", SCS(tocq)(&mult_by_a_timer) / 1e3);
|
|
304
|
-
#endif
|
|
305
|
-
}
|
data/vendor/scs/linsys/amatrix.h
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#ifndef AMATRIX_H_GUARD
|
|
2
|
-
#define AMATRIX_H_GUARD
|
|
3
|
-
|
|
4
|
-
#ifdef __cplusplus
|
|
5
|
-
extern "C" {
|
|
6
|
-
#endif
|
|
7
|
-
|
|
8
|
-
#include "glbopts.h"
|
|
9
|
-
#include "linalg.h"
|
|
10
|
-
#include "linsys.h"
|
|
11
|
-
#include "scs.h"
|
|
12
|
-
#include "util.h"
|
|
13
|
-
|
|
14
|
-
/* this struct defines the data matrix A */
|
|
15
|
-
struct SCS_A_DATA_MATRIX {
|
|
16
|
-
/* A is supplied in column compressed format */
|
|
17
|
-
scs_float *x; /* A values, size: NNZ A */
|
|
18
|
-
scs_int *i; /* A row index, size: NNZ A */
|
|
19
|
-
scs_int *p; /* A column pointer, size: n+1 */
|
|
20
|
-
scs_int m, n; /* m rows, n cols */
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
void SCS(_accum_by_atrans)(scs_int n, scs_float *Ax, scs_int *Ai, scs_int *Ap,
|
|
24
|
-
const scs_float *x, scs_float *y);
|
|
25
|
-
void SCS(_accum_by_a)(scs_int n, scs_float *Ax, scs_int *Ai, scs_int *Ap,
|
|
26
|
-
const scs_float *x, scs_float *y);
|
|
27
|
-
void SCS(_normalize_a)(ScsMatrix *A, const ScsSettings *stgs, const ScsCone *k,
|
|
28
|
-
ScsScaling *scal);
|
|
29
|
-
void SCS(_un_normalize_a)(ScsMatrix *A, const ScsSettings *stgs,
|
|
30
|
-
const ScsScaling *scal);
|
|
31
|
-
scs_float SCS(cumsum)(scs_int *p, scs_int *c, scs_int n);
|
|
32
|
-
|
|
33
|
-
#ifdef __cplusplus
|
|
34
|
-
}
|
|
35
|
-
#endif
|
|
36
|
-
#endif
|
data/vendor/scs/linsys/amatrix.o
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/vendor/scs/src/aa.o
DELETED
|
Binary file
|
data/vendor/scs/src/cones.o
DELETED
|
Binary file
|
data/vendor/scs/src/ctrlc.o
DELETED
|
Binary file
|
data/vendor/scs/src/linalg.o
DELETED
|
Binary file
|
data/vendor/scs/src/normalize.o
DELETED
|
Binary file
|
data/vendor/scs/src/rw.o
DELETED
|
Binary file
|
data/vendor/scs/src/scs.o
DELETED
|
Binary file
|
|
Binary file
|
data/vendor/scs/src/util.o
DELETED
|
Binary file
|
|
Binary file
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#include "rw.h"
|
|
2
|
-
#include "scs.h"
|
|
3
|
-
#include "util.h"
|
|
4
|
-
|
|
5
|
-
#define OPT (1.530897)
|
|
6
|
-
|
|
7
|
-
static const char *small_random_socp(void) {
|
|
8
|
-
ScsData *d;
|
|
9
|
-
ScsCone *k;
|
|
10
|
-
ScsSolution *sol;
|
|
11
|
-
ScsInfo info = {0};
|
|
12
|
-
scs_int exitflag, success;
|
|
13
|
-
scs_float perr, derr;
|
|
14
|
-
const char *filename = "test/data/small_random_socp";
|
|
15
|
-
|
|
16
|
-
SCS(read_data)(filename, &d, &k);
|
|
17
|
-
sol = scs_calloc(1, sizeof(ScsSolution));
|
|
18
|
-
exitflag = scs(d, k, sol, &info);
|
|
19
|
-
|
|
20
|
-
perr = SCS(dot)(d->c, sol->x, d->n) - OPT;
|
|
21
|
-
derr = -SCS(dot)(d->b, sol->y, d->m) - OPT;
|
|
22
|
-
|
|
23
|
-
scs_printf("primal obj error %4e\n", perr);
|
|
24
|
-
scs_printf("dual obj error %4e\n", derr);
|
|
25
|
-
|
|
26
|
-
success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
|
|
27
|
-
|
|
28
|
-
SCS(free_data)(d, k);
|
|
29
|
-
SCS(free_sol)(sol);
|
|
30
|
-
mu_assert("small_random_socp: SCS failed to produce outputflag SCS_SOLVED",
|
|
31
|
-
success);
|
|
32
|
-
return 0;
|
|
33
|
-
}
|
data/vendor/scs/test/run_tests
DELETED