pub struct LineSearchOptions {Show 32 fields
pub alpha_red_factor: Number,
pub alpha_red_factor_min: Option<Number>,
pub watchdog_shortened_iter_trigger: Index,
pub watchdog_trial_iter_max: Index,
pub soft_resto_pderror_reduction_factor: Number,
pub max_soft_resto_iters: Index,
pub accept_every_trial_step: bool,
pub alpha_for_y: AlphaForY,
pub accept_after_max_steps: Index,
pub eta_phi: Number,
pub delta: Number,
pub theta_min_fact: Number,
pub theta_max_fact: Number,
pub theta_max_row_scale_kappa: Number,
pub theta_max_adaptive_trigger: u32,
pub theta_max_adaptive_factor: Number,
pub theta_max_adaptive_max_raises: u32,
pub gamma_phi: Number,
pub gamma_theta: Number,
pub s_phi: Number,
pub s_theta: Number,
pub alpha_min_frac: Number,
pub obj_max_inc: Number,
pub max_filter_resets: Index,
pub filter_reset_trigger: Index,
pub nu_init: Number,
pub nu_inc: Number,
pub rho: Number,
pub eta_penalty: Number,
pub max_soc: Index,
pub kappa_soc: Number,
pub soc_method: Index,
}Expand description
Knobs baked into the assembled BacktrackingLineSearch. Defaults
mirror IpBacktrackingLineSearch.cpp:RegisterOptions.
Fields§
§alpha_red_factor: Numberalpha_red_factor — fractional reduction applied to the trial
step size at every backtracking step
(alpha *= alpha_red_factor). Mirrors upstream’s
IpBacktrackingLineSearch::alpha_red_factor_.
alpha_red_factor_min: Option<Number>alpha_red_factor_min — floor on one backtracking reduction,
which turns the fixed geometric trial sequence into a
safeguarded quadratic interpolation (gh#818). See
BacktrackingLineSearch::next_alpha.
None — the default — means “let the Hessian mode decide”, and
the two modes decide differently:
- limited-memory →
0.05(interpolation on). The quasi-Newton model’s scale can be wrong by orders of magnitude in any direction its curvature pairs do not span, so the acceptablealphacan be far below 1 and the fixed factor spendslog(1/alpha)objective evaluations walking to it. - exact → off (
alpha_red_factor, i.e. upstream’s fixed sequence). A Newton step’s length is meaningful, the acceptablealphais normally within a few halvings of 1, and the trial sequence is not what costs.
The split is measured, not assumed. Forcing
alpha_red_factor_min 0.05 onto the exact path moves 3 of the
156 fixture-legs in scripts/sweep-fixtures.sh, and the one
that matters is a status loss: eigena2 goes from
SolveSucceeded/27 to SolvedToAcceptableLevel/32. The other
two are issue_508_infeasible_gap_1em4 441 → 385 to the same
certificate — a gain — and an objective digit on
hs13_bigstart. One fixture giving up a solve is the whole
argument; a faster infeasibility certificate does not buy it
back. Before ALPHA_INTERP_MIN_TRIALS gated the interpolation
the same experiment moved 9 legs and cost
infeasible_square_scaled_1em4 its infeasibility certificate
(InfeasibleProblemDetected/17 → ErrorInStepComputation/12);
the gate narrowed the damage, it did not remove the reason for
the split.
An explicit alpha_red_factor_min from the user is honoured on
both paths — the mode-dependence is only in the default.
watchdog_shortened_iter_trigger: Index§watchdog_trial_iter_max: Index§soft_resto_pderror_reduction_factor: Numbersoft_resto_pderror_reduction_factor — required relative
reduction in the primal-dual error for a soft-resto step.
0 disables the soft restoration phase.
max_soft_resto_iters: Indexmax_soft_resto_iters — cap on consecutive soft-resto
iterations before full restoration is forced.
accept_every_trial_step: boolaccept_every_trial_step — short-circuits the filter / alpha
loop and accepts the full fraction-to-the-boundary step every
outer iteration. Mirrors upstream’s
IpBacktrackingLineSearch::accept_every_trial_step_. Drops
global convergence guarantees; only safe for problems where the
Newton step is already a descent step (LPs, convex QPs). The
Mehrotra cascade in application.rs flips this on.
alpha_for_y: AlphaForYalpha_for_y — policy for the equality-multiplier (y_c / y_d)
step length. Upstream default is Primal; the Mehrotra cascade
switches to BoundMult.
accept_after_max_steps: Indexaccept_after_max_steps — accept a trial point once this many
backtracking steps have been taken, even if it fails the
acceptor’s tests. -1 (the default) disables it, which is why
wiring it moves no default trajectory. Mirrors
IpBacktrackingLineSearch.cpp:759-770.
eta_phi: Numbereta_phi — relaxation factor in the Armijo condition (Eqn. (20)).
delta: Numberdelta — multiplier on the constraint violation in the filter’s
switching rule (Eqn. (19)); maps to
FilterLsAcceptor::delta_armijo. Default 1.0, from
IpFilterLSAcceptor.cpp:RegisterOptions.
theta_min_fact: Numbertheta_min_fact — constraint-violation threshold factor in the
switching rule.
theta_max_fact: Numbertheta_max_fact — upper-bound factor for constraint violation in
the filter (Eqn. (21)).
theta_max_row_scale_kappa: Numbertheta_max_row_scale_kappa — multiplier on the constraint-row
count used as the floor of the theta_max reference.
Opt-in: default 0, which is upstream’s bare
max(1, theta_0) floor bit-for-bit. Set to 1 on a large model
that stalls from a feasible start. See
FilterLsAcceptor::theta_max_row_scale_kappa.
theta_max_adaptive_trigger: u32theta_max_adaptive_trigger — consecutive line searches whose
every trial was refused at the theta_max gate before the
ceiling is raised. 0 disables the rule. See
FilterLsAcceptor::theta_max_adaptive_trigger (pounce#546).
theta_max_adaptive_factor: NumberGeometric factor applied to theta_max on each adaptive raise.
See FilterLsAcceptor::theta_max_adaptive_factor.
theta_max_adaptive_max_raises: u32Cap on adaptive raises per solve, which is what keeps theta_max
finite. See FilterLsAcceptor::theta_max_adaptive_max_raises.
gamma_phi: Numbergamma_phi — filter margin factor for the barrier function
(Eqn. (18a)).
gamma_theta: Numbergamma_theta — filter margin factor for the constraint violation
(Eqn. (18b)).
s_phi: Numbers_phi — exponent for the linear barrier model in the switching
rule (Eqn. (19)).
s_theta: Numbers_theta — exponent for the current constraint violation in the
switching rule (Eqn. (19)).
alpha_min_frac: Numberalpha_min_frac — safety factor for the minimal step size before
switching to restoration (gamma_alpha, Eqn. (23)).
obj_max_inc: Numberobj_max_inc — max acceptable increase (orders of magnitude) of
the barrier objective for a trial point.
max_filter_resets: Indexmax_filter_resets — maximum number of filter resets allowed
(0 disables the reset heuristic).
filter_reset_trigger: Indexfilter_reset_trigger — successive filter-rejected iterations that
trigger a filter reset.
nu_init: Numbernu_init — initial value of the penalty parameter ν.
nu_inc: Numbernu_inc — increment added when ν is bumped.
rho: Numberrho — convex-combination weight in the ν update rule.
eta_penalty: Numbereta_penalty — relaxation factor in the Armijo condition on the
penalty merit function.
max_soc: Indexmax_soc — max second-order-correction trial steps per iteration;
0 disables SOC.
kappa_soc: Numberkappa_soc — sufficient-reduction factor for a SOC step to be
continued.
soc_method: Indexsoc_method — 0 (paper method) or 1 (alpha-on-rhs variant).
Trait Implementations§
Source§impl Clone for LineSearchOptions
impl Clone for LineSearchOptions
Source§fn clone(&self) -> LineSearchOptions
fn clone(&self) -> LineSearchOptions
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 LineSearchOptions
impl Debug for LineSearchOptions
Auto Trait Implementations§
impl Freeze for LineSearchOptions
impl RefUnwindSafe for LineSearchOptions
impl Send for LineSearchOptions
impl Sync for LineSearchOptions
impl Unpin for LineSearchOptions
impl UnsafeUnpin for LineSearchOptions
impl UnwindSafe for LineSearchOptions
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