#优化 #线性规划 #线性求解器 #约束

撕裂

线性规划纯 Rust 内点求解器

1 个不稳定版本

0.1.0 2023 年 10 月 29 日

#1824算法

GPL-3.0 或更高版本

54KB
1K SLoC

适用于具有等式和不等式约束的线性规划的纯 Rust 内点求解器。

该算法主要基于 MOSEK 求解器(开放访问链接)及其在 SciPy 中的实现。

线性规划

线性规划是一个数学优化问题,定义为(使用 ' 作为点积)

   min_x c ' x
   st A_eq ' x == b_eq
      A_ub ' x <= b_ub
             x >= 0

示例

use ripped::prelude::*;
use approx::assert_abs_diff_eq;
use ndarray::array;

let A_ub = array![[-3f64, 1.], [1., 2.]];
let b_ub = array![6., 4.];
let A_eq = array![[1., 1.]];
let b_eq = array![1.];
let c = array![-1., 4.];

let res = Problem::target(&c)
    .ub(&A_ub, &b_ub)
    .eq(&A_eq, &b_eq)
    .build()
    .unwrap();

let solver = InteriorPoint::default();

let solution = solver.solve(&problem);

assert_abs_diff_eq!(solution.x, array![1., 0.], epsilon = 1e-6);

依赖关系

~2–18MB
~242K SLoC