#quadratic #problem #programming #solver #matrix #linear-programming #qp

simple_qp

允许以符号方式表述二次规划问题

3个不稳定版本

0.2.1 2024年7月19日
0.2.0 2024年7月19日
0.1.0 2024年7月7日

#1423算法

Download history 87/week @ 2024-07-02 28/week @ 2024-07-09 185/week @ 2024-07-16 42/week @ 2024-07-23

每月275次下载

MIT许可证

41KB
1K SLoC

simple_qp

Rust

simple_qp 允许以符号方式表述 二次规划 (QP) 问题。定义您的QP而无需使用难以阅读的矩阵初始化。

可用的求解器后端

目前,这些是可用的求解器后端

  • OSQP
  • CLARABEL
  • COIN CBC:仅限于线性规划问题

示例代码

use simple_qp::constraint;
use simple_qp::problem_variables::ProblemVariables;
use simple_qp::solver::osqp_solver::OSQPSolver;
use simple_qp::solver::Solver;

fn main() {
    let mut problem = ProblemVariables::default();
    let x = problem.add_variable(Some(85.), None);
    let y = problem.add_variable(Some(4.0), None);

    let objective = (x - 42).square() + (y - 73).square() + (x - y).square();

    let constraints = vec![
        constraint!(50 <= 1.5 * (x / 3 + 2 * y) <= 100),
        constraint!(x - y == 75 + 2 * y),
    ];

    let solver = OSQPSolver::default();
    let res = solver
        .solve(problem, objective, constraints)
        .expect("Solver error");

    let x_solution = res.value(x);
    let y_solution = res.value(y);

    println!("x = {}, y = {}", x_solution, y_solution);
}

致谢

感谢 FlorianNAdam 提供的 constraint! 宏。

依赖关系

~4.5MB
~78K SLoC