pub struct HighsSolver { /* private fields */ }Expand description
HiGHS LP solver instance implementing SolverInterface.
Owns an opaque HiGHS handle and pre-allocated buffers for solution
extraction, scratch i32 index conversion, and statistics accumulation.
Construct with HighsSolver::new. The handle is destroyed automatically
when the instance is dropped.
§Example
use cobre_solver::{HighsSolver, SolverInterface};
let solver = HighsSolver::new().expect("HiGHS initialisation failed");
assert_eq!(solver.name(), "HiGHS");Implementations§
Source§impl HighsSolver
impl HighsSolver
Sourcepub fn new() -> Result<Self, SolverError>
pub fn new() -> Result<Self, SolverError>
Creates a new HiGHS solver instance with performance-tuned defaults.
Calls cobre_highs_create() to allocate the HiGHS handle, then applies
the thirteen default options defined in HiGHS Implementation SS4.1:
| Option | Value | Type |
|---|---|---|
solver | "simplex" | string |
simplex_strategy | 1 | int |
simplex_scale_strategy | 0 | int |
presolve | "on" | string |
parallel | "off" | string |
output_flag | 0 | bool |
primal_feasibility_tolerance | 1e-9 | double |
dual_feasibility_tolerance | 1e-9 | double |
simplex_dual_edge_weight_strategy | 1 | int |
dual_simplex_cost_perturbation_multiplier | 0.0 | double |
simplex_initial_condition_check | 0 | bool |
simplex_price_strategy | 1 | int |
rebuild_refactor_solution_error_tolerance | 1e-6 | double |
§Errors
Returns Err(SolverError::InternalError { .. }) if:
cobre_highs_create()returns a null pointer.- Any configuration call returns
HIGHS_STATUS_ERROR.
In both failure cases the HiGHS handle is destroyed before returning to
prevent a resource leak.
Trait Implementations§
Source§impl Drop for HighsSolver
impl Drop for HighsSolver
impl Send for HighsSolver
Source§impl SolverInterface for HighsSolver
impl SolverInterface for HighsSolver
Source§fn solve(
&mut self,
basis: Option<&Basis>,
) -> Result<SolutionView<'_>, SolverError>
fn solve( &mut self, basis: Option<&Basis>, ) -> Result<SolutionView<'_>, SolverError>
§Preconditions
When basis is Some(b), the caller should size b.row_status to at
least self.num_rows (the current LP row count). A basis with fewer
row entries than the LP (e.g. one captured before add_rows grew the LP)
cannot be padded soundly — a BASIC pad is wrong for inequality-row slacks
— so it is rejected with Err(SolverError::BasisRowCountMismatch) and
basis_consistency_failures is incremented; the caller should fall back
to a cold solve. A basis with more row entries is tolerated: the
trailing entries beyond self.num_rows are ignored. The column count
must match exactly (hard assert!).
§Errors
Returns Err(SolverError::BasisRowCountMismatch { lp_rows, basis_rows })
when the offered basis has fewer row entries than the LP has rows, and
Err(SolverError::BasisInconsistent { .. }) when HiGHS rejects the
offered basis via isBasisConsistent.
Source§type Profile = HighsProfile
type Profile = HighsProfile
Source§fn apply_profile(&mut self, profile: &HighsProfile)
fn apply_profile(&mut self, profile: &HighsProfile)
Source§fn name(&self) -> &'static str
fn name(&self) -> &'static str
"HiGHS"). Read moreSource§fn solver_name_version(&self) -> String
fn solver_name_version(&self) -> String
Source§fn load_model(&mut self, template: &StageTemplate)
fn load_model(&mut self, template: &StageTemplate)
Source§fn add_rows(&mut self, rows: &RowBatch)
fn add_rows(&mut self, rows: &RowBatch)
Source§fn set_row_bounds(&mut self, indices: &[usize], lower: &[f64], upper: &[f64])
fn set_row_bounds(&mut self, indices: &[usize], lower: &[f64], upper: &[f64])
Source§fn set_col_bounds(&mut self, indices: &[usize], lower: &[f64], upper: &[f64])
fn set_col_bounds(&mut self, indices: &[usize], lower: &[f64], upper: &[f64])
Source§fn statistics(&self) -> SolverStatistics
fn statistics(&self) -> SolverStatistics
Source§fn statistics_into(&self, out: &mut SolverStatistics)
fn statistics_into(&self, out: &mut SolverStatistics)
retry_level_histogram allocation. Read moreSource§fn record_reconstruction_stats(&mut self)
fn record_reconstruction_stats(&mut self)
reconstruct_basis applied a stored basis via slot reconciliation.
Default implementation is a no-op; HighsSolver overrides to increment
SolverStatistics::basis_reconstructions by 1.
A non-zero count indicates basis reconstruction is active on this solver instance.