[Ipopt] segmentation fault for unbounded convex QP with mehrotra_algorithm

Stefan Vigerske stefan at math.hu-berlin.de
Mon Oct 15 04:23:21 EDT 2012


Hi,

based on a C++ example to reproduce this issue by Tony, Andreas made a 
fix in Ipopt/trunk (which I am now announcing here :-)):
  https://projects.coin-or.org/Ipopt/changeset/2114/

Can you try whether that works for you?

Best,
Stefan

On 10/12/2012 01:27 AM, Joris Gillis wrote:
> Hello all,
>
> Thanks to Jonathan for helping me out in a private thread.
> However, he was not able to reproduce this using the matlab interface.
>
> Further details of my situation: the same fault occurs with ma57, ma27, mumps.
>
> The programs outputs:
>
> This is Ipopt version 3.10.2, running with linear solver ma27.
>
> Number of nonzeros in equality constraint Jacobian...:        0
> Number of nonzeros in inequality constraint Jacobian.:        0
> Number of nonzeros in Lagrangian Hessian.............:        0
>
> Total number of variables............................:        5
>                       variables with only lower bounds:        0
>                  variables with lower and upper bounds:        5
>                       variables with only upper bounds:        0
> Total number of equality constraints.................:        0
> Total number of inequality constraints...............:        0
>          inequality constraints with only lower bounds:        0
>     inequality constraints with lower and upper bounds:        0
>          inequality constraints with only upper bounds:        0
>
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>     0  0.0000000e+00 0.00e+00 1.00e+00   0.0 0.00e+00    -  0.00e+00 0.00e+00   0
>     1 -2.4999996e+00 0.00e+00 3.85e-06  -5.0 1.00e+00    -  9.90e-01 1.00e+00f  1
>     2 -2.5000000e+00 0.00e+00 3.81e-06 -11.0 3.84e-04    -  9.90e-01 1.00e+00f  1
>     3 -2.5000000e+00 0.00e+00 3.81e-08 -11.0 1.54e-11    -  9.90e-01 1.00e+00f  1
>     4 -2.5000000e+00 0.00e+00 3.81e-10 -11.0 3.55e-17    -  9.90e-01 1.00e+00   0
>     5 -2.5000000e+00 0.00e+00 3.81e-14 -11.0 3.55e-17    -  1.00e+00 1.00e+00T  0
> Segmentation fault (core dumped)
>
>
> Stack trace:
>
>
> #0  0x00007ffff3852eb2 in std::vector<Ipopt::SmartPtr<Ipopt::Vector>, std::allocator<Ipopt::SmartPtr<Ipopt::Vector> > >::operator[] (this=0xd0, __n=4)
>      at /usr/include/c++/4.6/bits/stl_vector.h:711
> #1  0x00007ffff38525aa in Ipopt::CompoundVector::IsCompNull (this=0x0, i=4)
>      at ../../../../Ipopt/src/Interfaces/../LinAlg/IpCompoundVector.hpp:79
> #2  0x00007ffff385284c in Ipopt::IteratesVector::GetIterateFromComp (this=0x0,
>      i=4)
>      at ../../../../Ipopt/src/Interfaces/../Algorithm/IpIteratesVector.hpp:501
> #3  0x00007ffff3852798 in Ipopt::IteratesVector::z_L (this=0x0)
>      at ../../../../Ipopt/src/Interfaces/../Algorithm/IpIteratesVector.hpp:233
> #4  0x00007ffff3941482 in Ipopt::PDSearchDirCalculator::ComputeSearchDirection
>      (this=0x10819f0)
>      at ../../../../Ipopt/src/Algorithm/IpPDSearchDirCalc.cpp:88
> #5  0x00007ffff38d803e in Ipopt::IpoptAlgorithm::ComputeSearchDirection (
>      this=0x1081a40) at ../../../../Ipopt/src/Algorithm/IpIpoptAlg.cpp:507
> #6  0x00007ffff38d7176 in Ipopt::IpoptAlgorithm::Optimize (this=0x1081a40,
>      isResto=false) at ../../../../Ipopt/src/Algorithm/IpIpoptAlg.cpp:314
> #7  0x00007ffff384e438 in Ipopt::IpoptApplication::call_optimize (
>      this=0xb2ed30)
>      at ../../../../Ipopt/src/Interfaces/IpIpoptApplication.cpp:816
> #8  0x00007ffff384d59a in Ipopt::IpoptApplication::OptimizeNLP (this=0xb2ed30,
>      nlp=..., alg_builder=...)
>      at ../../../../Ipopt/src/Interfaces/IpIpoptApplication.cpp:713
> ---Type <return> to continue, or q <return> to quit---
> #9  0x00007ffff384d291 in Ipopt::IpoptApplication::OptimizeNLP (this=0xb2ed30,
>      nlp=...) at ../../../../Ipopt/src/Interfaces/IpIpoptApplication.cpp:676
> #10 0x00007ffff384ce64 in Ipopt::IpoptApplication::OptimizeTNLP (
>      this=0xb2ed30, tnlp=...)
>      at ../../../../Ipopt/src/Interfaces/IpIpoptApplication.cpp:655
>
> Any more ideas to debug this?
>
> Thanks in advance,
>     Joris Gillis
> ________________________________
> From: Jonathan Currie [jonathan.currie at aut.ac.nz]
> Sent: Wednesday, October 10, 2012 11:49 PM
> To: Joris Gillis; 'ipopt at list.coin-or.org'
> Subject: RE: segmentation fault for unbounded convex QP with mehrotra_algorithm
>
> Using the Matlab interface with the option ‘mehrotra_algorithm’ = ‘yes’ gives the following exception:
>
> Exception of type: OPTION_INVALID in file "..\..\..\src\Algorithm\IpAlgBuilder.cpp" at line 724:
> Exception message: !mehrotra_algorithm || smuoracle=="probing" evaluated false: If mehrotra_algorithm=yes, mu_oracle must be "probing".
>
> EXIT: Invalid option encountered.
>
>
> Have you enabled mu_oracle as per the above? If not, and you are not catching the exception, this could be your problem.
>
> Jonathan
>
> From: ipopt-bounces at list.coin-or.org [mailto:ipopt-bounces at list.coin-or.org] On Behalf Of Joris Gillis
> Sent: Thursday, 11 October 2012 5:29 a.m.
> To: ipopt at list.coin-or.org
> Subject: [Ipopt] segmentation fault for unbounded convex QP with mehrotra_algorithm
>
> Dear all,
>
> I’m experiencing a segmentation fault that occurs in PDSearchDirCalculator::ComputeSearchDirection for a problem with the following characteristics:
> Sparse convex QP
> No constraints
> Decision variable bounds that are large but finite
> mehrotra_algorithm active
> Hessian approximation exact or limited-memory, does not matter.
>
> Since we are using our own python interface (CasADi), it is possible that the error lies in our interface.
> So could someone here please reconstruct this problem by more conventional means so I can file a proper ticket?
>
> I’m adding the code of the failing case here for further reference:
>
> ======
> from casadi import *
>
> N = 5
>
> x   = ssym("x",N)
> x0  = DMatrix.ones(N,1)
> H   = DMatrix.eye(N)
> A   = DMatrix.ones(0,N)
> G   = mul(H,x0)
> obj = 0.5*mul([x.T,H,x])-mul(G.T,x)
>
> f = SXFunction([x],[obj])
> g = SXFunction([x],[mul(A,x)])
> j = SXFunction([x],[A])
>
> solver = IpoptSolver(f,g,FX(),j)
> solver.setOption("mehrotra_algorithm","yes");
> solver.init()
> solver.input(NLP_LBX).setAll(-1000)
> solver.input(NLP_UBX).setAll(1000)
>
> solver.solve()
> ======
>
> Best regards,
>     Joris Gillis
>
>
>
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
>



More information about the Ipopt mailing list