Skip to main content

problemreductions/solvers/
mod.rs

1//! Solvers for computational problems.
2
3mod brute_force;
4pub(crate) mod customized;
5pub mod decision_search;
6mod pipelines;
7mod registry;
8mod resolver;
9
10pub mod ilp;
11
12#[doc(hidden)]
13pub use brute_force::BruteForceRegistration;
14pub use brute_force::{BruteForce, BruteForceProblem};
15pub use registry::{
16    brute_force_dimensions, solver_capabilities, CustomizedSolverCapability, ExactProblemKey,
17    IlpSolverCapability, RegistryBuildError, SolverCapabilities,
18};
19pub use resolver::{solve, SolveOutcome, SolveResult, SolverExecution, SolverRequest};
20
21pub use ilp::{ILPSolveError, ILPSolver};
22
23/// Failure while solving a valid problem instance.
24#[derive(Debug, thiserror::Error)]
25pub enum SolveError {
26    #[error("configuration evaluation failed: {0}")]
27    Evaluation(#[from] crate::traits::EvaluationError),
28    #[error("aggregate combination failed: {0}")]
29    Aggregation(#[from] crate::types::AggregationError),
30    #[error("no reference-solver registration for {0}")]
31    MissingRegistration(String),
32    #[error("invalid reference-solver registration: {0}")]
33    RegistrationTypeMismatch(String),
34    #[error("brute-force search space cardinality exceeds usize for dimensions {0:?}")]
35    SearchSpaceOverflow(Vec<usize>),
36    #[error("integer overflow while {0}")]
37    IntegerOverflow(String),
38    #[error("inexact integer-to-float conversion: {0}")]
39    InexactFloatConversion(#[from] crate::types::ExactI64ToF64Error),
40    #[error("non-finite floating-point result while {0}")]
41    NonFiniteResult(String),
42    #[error("solver capability registry is invalid: {0}")]
43    InvalidRegistry(&'static RegistryBuildError),
44    #[error("No ILP pipeline is registered for {0}")]
45    MissingIlpCapability(String),
46    #[error("No customized solver is registered for {0}")]
47    MissingCustomizedCapability(String),
48    #[error("ILP solver failed for {problem}: {source}")]
49    IlpSolve {
50        problem: String,
51        #[source]
52        source: ILPSolveError,
53    },
54}