oximo-highs
HiGHS LP/MILP backend for oximo.
Wraps the highs crate (HiGHS bundled, no separate install required). Supports LP, MILP, and convex continuous QP model kinds.
Usage
Most users should depend on the umbrella oximo crate with the highs feature (enabled by default):
[]
= "0.1"
To use this crate directly:
[]
= "0.1"
= "0.1"
= "0.1"
Quick example
use *;
use ;
use ;
let m = new;
let x = m.var.lb.build;
let y = m.var.lb.ub.build;
m.constraint;
m.constraint;
m.maximize;
let result = Highs.solve.unwrap;
assert_eq!;
println!; // 34.0
println!; // 6.0
println!; // 4.0
Quadratic programs (QP)
A quadratic objective (e.g. x.powi(2), x * y) with linear constraints is
detected as QP and solved by uploading the Hessian Q via
Highs_passHessian. oximo derives Q from the objective with
oximo_expr::extract_quadratic; HiGHS then minimizes c'x + 0.5·x'Qx.
use *;
use ;
use ;
let m = new;
let x = m.var.lb.ub.build;
let y = m.var.lb.ub.build;
m.constraint;
m.minimize; // min x^2 + y^2
let result = Highs.solve.unwrap;
assert_eq!; // x = y = 0.5, obj = 0.5
Convexity. HiGHS supports only convex QPs. For minimization,
Qmust be positive semidefinite (PSD), and for maximization,Qmust be negative semidefinite (NSD). HiGHS does not check this condition, so supplying an indefinite or incorrectly signed Hessian may lead to incorrect or non-optimal solutions.
HiGHS does not support MIQP (integer + quadratic, returned as
UnsupportedKind) or quadratic constraints (returned as Nonlinear).
Options
HighsOptions is a typed builder. All methods return Self for chaining.
| Method | Type | HiGHS option | Default |
|---|---|---|---|
.time_limit(Duration) |
universal | time_limit |
none |
.threads(usize) |
universal | threads |
none |
.verbose(bool) |
universal | output_flag, log_to_console |
none |
.mip_gap(f64) |
HiGHS-only | mip_rel_gap |
none |
.presolve(HighsPresolve) |
HiGHS-only | presolve |
none |
.method(HighsMethod) |
HiGHS-only | solver |
none |
.parallel(bool) |
HiGHS-only | parallel |
none |
HighsMethod variants: Choose (let HiGHS decide), Simplex, Ipm (interior-point), PdLp (first-order).
HighsPresolve variants: Off, On, Auto ("choose").
use Duration;
use ;
use UniversalOptionsExt;
let opts = default
.time_limit
.threads
.mip_gap
.presolve
.method
.parallel;
Result
SolverResult fields populated on Optimal or Feasible:
objective- objective value (adjusted for any constant term)primal- variable values, keyed byVarId; access viaresult.value_of(var)dual- constraint duals, keyed byConstraintIdreduced_costs- variable reduced costs, keyed byVarIdsolve_time- wall time measured around the HiGHS solve call
License
MIT OR Apache-2.0