scs 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +42 -13
- data/lib/scs/ffi.rb +1 -7
- data/lib/scs/matrix.rb +72 -0
- data/lib/scs/solver.rb +19 -26
- data/lib/scs/version.rb +1 -1
- data/lib/scs.rb +1 -0
- data/vendor/scs/CITATION.cff +1 -1
- data/vendor/scs/CMakeLists.txt +55 -7
- data/vendor/scs/Makefile +9 -9
- data/vendor/scs/README.md +4 -1
- data/vendor/scs/include/aa.h +1 -1
- data/vendor/scs/include/cones.h +17 -12
- data/vendor/scs/include/glbopts.h +27 -66
- data/vendor/scs/include/linalg.h +2 -1
- data/vendor/scs/include/linsys.h +13 -13
- data/vendor/scs/include/normalize.h +7 -5
- data/vendor/scs/include/rw.h +3 -3
- data/vendor/scs/include/scs.h +85 -106
- data/vendor/scs/include/scs_types.h +34 -0
- data/vendor/scs/include/scs_work.h +80 -0
- data/vendor/scs/include/util.h +3 -1
- data/vendor/scs/linsys/cpu/direct/private.c +86 -73
- data/vendor/scs/linsys/cpu/direct/private.h +2 -2
- data/vendor/scs/linsys/cpu/indirect/private.c +42 -33
- data/vendor/scs/linsys/cpu/indirect/private.h +1 -2
- data/vendor/scs/linsys/csparse.c +3 -3
- data/vendor/scs/linsys/external/amd/LICENSE.txt +0 -897
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +9 -7
- data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +1 -1
- data/vendor/scs/linsys/external/amd/amd_order.c +5 -5
- data/vendor/scs/linsys/gpu/gpu.h +8 -11
- data/vendor/scs/linsys/gpu/indirect/private.c +72 -49
- data/vendor/scs/linsys/gpu/indirect/private.h +14 -13
- data/vendor/scs/linsys/scs_matrix.c +55 -104
- data/vendor/scs/linsys/scs_matrix.h +5 -4
- data/vendor/scs/scs.mk +1 -5
- data/vendor/scs/src/aa.c +13 -8
- data/vendor/scs/src/cones.c +197 -108
- data/vendor/scs/src/linalg.c +25 -0
- data/vendor/scs/src/normalize.c +75 -26
- data/vendor/scs/src/rw.c +74 -30
- data/vendor/scs/src/scs.c +300 -264
- data/vendor/scs/src/scs_version.c +8 -6
- data/vendor/scs/src/util.c +27 -13
- data/vendor/scs/test/minunit.h +6 -1
- data/vendor/scs/test/problem_utils.h +28 -35
- data/vendor/scs/test/problems/degenerate.h +2 -1
- data/vendor/scs/test/problems/hs21_tiny_qp.h +2 -1
- data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +6 -2
- data/vendor/scs/test/problems/infeasible_tiny_qp.h +2 -1
- data/vendor/scs/test/problems/qafiro_tiny_qp.h +5 -4
- data/vendor/scs/test/problems/random_prob.h +6 -2
- data/vendor/scs/test/problems/rob_gauss_cov_est.h +9 -2
- data/vendor/scs/test/problems/small_lp.h +7 -2
- data/vendor/scs/test/problems/small_qp.h +387 -0
- data/vendor/scs/test/problems/{test_fails.h → test_validation.h} +7 -4
- data/vendor/scs/test/problems/unbounded_tiny_qp.h +4 -4
- data/vendor/scs/test/random_socp_prob.c +4 -2
- data/vendor/scs/test/run_from_file.c +16 -4
- data/vendor/scs/test/run_tests.c +23 -14
- metadata +10 -35
- data/vendor/scs/linsys/cpu/direct/private.o +0 -0
- data/vendor/scs/linsys/cpu/indirect/private.o +0 -0
- data/vendor/scs/linsys/csparse.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/linsys/scs_matrix.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_indir.o +0 -0
- data/vendor/scs/src/scs_version.o +0 -0
- data/vendor/scs/src/util.o +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2afa78c52786f5325f64a76edb263b4d30dabab7b15a9415375ed57af861669c
|
4
|
+
data.tar.gz: ae105845b96b30fab4a24bdf3eb2c1f80db7b12d635716ac3c4acfdb17930783
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8bc74c496d1661b5f14e6da33c79987502d4c320c6789e4cd2d7a4bf118a8800978dc0cd0989f2f9d38978a9d27e14c37d47f8b6bb63ced36af97fee753f5e0
|
7
|
+
data.tar.gz: 5282b6cd3e7f7ed98423ef61eabb1275ce17bdb7b497fab9f7537c53cf7be154d3f1029a170c2c6562bb35780ebceca075e8ca12cd81af163bb7824bb2e91a27
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## 0.4.0 (2022-07-06)
|
2
|
+
|
3
|
+
- Updated SCS to 3.2.0
|
4
|
+
- Added `Matrix` class
|
5
|
+
- Dropped support for Ruby < 2.7
|
6
|
+
|
7
|
+
## 0.3.2 (2022-01-17)
|
8
|
+
|
9
|
+
- Updated SCS to 3.1.1
|
10
|
+
|
11
|
+
## 0.3.1 (2021-10-08)
|
12
|
+
|
13
|
+
- Fixed installation on Linux
|
14
|
+
|
1
15
|
## 0.3.0 (2021-10-05)
|
2
16
|
|
3
17
|
- Updated SCS to 3.0.0
|
data/README.md
CHANGED
@@ -1,28 +1,33 @@
|
|
1
|
-
# SCS
|
1
|
+
# SCS Ruby
|
2
2
|
|
3
3
|
[SCS](https://github.com/cvxgrp/scs) - the splitting conic solver - for Ruby
|
4
4
|
|
5
5
|
:fire: Supports many different [problem types](https://www.cvxpy.org/tutorial/advanced/index.html#choosing-a-solver)
|
6
6
|
|
7
|
-
[![Build Status](https://github.com/ankane/scs/workflows/build/badge.svg?branch=master)](https://github.com/ankane/scs/actions)
|
7
|
+
[![Build Status](https://github.com/ankane/scs-ruby/workflows/build/badge.svg?branch=master)](https://github.com/ankane/scs-ruby/actions)
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
11
11
|
Add this line to your application’s Gemfile:
|
12
12
|
|
13
13
|
```ruby
|
14
|
-
gem
|
14
|
+
gem "scs"
|
15
15
|
```
|
16
16
|
|
17
17
|
If installation fails, you may need to install [dependencies](#dependencies).
|
18
18
|
|
19
19
|
## Getting Started
|
20
20
|
|
21
|
-
Prep the problem
|
21
|
+
Prep the problem, like [this one](https://www.cvxgrp.org/scs/examples/python/basic_qp.html)
|
22
22
|
|
23
23
|
```ruby
|
24
|
-
data = {
|
25
|
-
|
24
|
+
data = {
|
25
|
+
p: SCS::Matrix.from_dense([[3, -1], [-1, 2]]),
|
26
|
+
a: SCS::Matrix.from_dense([[-1, 1], [1, 0], [0, 1]]),
|
27
|
+
b: [-1, 0.3, -0.5],
|
28
|
+
c: [-1, -1]
|
29
|
+
}
|
30
|
+
cone = {z: 1, l: 2}
|
26
31
|
```
|
27
32
|
|
28
33
|
And solve it
|
@@ -32,12 +37,36 @@ solver = SCS::Solver.new
|
|
32
37
|
solver.solve(data, cone)
|
33
38
|
```
|
34
39
|
|
40
|
+
## Data
|
41
|
+
|
42
|
+
Matrices can be a sparse matrix
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
a = SCS::Matrix.new(3, 2)
|
46
|
+
a[0, 0] = 1
|
47
|
+
a[1, 0] = 2
|
48
|
+
# or
|
49
|
+
SCS::Matrix.from_dense([[1, 0], [2, 0], [0, 0]])
|
50
|
+
```
|
51
|
+
|
52
|
+
Arrays can be Ruby arrays
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
[1, 2, 3]
|
56
|
+
```
|
57
|
+
|
58
|
+
Or Numo arrays
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
Numo::NArray.cast([1, 2, 3])
|
62
|
+
```
|
63
|
+
|
35
64
|
## Settings
|
36
65
|
|
37
66
|
Default values shown
|
38
67
|
|
39
68
|
```ruby
|
40
|
-
solver.solve(data, cone,
|
69
|
+
solver.solve(data, cone,
|
41
70
|
normalize: true, # heuristic data rescaling
|
42
71
|
scale: 0.1, # if normalized, rescales by this factor
|
43
72
|
adaptive_scale: true, # heuristically adapt dual scale through the solve
|
@@ -54,7 +83,7 @@ solver.solve(data, cone, {
|
|
54
83
|
acceleration_interval: 10, # iterations to run Anderson acceleration
|
55
84
|
write_data_filename: nil, # filename to write data if set
|
56
85
|
log_csv_filename: nil # write csv logs of various quantities
|
57
|
-
|
86
|
+
)
|
58
87
|
```
|
59
88
|
|
60
89
|
## Direct vs Indirect
|
@@ -81,22 +110,22 @@ On Heroku, use the [heroku-apt-buildpack](https://github.com/heroku/heroku-build
|
|
81
110
|
|
82
111
|
## History
|
83
112
|
|
84
|
-
View the [changelog](https://github.com/ankane/scs/blob/master/CHANGELOG.md)
|
113
|
+
View the [changelog](https://github.com/ankane/scs-ruby/blob/master/CHANGELOG.md)
|
85
114
|
|
86
115
|
## Contributing
|
87
116
|
|
88
117
|
Everyone is encouraged to help improve this project. Here are a few ways you can help:
|
89
118
|
|
90
|
-
- [Report bugs](https://github.com/ankane/scs/issues)
|
91
|
-
- Fix bugs and [submit pull requests](https://github.com/ankane/scs/pulls)
|
119
|
+
- [Report bugs](https://github.com/ankane/scs-ruby/issues)
|
120
|
+
- Fix bugs and [submit pull requests](https://github.com/ankane/scs-ruby/pulls)
|
92
121
|
- Write, clarify, or fix documentation
|
93
122
|
- Suggest or add new features
|
94
123
|
|
95
124
|
To get started with development:
|
96
125
|
|
97
126
|
```sh
|
98
|
-
git clone --recursive https://github.com/ankane/scs.git
|
99
|
-
cd scs
|
127
|
+
git clone --recursive https://github.com/ankane/scs-ruby.git
|
128
|
+
cd scs-ruby
|
100
129
|
bundle install
|
101
130
|
bundle exec rake compile
|
102
131
|
bundle exec rake test
|
data/lib/scs/ffi.rb
CHANGED
@@ -27,13 +27,6 @@ module SCS
|
|
27
27
|
|
28
28
|
dlload File.expand_path("../../vendor/scs/out/#{lib_name}.#{ext}", __dir__)
|
29
29
|
|
30
|
-
extern "size_t scs_sizeof_int(void)"
|
31
|
-
extern "size_t scs_sizeof_float(void)"
|
32
|
-
|
33
|
-
# TODO support other sizes
|
34
|
-
raise Error, "Unsupported int size" if scs_sizeof_int != 4
|
35
|
-
raise Error, "Unsupported float size" if scs_sizeof_float != 8
|
36
|
-
|
37
30
|
typealias "scs_float", "double"
|
38
31
|
typealias "scs_int", "int"
|
39
32
|
|
@@ -71,6 +64,7 @@ module SCS
|
|
71
64
|
m::Info = struct [
|
72
65
|
"scs_int iter",
|
73
66
|
"char status[128]",
|
67
|
+
"char lin_sys_solver[128]",
|
74
68
|
"scs_int status_val",
|
75
69
|
"scs_int scale_updates",
|
76
70
|
"scs_float pobj",
|
data/lib/scs/matrix.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
module SCS
|
2
|
+
class Matrix
|
3
|
+
attr_reader :m, :n
|
4
|
+
|
5
|
+
def initialize(m, n)
|
6
|
+
@m = m
|
7
|
+
@n = n
|
8
|
+
@data = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def []=(row_index, column_index, value)
|
12
|
+
raise IndexError, "row index out of bounds" if row_index < 0 || row_index >= @m
|
13
|
+
raise IndexError, "column index out of bounds" if column_index < 0 || column_index >= @n
|
14
|
+
# dictionary of keys, optimized for converting to CSC
|
15
|
+
# TODO try COO for performance
|
16
|
+
if value == 0
|
17
|
+
(@data[column_index] ||= {}).delete(row_index)
|
18
|
+
else
|
19
|
+
(@data[column_index] ||= {})[row_index] = value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_csc
|
24
|
+
cx = []
|
25
|
+
ci = []
|
26
|
+
cp = []
|
27
|
+
|
28
|
+
# CSC format
|
29
|
+
# https://www.gormanalysis.com/blog/sparse-matrix-storage-formats/
|
30
|
+
cp << 0
|
31
|
+
n.times do |j|
|
32
|
+
(@data[j] || {}).sort_by { |k, v| k }.each do |k, v|
|
33
|
+
cx << v
|
34
|
+
ci << k
|
35
|
+
end
|
36
|
+
# cumulative column values
|
37
|
+
cp << cx.size
|
38
|
+
end
|
39
|
+
|
40
|
+
{
|
41
|
+
start: cp,
|
42
|
+
index: ci,
|
43
|
+
value: cx
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
# private, for tests
|
48
|
+
def nnz
|
49
|
+
@data.sum { |_, v| v.count }
|
50
|
+
end
|
51
|
+
|
52
|
+
def initialize_copy(other)
|
53
|
+
super
|
54
|
+
@data = @data.transform_values(&:dup)
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.from_dense(data)
|
58
|
+
data = data.to_a
|
59
|
+
m = data.size
|
60
|
+
n = m > 0 ? data.first.size : 0
|
61
|
+
|
62
|
+
mtx = Matrix.new(m, n)
|
63
|
+
data.each_with_index do |row, i|
|
64
|
+
raise ArgumentError, "row has different number of columns" if row.size != n
|
65
|
+
row.each_with_index do |v, j|
|
66
|
+
mtx[i, j] = v if v != 0
|
67
|
+
end
|
68
|
+
end
|
69
|
+
mtx
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/scs/solver.rb
CHANGED
@@ -73,42 +73,35 @@ module SCS
|
|
73
73
|
char_ptr[0, idx].map(&:chr).join
|
74
74
|
end
|
75
75
|
|
76
|
-
# TODO add support sparse matrices
|
77
76
|
def csc_matrix(mtx, upper: false)
|
78
|
-
mtx = mtx.
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
# CSC format
|
87
|
-
# https://www.gormanalysis.com/blog/sparse-matrix-storage-formats/
|
88
|
-
cp << 0
|
89
|
-
n.times do |j|
|
90
|
-
mtx.each_with_index do |row, i|
|
91
|
-
if row[j] != 0 && (!upper || i <= j)
|
92
|
-
cx << row[j]
|
93
|
-
ci << i
|
77
|
+
mtx = Matrix.from_dense(mtx) unless mtx.is_a?(Matrix)
|
78
|
+
|
79
|
+
if upper
|
80
|
+
# TODO improve performance
|
81
|
+
mtx = mtx.dup
|
82
|
+
mtx.m.times do |i|
|
83
|
+
mtx.n.times do |j|
|
84
|
+
mtx[i, j] = 0 if i > j
|
94
85
|
end
|
95
86
|
end
|
96
|
-
# cumulative column values
|
97
|
-
cp << cx.size
|
98
87
|
end
|
99
88
|
|
89
|
+
csc = mtx.to_csc
|
90
|
+
|
100
91
|
# construct matrix
|
101
92
|
matrix = ffi::Matrix.malloc
|
102
|
-
matrix.x = float_array(
|
103
|
-
matrix.i = int_array(
|
104
|
-
matrix.p = int_array(
|
105
|
-
matrix.m = m
|
106
|
-
matrix.n = n
|
93
|
+
matrix.x = float_array(csc[:value])
|
94
|
+
matrix.i = int_array(csc[:index])
|
95
|
+
matrix.p = int_array(csc[:start])
|
96
|
+
matrix.m = mtx.m
|
97
|
+
matrix.n = mtx.n
|
107
98
|
matrix
|
108
99
|
end
|
109
100
|
|
110
101
|
def shape(a)
|
111
|
-
if
|
102
|
+
if a.is_a?(Matrix)
|
103
|
+
[a.m, a.n]
|
104
|
+
elsif defined?(::Matrix) && a.is_a?(::Matrix)
|
112
105
|
[a.row_count, a.column_count]
|
113
106
|
elsif defined?(Numo::NArray) && a.is_a?(Numo::NArray)
|
114
107
|
a.shape
|
@@ -126,7 +119,7 @@ module SCS
|
|
126
119
|
|
127
120
|
if data[:p]
|
128
121
|
raise ArgumentError, "Bad p shape" if shape(data[:p]) != [n, n]
|
129
|
-
cdata.p = csc_matrix(data[:p])
|
122
|
+
cdata.p = csc_matrix(data[:p], upper: true)
|
130
123
|
end
|
131
124
|
|
132
125
|
raise ArgumentError, "Bad b size" if data[:b].to_a.size != m
|
data/lib/scs/version.rb
CHANGED
data/lib/scs.rb
CHANGED
data/vendor/scs/CITATION.cff
CHANGED
data/vendor/scs/CMakeLists.txt
CHANGED
@@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.5)
|
|
5
5
|
|
6
6
|
project(scs
|
7
7
|
LANGUAGES C
|
8
|
-
VERSION 2.
|
8
|
+
VERSION 3.2.0)
|
9
9
|
|
10
10
|
# Defines the CMAKE_INSTALL_LIBDIR, CMAKE_INSTALL_BINDIR and many other useful macros.
|
11
11
|
# See https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
|
@@ -88,6 +88,10 @@ if(BUILD_TESTING)
|
|
88
88
|
enable_testing()
|
89
89
|
endif()
|
90
90
|
|
91
|
+
# Add uninstall target
|
92
|
+
# After 'make install' can run 'make uninstall' to remove.
|
93
|
+
include(AddUninstallTarget)
|
94
|
+
|
91
95
|
### Some variables useful for sampling the building process
|
92
96
|
# Note that the GPU profile is not compiled.
|
93
97
|
set(LINSYS linsys)
|
@@ -95,6 +99,46 @@ set(DIRSRC ${LINSYS}/cpu/direct)
|
|
95
99
|
set(INDIRSRC ${LINSYS}/cpu/indirect)
|
96
100
|
set(EXTERNAL ${LINSYS}/external)
|
97
101
|
|
102
|
+
# Options
|
103
|
+
# ----------------------------------------------
|
104
|
+
# Use floats instead of doubles
|
105
|
+
option(SFLOAT "Use single precision floats rather than doubles" OFF)
|
106
|
+
message(STATUS "Single precision floats (32bit) are ${SFLOAT}")
|
107
|
+
|
108
|
+
# Use long integers for indexing
|
109
|
+
option(DLONG "Use long integers (64bit) for indexing" OFF)
|
110
|
+
message(STATUS "Long integers (64bit) are ${DLONG}")
|
111
|
+
|
112
|
+
|
113
|
+
set(COMPILER_OPTS "-DUSE_LAPACK -DCTRLC")
|
114
|
+
|
115
|
+
# Primitive types
|
116
|
+
if(SFLOAT)
|
117
|
+
set(SCS_FLOAT_TYPE "float")
|
118
|
+
set(COMPILER_OPTS "-DSFLOAT ${COMPILER_OPTS}")
|
119
|
+
else()
|
120
|
+
set(SCS_FLOAT_TYPE "double")
|
121
|
+
endif()
|
122
|
+
|
123
|
+
if(DLONG)
|
124
|
+
set(SCS_INT_TYPE "long long")
|
125
|
+
set(COMPILER_OPTS "-DDLONG ${COMPILER_OPTS}")
|
126
|
+
else()
|
127
|
+
set(SCS_INT_TYPE "int")
|
128
|
+
endif()
|
129
|
+
|
130
|
+
message(STATUS "COMPILER_OPTS = ${COMPILER_OPTS}")
|
131
|
+
|
132
|
+
# TODO this is a hack that overwrites the scs_types.h file, we should
|
133
|
+
# find a way to do this that doesn't pollute the master directory.
|
134
|
+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/scs_types.h.in
|
135
|
+
${CMAKE_CURRENT_SOURCE_DIR}/include/scs_types.h
|
136
|
+
NEWLINE_STYLE LF)
|
137
|
+
|
138
|
+
# Public headers
|
139
|
+
set(${PROJECT_NAME}_PUBLIC_HDR
|
140
|
+
include/scs_types.h
|
141
|
+
include/scs.h)
|
98
142
|
|
99
143
|
# Common source files
|
100
144
|
set(${PROJECT_NAME}_SRC
|
@@ -122,6 +166,8 @@ set(${PROJECT_NAME}_HDR
|
|
122
166
|
include/rw.h
|
123
167
|
include/scs.h
|
124
168
|
include/scs_blas.h
|
169
|
+
include/scs_types.h
|
170
|
+
include/scs_work.h
|
125
171
|
include/util.h
|
126
172
|
${LINSYS}/csparse.h
|
127
173
|
${LINSYS}/scs_matrix.h)
|
@@ -162,7 +208,7 @@ target_include_directories(${${PROJECT_NAME}_DIRECT} PUBLIC
|
|
162
208
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
|
163
209
|
|
164
210
|
# Compiled with blas and lapack, can solve LPs, SOCPs, SDPs, ECPs, and PCPs
|
165
|
-
target_compile_definitions(${${PROJECT_NAME}_DIRECT} PRIVATE
|
211
|
+
target_compile_definitions(${${PROJECT_NAME}_DIRECT} PRIVATE ${COMPILER_OPTS})
|
166
212
|
|
167
213
|
# The library depends on math (m) blas and lapack
|
168
214
|
target_link_libraries(${${PROJECT_NAME}_DIRECT} PRIVATE
|
@@ -173,7 +219,7 @@ target_link_libraries(${${PROJECT_NAME}_DIRECT} PRIVATE
|
|
173
219
|
# Set some properties
|
174
220
|
set_target_properties(${${PROJECT_NAME}_DIRECT} PROPERTIES
|
175
221
|
VERSION ${scs_VERSION}
|
176
|
-
PUBLIC_HEADER "${${PROJECT_NAME}
|
222
|
+
PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HDR}")
|
177
223
|
|
178
224
|
add_library(scs::${${PROJECT_NAME}_DIRECT} ALIAS ${${PROJECT_NAME}_DIRECT})
|
179
225
|
|
@@ -209,7 +255,7 @@ target_include_directories(${${PROJECT_NAME}_INDIRECT} PUBLIC
|
|
209
255
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
|
210
256
|
|
211
257
|
# Compiled with blas and lapack, can solve LPs, SOCPs, SDPs, ECPs, and PCPs
|
212
|
-
target_compile_definitions(${${PROJECT_NAME}_INDIRECT} PRIVATE
|
258
|
+
target_compile_definitions(${${PROJECT_NAME}_INDIRECT} PRIVATE ${COMPILER_OPTS} -DINDIRECT)
|
213
259
|
|
214
260
|
# The library depends on math (m) blas and lapack
|
215
261
|
target_link_libraries(${${PROJECT_NAME}_INDIRECT} PUBLIC
|
@@ -220,7 +266,7 @@ target_link_libraries(${${PROJECT_NAME}_INDIRECT} PUBLIC
|
|
220
266
|
# Set some properties
|
221
267
|
set_target_properties(${${PROJECT_NAME}_INDIRECT} PROPERTIES
|
222
268
|
VERSION ${scs_VERSION}
|
223
|
-
PUBLIC_HEADER "${${
|
269
|
+
PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HDR}")
|
224
270
|
|
225
271
|
add_library(scs::${${PROJECT_NAME}_INDIRECT} ALIAS ${${PROJECT_NAME}_INDIRECT})
|
226
272
|
|
@@ -250,20 +296,22 @@ install_basic_package_files(${PROJECT_NAME}
|
|
250
296
|
### Add the tests
|
251
297
|
if(BUILD_TESTING)
|
252
298
|
add_executable(run_tests_direct test/run_tests.c)
|
299
|
+
target_compile_definitions(run_tests_direct PRIVATE ${COMPILER_OPTS})
|
253
300
|
target_link_libraries(run_tests_direct PRIVATE
|
254
301
|
scs::scsdir)
|
255
302
|
target_include_directories(run_tests_direct PRIVATE
|
256
|
-
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>")
|
303
|
+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>" )
|
257
304
|
|
258
305
|
add_test(NAME run_tests_direct
|
259
306
|
COMMAND run_tests_direct
|
260
307
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
261
308
|
|
262
309
|
add_executable(run_tests_indirect test/run_tests.c)
|
310
|
+
target_compile_definitions(run_tests_indirect PRIVATE ${COMPILER_OPTS})
|
263
311
|
target_link_libraries(run_tests_indirect PRIVATE
|
264
312
|
scs::scsindir)
|
265
313
|
target_include_directories(run_tests_indirect PRIVATE
|
266
|
-
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>")
|
314
|
+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>" )
|
267
315
|
|
268
316
|
add_test(NAME run_tests_indirect
|
269
317
|
COMMAND run_tests_indirect
|
data/vendor/scs/Makefile
CHANGED
@@ -39,13 +39,13 @@ $(SCS_INDIR_O): src/scs.c $(INC_FILES)
|
|
39
39
|
%.o : src/%.c
|
40
40
|
$(CC) $(CFLAGS) -c $< -o $@
|
41
41
|
|
42
|
-
src/util.o : src/util.c
|
43
|
-
src/cones.o : src/cones.c
|
44
|
-
src/aa.o : src/aa.c
|
45
|
-
src/rw.o : src/rw.c
|
46
|
-
src/linalg.o: src/linalg.c
|
47
|
-
src/ctrl.o : src/ctrl.c
|
48
|
-
src/scs_version.o: src/scs_version.c
|
42
|
+
src/util.o : src/util.c $(INC_FILES)
|
43
|
+
src/cones.o : src/cones.c $(INC_FILES)
|
44
|
+
src/aa.o : src/aa.c $(INC_FILES)
|
45
|
+
src/rw.o : src/rw.c $(INC_FILES)
|
46
|
+
src/linalg.o: src/linalg.c $(INC_FILES)
|
47
|
+
src/ctrl.o : src/ctrl.c $(INC_FILES)
|
48
|
+
src/scs_version.o: src/scs_version.c $(INC_FILES)
|
49
49
|
|
50
50
|
$(DIRSRC)/private.o: $(DIRSRC)/private.c $(DIRSRC)/private.h
|
51
51
|
$(INDIRSRC)/indirect/private.o: $(INDIRSRC)/private.c $(INDIRSRC)/private.h
|
@@ -115,7 +115,7 @@ $(LINSYS)/gpu/gpu.o: $(LINSYS)/gpu/gpu.c
|
|
115
115
|
# $(CUCC) -c -o $(GPUDIR)/private.o $^ $(CUDAFLAGS)
|
116
116
|
|
117
117
|
$(GPUINDIR)/private.o: $(GPUINDIR)/private.c
|
118
|
-
$(CUCC) -c -o
|
118
|
+
$(CUCC) -c -o $@ $^ $(CUDAFLAGS)
|
119
119
|
|
120
120
|
# $(OUT)/libscsgpudir.$(SHARED): $(SCS_O) $(SCS_OBJECTS) $(GPUDIR)/private.o $(AMD_OBJS) $(LINSYS)/scs_matrix.o $(LINSYS)/gpu/gpu.o
|
121
121
|
# mkdir -p $(OUT)
|
@@ -143,7 +143,7 @@ $(OUT)/demo_socp_gpu_indirect: test/random_socp_prob.c $(OUT)/libscsgpuindir.a
|
|
143
143
|
|
144
144
|
.PHONY: clean purge
|
145
145
|
clean:
|
146
|
-
@rm -rf $(TARGETS) $(SCS_O) $(SCS_INDIR_O) $(SCS_OBJECTS) $(AMD_OBJS) $(LDL_OBJS) $(LINSYS)/*.o $(DIRSRC)/*.o $(INDIRSRC)/*.o $(GPUDIR)/*.o $(GPUINDIR)/*.o
|
146
|
+
@rm -rf $(TARGETS) $(SCS_O) $(SCS_INDIR_O) $(SCS_OBJECTS) $(AMD_OBJS) $(LDL_OBJS) $(LINSYS)/*.o $(DIRSRC)/*.o $(INDIRSRC)/*.o $(GPUDIR)/*.o $(GPUINDIR)/*.o $(LINSYS)/gpu/*.o
|
147
147
|
@rm -rf $(OUT)/*.dSYM
|
148
148
|
@rm -rf matlab/*.mex*
|
149
149
|
@rm -rf .idea
|
data/vendor/scs/README.md
CHANGED
@@ -3,10 +3,13 @@
|
|
3
3
|
</h1>
|
4
4
|
|
5
5
|
[![Build Status](https://github.com/cvxgrp/scs/actions/workflows/build.yml/badge.svg)](https://github.com/cvxgrp/scs/actions/workflows/build.yml)
|
6
|
+
[![Documentation](https://img.shields.io/badge/docs-online-brightgreen?logo=read-the-docs&style=flat)](https://www.cvxgrp.org/scs/)
|
6
7
|
[![Coverage Status](https://coveralls.io/repos/github/cvxgrp/scs/badge.svg?branch=master)](https://coveralls.io/github/cvxgrp/scs?branch=master)
|
7
8
|
|
8
9
|
|
9
10
|
SCS (`splitting conic solver`) is a numerical optimization package for solving
|
10
|
-
large-scale convex cone problems. The current version is `3.
|
11
|
+
large-scale convex cone problems. The current version is `3.2.0`.
|
11
12
|
|
12
13
|
The full documentation is available [here](https://www.cvxgrp.org/scs/).
|
14
|
+
|
15
|
+
If you wish to cite SCS please cite the papers listed [here](https://www.cvxgrp.org/scs/citing).
|
data/vendor/scs/include/aa.h
CHANGED
@@ -23,7 +23,7 @@ typedef struct ACCEL_WORK AaWork;
|
|
23
23
|
* @param type1 if True use type 1 AA, otherwise use type 2
|
24
24
|
* @param regularization type-I and type-II different, for type-I: 1e-8 works
|
25
25
|
* well, type-II: more stable can use 1e-12 often
|
26
|
-
* @param relaxation float
|
26
|
+
* @param relaxation float in [0,2], mixing parameter (1.0 is vanilla)
|
27
27
|
* @param safeguard_factor factor that controls safeguarding checks
|
28
28
|
* larger is more aggressive but less stable
|
29
29
|
* @param max_weight_norm float, maximum norm of AA weights
|
data/vendor/scs/include/cones.h
CHANGED
@@ -8,6 +8,8 @@ extern "C" {
|
|
8
8
|
#include "glbopts.h"
|
9
9
|
#include "scs.h"
|
10
10
|
#include "scs_blas.h"
|
11
|
+
#include "scs_work.h"
|
12
|
+
#include <string.h>
|
11
13
|
|
12
14
|
/* private data to help cone projection step */
|
13
15
|
struct SCS_CONE_WORK {
|
@@ -16,10 +18,14 @@ struct SCS_CONE_WORK {
|
|
16
18
|
* cone boundaries, boundaries[0] is starting index for cones of size larger
|
17
19
|
* than 1
|
18
20
|
*/
|
19
|
-
|
20
|
-
scs_int
|
21
|
+
ScsCone *k; /* original cone information */
|
22
|
+
scs_int *cone_boundaries;
|
23
|
+
scs_int cone_boundaries_len;
|
24
|
+
scs_int scaled_cones; /* boolean, whether the cones have been scaled */
|
25
|
+
scs_float *s; /* used for Moreau decomposition in projection */
|
26
|
+
scs_int m; /* total length of cone */
|
21
27
|
/* box cone quantities */
|
22
|
-
scs_float
|
28
|
+
scs_float box_t_warm_start;
|
23
29
|
#ifdef USE_LAPACK
|
24
30
|
/* workspace for eigenvector decompositions: */
|
25
31
|
scs_float *Xs, *Z, *e, *work;
|
@@ -27,18 +33,17 @@ struct SCS_CONE_WORK {
|
|
27
33
|
#endif
|
28
34
|
};
|
29
35
|
|
30
|
-
|
31
|
-
|
36
|
+
void SCS(free_cone)(ScsCone *k);
|
37
|
+
void SCS(deep_copy_cone)(ScsCone *dest, const ScsCone *src);
|
38
|
+
ScsConeWork *SCS(init_cone)(ScsCone *k, scs_int m);
|
32
39
|
char *SCS(get_cone_header)(const ScsCone *k);
|
33
40
|
scs_int SCS(validate_cones)(const ScsData *d, const ScsCone *k);
|
34
|
-
scs_int SCS(
|
35
|
-
|
36
|
-
scs_int SCS(proj_dual_cone)(scs_float *x, const ScsCone *k, ScsConeWork *c,
|
37
|
-
scs_int normalize);
|
41
|
+
scs_int SCS(proj_dual_cone)(scs_float *x, ScsConeWork *c, ScsScaling *scal,
|
42
|
+
scs_float *r_y);
|
38
43
|
void SCS(finish_cone)(ScsConeWork *c);
|
39
|
-
|
40
|
-
void SCS(
|
41
|
-
|
44
|
+
void SCS(set_r_y)(const ScsConeWork *c, scs_float scale, scs_float *r_y);
|
45
|
+
void SCS(enforce_cone_boundaries)(const ScsConeWork *c, scs_float *vec,
|
46
|
+
scs_float (*f)(const scs_float *, scs_int));
|
42
47
|
|
43
48
|
#ifdef __cplusplus
|
44
49
|
}
|