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

simple_qp

Allows formulating Quadratic Programming problems in a symbolic way

4 releases

new 0.2.2 Oct 4, 2024
0.2.1 Jul 19, 2024
0.2.0 Jul 19, 2024
0.1.0 Jul 7, 2024

#841 in Algorithms

Download history 106/week @ 2024-07-05 9/week @ 2024-07-12 203/week @ 2024-07-19 24/week @ 2024-07-26 31/week @ 2024-09-13 15/week @ 2024-09-20 39/week @ 2024-09-27

85 downloads per month

MIT license

42KB
1K SLoC

simple_qp

Rust

simple_qp allows formulating Quadratic Programming (QP) problems in a symbolic way. Define your QP without unreadable matrix initializations.

Available Solver Backends

At the moment, these are the available solver backends:

  • OSQP
  • CLARABEL
  • COIN CBC: restricted to Linear Programming problems

Example Code

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);
}

Acknowledgment

Thanks FlorianNAdam for the constraint! macro.

Dependencies

~2.3–3MB
~65K SLoC