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: AlgorithmChoiceTop-level algorithm dispatch. Default InteriorPoint ⇒
build_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: LinearSystemScalingChoiceSymmetric 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: boolLazy-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: MuOracleKindSelector 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: i32History length for the limited-memory quasi-Newton approximation
(limited_memory_max_history). Defaults to upstream’s 6.
limited_memory_init_val_max: Numberlimited_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: boolmehrotra_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: boolfast_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: Numberkappa_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: Numberkappa_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: Numbertiny_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: Numbertiny_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: Numberdiverging_iterates_tol — if max_i |x_i| exceeds this the solve
aborts as diverging. Default 1e20.
dual_diverging_streak: Indexdual_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: Indexresto_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: Numberresto_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: Numberkkt_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: SqpOptionsSQP-specific options (consulted only when
algorithm = ActiveSetSqp).
sqp_qp: QpOptionsQP-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
impl AlgorithmBuilder
pub fn new() -> Self
Sourcepub fn set_kkt_schur(&mut self, schur_indices: Vec<usize>, cfg: FeralConfig)
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.
Sourcepub fn build(&self) -> AlgorithmBundle
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.
Sourcepub fn build_with_backend(
&self,
factory: LinearBackendFactory,
) -> AlgorithmBundle
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.
Sourcepub fn build_sqp_with_backend(
&self,
factory: LinearBackendFactory,
) -> Option<SqpAlgorithm>
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
impl Clone for AlgorithmBuilder
Source§fn clone(&self) -> AlgorithmBuilder
fn clone(&self) -> AlgorithmBuilder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AlgorithmBuilder
impl Debug for AlgorithmBuilder
Auto Trait Implementations§
impl Freeze for AlgorithmBuilder
impl RefUnwindSafe for AlgorithmBuilder
impl Send for AlgorithmBuilder
impl Sync for AlgorithmBuilder
impl Unpin for AlgorithmBuilder
impl UnsafeUnpin for AlgorithmBuilder
impl UnwindSafe for AlgorithmBuilder
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, U> Imply<T> for U
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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> ⓘ
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> ⓘ
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