Skip to main content

AlgorithmBuilder

Struct AlgorithmBuilder 

Source
pub struct AlgorithmBuilder {
Show 36 fields pub algorithm: AlgorithmChoice, pub linear_solver: LinearSolverChoice, pub linear_system_scaling: LinearSystemScalingChoice, pub linear_scaling_on_demand: bool, pub mu_strategy: MuStrategyChoice, pub mu_oracle: MuOracleKind, pub hessian_approximation: HessianApproxChoice, pub limited_memory_update_type: UpdateType, pub limited_memory_max_history: i32, pub limited_memory_init_val_max: Number, pub limited_memory_init_val_min: Number, pub line_search_method: LineSearchChoice, pub warm_start_init_point: bool, pub mehrotra_algorithm: bool, pub fast_step_computation: bool, pub kappa_sigma: Number, pub kappa_d: Number, pub tiny_step_tol: Number, pub tiny_step_y_tol: Number, pub diverging_iterates_tol: Number, pub dual_diverging_streak: Index, pub resto_decline_deferrals: Index, pub resto_decline_progress_ratio: Number, pub kkt_fidelity_tol: Number, pub conv_check: ConvCheckOptions, pub mu: MuOptions, pub line_search: LineSearchOptions, pub refinement: RefinementOptions, pub perturbation: PerturbationOptions, pub resto: RestoOptions, pub output: OutputOptions, pub warm: WarmStartOptions, pub sqp: SqpOptions, pub sqp_qp: QpOptions, pub init: InitOptions, pub kkt_schur: Option<(Vec<usize>, FeralConfig)>,
}

Fields§

§algorithm: AlgorithmChoice

Top-level algorithm dispatch. Default InteriorPointbuild_with_backend returns the existing AlgorithmBundle (consumed by IpoptAlgorithm). ActiveSetSqp ⇒ caller must use build_sqp_with_backend to assemble the Phase 5b SqpAlgorithm. The two builder methods sit side by side because the assembled algorithm shape differs (IPM bundle vs SQP struct).

§linear_solver: LinearSolverChoice§linear_system_scaling: LinearSystemScalingChoice

Symmetric scaling method for the augmented KKT system. Wired into TSymLinearSolver by Self::build_with_backend. Mirrors upstream linear_system_scaling (IpAlgBuilder.cpp:538-560).

§linear_scaling_on_demand: bool

Lazy-vs-eager scaling toggle (linear_scaling_on_demand, IpTSymLinearSolver.cpp:50-58). Only consulted when linear_system_scaling != None. Upstream default is true (compute scaling only on the first solve that fails / shows poor conditioning); pounce mirrors that. Set to false to scale every factorization.

§mu_strategy: MuStrategyChoice§mu_oracle: MuOracleKind

Selector forwarded to AdaptiveMuUpdate when mu_strategy = Adaptive. Ignored for Monotone. Defaults to QualityFunction per upstream’s RegisterOptions default.

§hessian_approximation: HessianApproxChoice§limited_memory_update_type: UpdateType§limited_memory_max_history: i32

History length for the limited-memory quasi-Newton approximation (limited_memory_max_history). Defaults to upstream’s 6.

§limited_memory_init_val_max: Number

