Expand description
Warm-start iterate initializer — port of
IpWarmStartIterateInitializer.{hpp,cpp}. Used when a previous
solve has left a trial point that should be reused.
There are two callers we serve:
- A full primal-dual warm restart installed via
Application::set_warm_start_iterateand consumed by the nextoptimize_tnlp(e.g. the debuggerresolvere-solve):data.curralready carries the previous solve’s iterate, so we keep it, clamp multipliers, and optionally overridemu. - First solves from
OptimizeTNLPthat opt intowarm_start_init_point=yesto forward user-supplied primal/dual seeds viaTNLP::get_starting_point. Heredata.currcarries only dim metadata (uninitialized vectors); we pull seeds from the NLP, push primals/slacks into the bound interior with warm-startbound_push/bound_frac, and then apply the same multiplier clamps.
Wired options today: bound_push, bound_frac,
slack_bound_push, slack_bound_frac, mult_bound_push,
mult_init_max, target_mu. mult_bound_push floors the four
bound-multiplier blocks (mirroring upstream’s ElementWiseMax
with warm_start_mult_bound_push): a user-seeded z = 0 would
otherwise start the barrier on its boundary. The remaining knobs
(entire_iterate, same_structure) are parsed for Ipopt option
compatibility but not yet consumed — they require the
GetWarmStartIterate TNLP surface, which pounce does not expose.