14个版本
使用旧的Rust 2015
0.6.2 | 2021年1月7日 |
---|---|
0.6.1 | 2020年9月28日 |
0.6.0 | 2019年9月5日 |
0.5.0 | 2018年12月11日 |
0.0.1-pre.2 | 2017年12月13日 |
#724 在 算法
397 每月下载量
在 6 个包 (3 个直接) 中使用
1MB
9K SLoC
osqp.rs
Rust对OSQP的封装:算子分割二次规划求解器。
OSQP (算子分割二次规划) 求解器是一个数值优化软件包,用于解决以下形式的优化问题
minimize 0.5 x' P x + q' x
subject to l <= A x <= u
其中 x in R^n
是优化变量。
目标函数由正半定矩阵 P in S^n_+
和向量 q in R^n
定义。
线性约束由矩阵 A in R^{m x n}
和向量 l in R^m U {-inf}^m
,u in R^m U {+inf}^m
定义。
lib.rs
:
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>OSQP (算子分割二次规划) 求解器是一个用于解决以下形式的凸二次规划问题的数值优化软件包
\[\begin{split}\begin{array}{ll} \mbox{minimize} & \frac{1}{2} x^T P x + q^T x \\ \mbox{subject to} & l \leq A x \leq u \end{array}\end{split}\]
其中 \(x\) 是优化变量,\(P \in \mathbf{S}^{n}_{+}\) 是一个正半定矩阵。
有关求解器的更多信息请访问 osqp.org。
示例
考虑以下QP
\[\begin{split}\begin{array}{ll} \mbox{minimize} & \frac{1}{2} x^T \begin{bmatrix}4 & 1\\ 1 & 2 \end{bmatrix} x + \begin{bmatrix}1 \\ 1\end{bmatrix}^T x \\ \mbox{subject to} & \begin{bmatrix}1 \\ 0 \\ 0\end{bmatrix} \leq \begin{bmatrix} 1 & 1\\ 1 & 0\\ 0 & 1\end{bmatrix} x \leq \begin{bmatrix}1 \\ 0.7 \\ 0.7\end{bmatrix} \end{array}\end{split}\]
use osqp::{CscMatrix, Problem, Settings};
// Define problem data
let P = &[[4.0, 1.0],
[1.0, 2.0]];
let q = &[1.0, 1.0];
let A = &[[1.0, 1.0],
[1.0, 0.0],
[0.0, 1.0]];
let l = &[1.0, 0.0, 0.0];
let u = &[1.0, 0.7, 0.7];
// Extract the upper triangular elements of `P`
let P = CscMatrix::from(P).into_upper_tri();
// Disable verbose output
let settings = Settings::default()
.verbose(false);
// Create an OSQP problem
let mut prob = Problem::new(P, q, A, l, u, &settings).expect("failed to setup problem");
// Solve problem
let result = prob.solve();
// Print the solution
println!("{:?}", result.x().expect("failed to solve problem"));
#