limited_memory_init_val_max / _min — the clamp on the initial Hessian scalar σ before the rank-2 updates. Upstream defaults 1e8 / 1e-8, which LimMemQuasiNewtonUpdater has carried as hard-coded fields and consumed in initial_hessian_scalar all along; only the read sites were missing (gh#483, #191 round 2).

§limited_memory_init_val_min: Number§line_search_method: LineSearchChoice§warm_start_init_point: bool§mehrotra_algorithm: bool

mehrotra_algorithm — when true, PdSearchDirCalc folds the Mehrotra second-order complementarity term into the search-direction RHS. Mirrors upstream’s IpAlgBuilder.cpp:Mehrotra flag. Requires mu_strategy = Adaptive so that an affine step is computed each iteration; Self::build_with_backend does not enforce this — the option-parser in application.rs is responsible for the cascading defaults (mu_oracle = probing etc.).

§fast_step_computation: bool

fast_step_computation — when true, PdSearchDirCalc accepts the search direction without the residual check and allows an inexact linear solve. Mirrors upstream’s flag of the same name, default no. The field existed and was consumed from the day the search-direction calculator landed, hard-coded to false; only the option’s read site was missing, so setting it did nothing (gh#483 follow-up, #191 round 2).

§kappa_sigma: Number

kappa_sigma — factor bounding how far the bound multipliers may deviate from their primal estimates. The clamp (kappa_sigma_clamp) runs after every accepted step; < 1 disables the correction. Mirrors IpIpoptAlg.cpp (Eqn. (16)), default 1e10. Baked onto crate::ipopt_alg::IpoptAlgorithm by the solve path.

§kappa_d: Number

kappa_d — weight of the linear damping term added to the barrier objective/gradient (and dual-infeasibility) to handle one-sided bounds. Mirrors IpIpoptCalculatedQuantities.cpp, default 1e-5. Baked onto crate::ipopt_cq::IpoptCalculatedQuantities by the solve path.

§tiny_step_tol: Number

tiny_step_tol — relative primal step size below which the full step is accepted without line search; repeated tiny steps terminate the solve. Mirrors IpBacktrackingLineSearch.cpp, default 10·EPSILON. Baked onto crate::ipopt_alg::IpoptAlgorithm by the solve path.

§tiny_step_y_tol: Number

tiny_step_y_tol — dual-step threshold; when both primal and dual steps are tiny in consecutive iterations the algorithm stops at the best attainable accuracy. Default 1e-2.

§diverging_iterates_tol: Number

diverging_iterates_tol — if max_i |x_i| exceeds this the solve aborts as diverging. Default 1e20.

§dual_diverging_streak: Index

dual_diverging_streak (pounce#246) — consecutive growing-dual- infeasibility iterations before the dual-divergence guard routes to restoration. Default 0 (off).

It defaulted to 15 when introduced, on the strength of a reported emfl050 bad-warm-start grind. That justification did not survive being reproduced: the measurement was caller-side JAX compilation, and the build predating the guard solves both emfl050 instances to the same optimum in the same time (pounce#246 / pounce#250). What remained was a knife-edge, non-monotone effect on four of 1284 MINLPLib models — so it is opt-in rather than imposed. See upstream_options.rs for the full account.

§resto_decline_deferrals: Index

resto_decline_deferrals (gh #534) — how many times the acceptable-point restoration decline may be deferred on a solve whose NLP error is still contracting. Default 1; 0 restores the pre-#534 behaviour (decline immediately, always). See upstream_options.rs.

§resto_decline_progress_ratio: Number

resto_decline_progress_ratio (gh #534) — required per-iteration contraction of the NLP error before a decline is deferred. Default 0.5; at or above 1 the progress requirement is dropped entirely.

§kkt_fidelity_tol: Number

kkt_fidelity_tol (pounce#173). Read by the algorithm as well as by the post-solve gate, because the #200 fallback’s tiebreak has to rank the two candidate points by the status each will be reported under. Default 0.0 (gate disabled).

§conv_check: ConvCheckOptions§mu: MuOptions§line_search: LineSearchOptions§refinement: RefinementOptions§perturbation: PerturbationOptions§resto: RestoOptions§output: OutputOptions§warm: WarmStartOptions§sqp: SqpOptions

SQP-specific options (consulted only when algorithm = ActiveSetSqp).

§sqp_qp: QpOptions

QP-subproblem-solver options for the active-set SQP path (pounce_qp::QpOptions), threaded into the SqpAlgorithm via with_qp_options. Consulted only when algorithm = ActiveSetSqp. Populated from the sqp_qp_* CLI options by application::apply_qp_subproblem_options.

§init: InitOptions§kkt_schur: Option<(Vec<usize>, FeralConfig)>

Optional block-triangular / Schur KKT partition (pounce#180 item 2): (schur_indices, feral_cfg). When Some and the IPM path is selected with the feral linear solver and an exact Hessian, build_with_backend wraps the standard aug-system solver in a crate::kkt::SchurAugSystemSolver over the given KKT-space indices. The Schur solver falls back to the standard solver transparently when the partition is unsuitable. Set via Self::set_kkt_schur.

Implementations§

Source§

impl AlgorithmBuilder

Source

pub fn new() -> Self

Source

pub fn set_kkt_schur(&mut self, schur_indices: Vec<usize>, cfg: FeralConfig)

Install a Schur KKT partition (pounce#180 item 2). schur_indices are KKT-space indices (0..dim, the x,s,c,d block order the aug-system solver assembles); cfg configures the per-block feral solvers. Only honored on the IPM + feral + exact-Hessian path by Self::build_with_backend; ignored otherwise.

Source

pub fn build(&self) -> AlgorithmBundle

Assemble the strategy bundle without a search-direction calculator. Used by structural unit tests that don’t want to pull in a linear-solver backend.

Source

pub fn build_with_backend( &self, factory: LinearBackendFactory, ) -> AlgorithmBundle

Same as Self::build but also constructs the SymLinearSolver → AugSystemSolver → PdFullSpaceSolver → PdSearchDirCalc chain via the supplied factory.

Source

pub fn build_sqp_with_backend( &self, factory: LinearBackendFactory, ) -> Option<SqpAlgorithm>

Phase 5b assembly path for the SQP algorithm. Consults self.algorithm: when ActiveSetSqp, constructs an SqpAlgorithm using the supplied backend factory for the QP subproblem solver; otherwise returns None so the caller can fall back to the IPM build_with_backend.

Sister to build_with_backend: the SQP algorithm doesn’t share AlgorithmBundle’s shape (no mu_update / no IPM line search), so the two paths return different types.

Trait Implementations§

Source§

impl Clone for AlgorithmBuilder

Source§

fn clone(&self) -> AlgorithmBuilder

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AlgorithmBuilder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for AlgorithmBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more