pub enum SolveOutcome {
Optimal {
x: Vec<f64>,
y: Vec<f64>,
z: Vec<f64>,
objective: f64,
cert: OptimalCertificate,
},
LocalOptimal {
x: Vec<f64>,
y: Vec<f64>,
z: Vec<f64>,
objective: f64,
kkt_cert: OptimalCertificate,
},
Infeasible {
cert: FarkasCertificate,
},
Unbounded {
cert: UnboundedRayCertificate,
},
Incomplete {
incumbent: Option<Vec<f64>>,
reason: IncompleteReason,
},
}Expand description
Typed solver outcome carrying certificates.
Phase 1 adds the types; existing solver entry points are not yet wired here (connection happens in Phase 2+). The enum is defined now so that downstream code can import and pattern-match against it.
Variants§
Optimal
Globally optimal (PSD Q or LP); KKT verified.
LocalOptimal
KKT-point for a non-convex QP (inertia-corrected IPM converged).
Infeasible
Primal infeasible; Farkas certificate attached.
Fields
§
cert: FarkasCertificateUnbounded
Primal unbounded; ray certificate attached.
Fields
§
cert: UnboundedRayCertificateIncomplete
Solver stopped before proof completion.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for SolveOutcome
impl RefUnwindSafe for SolveOutcome
impl Send for SolveOutcome
impl Sync for SolveOutcome
impl Unpin for SolveOutcome
impl UnsafeUnpin for SolveOutcome
impl UnwindSafe for SolveOutcome
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more