[Ipopt] Null pointer crash

Hans Pirnay hans.pirnay at rwth-aachen.de
Tue Jan 19 15:00:25 EST 2010

Hi Kelly,

I don't really have a clue what exactly could have gone wrong in your
case, but here are my thoughts anyway:

IPOPT maintains a current and a trial iterate. Each time the current
iterate is set from the trial iterate, the trial iterate's pointer is
set to NULL. The trial vector is supposed to be set during the call to
LineSearch->FindAcceptableTrialPoint(). So either the trial vector has
not been set at all, has been set partially (which I think is
unlikely, given that trial->x() is not set), or has been set but
overridden (AcceptTrialPoint is called in BackTrackingLineSearch,
which sets trial to NULL). It would probably help to find out what
exactly is done in the call of the LineSearch prior to the failed
assertion. It would make sense if AcceptTrialPoint was called
somewhere in the LineSearch without resetting the trial iterate, but
that's just a guess. This would set trial to NULL, and lead to the
failed assertions.

Try getting detailed output from BackTrackingLineSearch, or if
possible, post the test case.

I hope this is of any help.


On Mon, Jan 18, 2010 at 7:48 PM, Plett, Kelly <KPlett at kbcat.com> wrote:
> Hi all,
> We have been using Ipopt with good success to optimize various black-box
> process models, so thanks to all who have contributed to the project.
> However…
> Recently I have been running into an increasing number of crashes in
> IpoptCalculatedQuantities::curr_d_minus_s() on a null s pointer.  When I
> bump up COIN_IPOPT_CHECKLEVEL to 3, I observe SmartPtr assertions starting
> in IpoptCalculatedQuantities::trial_slack_x_L() because
> ip_data_->trial()->x() is null.  This occurs in AcceptTrialPoint on the
> max_correction = correct_bound_multiplier(…) line with the following call
> stack:
>         ipopt.dll!_wassert(const wchar_t * expr=0x0f594ea4, const wchar_t *
> filename=0x0f594e40, unsigned int lineno=433)  Line 384     C
>         ipopt.dll!Ipopt::SmartPtr<Ipopt::Vector const >::operator*()  Line
> 433 + 0x1c bytes     C++
>         ipopt.dll!Ipopt::IpoptCalculatedQuantities::trial_slack_x_L()  Line
> 357 + 0x8 bytes     C++
>         ipopt.dll!Ipopt::IpoptCalculatedQuantities::trial_compl_x_L()  Line
> 1823 + 0xc bytes    C++
>>       ipopt.dll!Ipopt::IpoptAlgorithm::AcceptTrialPoint()  Line 658 + 0x1d
>> bytes      C++
>         ipopt.dll!Ipopt::IpoptAlgorithm::Optimize(bool isResto=false)  Line
> 367 C++
> Being new to the internals of Ipopt, under what conditions will the trial x
> vector be null?  Is there anything specific I should look for in the
> diagnostics that might help me identify the root cause?  Any guidance would
> be greatly appreciated!
> The case in which I am currently observing this behaviour is tiny (one
> variable, one inequality), but I have seen it in larger ones as well.  I can
> reproduce in both Ipopt 3.6.0 and 3.8.1.
> Thanks in advance,
> Kelly
> This e-mail is confidential and intended only for the individual(s) to whom
> it is addressed. If you or your organisation is not an intended recipient of
> this e-mail, please notify the sender by replying and do not read or
> disseminate its information. Please delete all copies from your system. KBC
> is liable neither for the proper or complete transmission of the information
> contained in this communication nor for any delay in its receipt. Opinions,
> conclusions and other information in this message and attachments that do
> not relate to the official business of KBC are neither given nor endorsed by
> it. Even though the Webroot Virus Centre has checked this message for all
> known viruses, you should carry out your own virus checks before opening any
> attachments. Thank you for your co-operation. www.kbcat.com
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt

More information about the Ipopt mailing list