[Coin-ipopt] assertion failed in IpCompoundSymMatrix::SetComp

Stefan Vigerske stefan at mathematik.hu-berlin.de
Tue Aug 9 14:47:55 EDT 2005


Hi,

using the latest subversion-version of IPOPT (revision 428), I got an 
assertion in IpCompoundSymMatrix.::SetComp. It might just be a failure in my 
use of Ipopt, but maybe you can directly see whats going wrong.
Unfortunately, I cannot give you the failing code since IPOPT is integrated in 
a bigger project here, but maybe the debug messages help:

The failing assertion is:
IpCompoundSymMatrix.cpp:40: void Ipopt::CompoundSymMatrix::SetComp(int, int, 
const Ipopt::Matrix&): Assertion `owner_space_->GetCompSpace(irow, 
jcol)->IsMatrixFromSpace(matrix)' failed.

>From gdb backtrace I get the following:
#0  0x4028b691 in kill () from /lib/libc.so.6
#1  0x40045511 in pthread_kill () from /lib/libpthread.so.0
#2  0x4004583b in raise () from /lib/libpthread.so.0
#3  0x4028b424 in raise () from /lib/libc.so.6
#4  0x4028ca50 in abort () from /lib/libc.so.6
#5  0x402849b2 in __assert_fail () from /lib/libc.so.6
#6  0x0871ecb6 in Ipopt::CompoundSymMatrix::SetComp(int, int, Ipopt::Matrix 
const&) (this=0x89f89a0, irow=2, jcol=0, matrix=@0x89d6860)
    at IpCompoundSymMatrix.cpp:40
#7  0x08797105 in 
Ipopt::StdAugSystemSolver::CreateAugmentedSystem(Ipopt::SymMatrix const*, 
Ipopt::Vector const*, double, Ipopt::Vector const*, double, Ipopt::Matrix 
const&, Ipopt::Vector const*, double, Ipopt::Matrix const&, Ipopt::Vector 
const*, double, Ipopt::Vector const&, Ipopt::Vector const&, Ipopt::Vector 
const&, Ipopt::Vector const&) (this=0x89d5358, W=0x89ce108, D_x=0x89f83f8, 
delta_x=0, D_s=0x89f6b38, delta_s=0, J_c=@0x89d6860, D_c=0x89f8518,
    delta_c=0, J_d=@0x89cbc98, D_d=0x89f8628, delta_d=0, proto_x=@0x89f6d08, 
proto_s=@0x89f7130, proto_c=@0x89f8750, proto_d=@0x89f8818)
    at IpStdAugSystemSolver.cpp:333
#8  0x08795669 in Ipopt::StdAugSystemSolver::Solve(Ipopt::SymMatrix const*, 
Ipopt::Vector const*, double, Ipopt::Vector const*, double, Ipopt::Matrix 
const*, Ipopt::Vector const*, double, Ipopt::Matrix const*, Ipopt::Vector 
const*, double, Ipopt::Vector const&, Ipopt::Vector const&, Ipopt::Vector 
const&, Ipopt::Vector const&, Ipopt::Vector&, Ipopt::Vector const&, 
Ipopt::Vector const&, Ipopt::Vector const&, bool, int) (this=0x89d5358, 
W=0x89ce108, D_x=0x89f83f8,
    delta_x=0, D_s=0x89f6b38, delta_s=0, J_c=0x89d6860, D_c=0x89f8518, 
delta_c=0, J_d=0x89cbc98, D_d=0x89f8628, delta_d=0, rhs_x=@0x89f6d08,
    rhs_s=@0x89f7130, rhs_c=@0x89f8750, rhs_d=@0x89f8818, sol_x=@0x89f7388, 
sol_s=@0x89f76f8, sol_c=@0x89f77a8, sol_d=@0x89f7858, check_NegEVals=true,
    numberOfNegEVals=7) at IpStdAugSystemSolver.cpp:117
#9  0x08710841 in Ipopt::AugRestoSystemSolver::Solve(Ipopt::SymMatrix const*, 
Ipopt::Vector const*, double, Ipopt::Vector const*, double, Ipopt::Matrix 
const*, Ipopt::Vector const*, double, Ipopt::Matrix const*, Ipopt::Vector 
const*, double, Ipopt::Vector const&, Ipopt::Vector const&, Ipopt::Vector 
const&, Ipopt::Vector const&, Ipopt::Vector&, Ipopt::Vector const&, 
Ipopt::Vector const&, Ipopt::Vector const&, bool, int) (this=0x89cdbf8, 
W=0x89c5070,
    D_x=0x89f66d8, delta_x=0, D_s=0x89f6b38, delta_s=0, J_c=0x89d6918, 
D_c=0x0, delta_c=0, J_d=0x89c4938, D_d=0x0, delta_d=0, rhs_x=@0x89f6c50,
    rhs_s=@0x89f7130, rhs_c=@0x89d1380, rhs_d=@0x89cd9c0, sol_x=@0x89f72d0, 
sol_s=@0x89f76f8, sol_c=@0x89f77a8, sol_d=@0x89f7858, check_NegEVals=true,
    numberOfNegEVals=7) at IpAugRestoSystemSolver.cpp:184
#10 0x087658ae in Ipopt::PDFullSpaceSolver::SolveOnce(bool, bool, 
Ipopt::SymMatrix const&, Ipopt::Matrix const&, Ipopt::Matrix const&, 
Ipopt::Matrix const&, Ipopt::Matrix const&, Ipopt::Matrix const&, 
Ipopt::Matrix const&, Ipopt::Vector const&, Ipopt::Vector const&, 
Ipopt::Vector const&, Ipopt::Vector const&, Ipopt::Vector const&, 
Ipopt::Vector const&, Ipopt::Vector const&, Ipopt::Vector const&, 
Ipopt::Vector const&, Ipopt::Vector const&, double, double, 
Ipopt::IteratesVector const&, Ipopt::IteratesVector&) (this=0x89c8950, 
resolve_unmodified=false, pretend_singular=false, W=@0x89c5070, 
J_c=@0x89d6918,
    J_d=@0x89c4938, Px_L=@0x89d5cc8, Px_U=@0x89ce070, Pd_L=@0x89b53d0, 
Pd_U=@0x89bf0b8, z_L=@0x89d03c8, z_U=@0x89d27d0, v_L=@0x89d2880, 
v_U=@0x89d2930,
    slack_x_L=@0x89deb00, slack_x_U=@0x89cd500, slack_s_L=@0x89cd6f0, 
slack_s_U=@0x89cd898, sigma_x=@0x89f66d8, sigma_s=@0x89f6b38, alpha=1, 
beta=0,
    rhs=@0x89d2a98, res=@0x89f59a8) at IpPDFullSpaceSolver.cpp:471
#11 0x08762f38 in Ipopt::PDFullSpaceSolver::Solve(double, double, 
Ipopt::IteratesVector const&, Ipopt::IteratesVector&, bool) (this=0x89c8950, 
alpha=-1,
    beta=0, rhs=@0x89d2a98, res=@0x89f59a8, allow_inexact=false) at 
IpPDFullSpaceSolver.cpp:185
#12 0x0874c130 in Ipopt::IpoptAlgorithm::ComputeSearchDirection() 
(this=0x89d6d38) at IpIpoptAlg.cpp:267
#13 0x0874b4a4 in Ipopt::IpoptAlgorithm::Optimize() (this=0x89d6d38) at 
IpIpoptAlg.cpp:155
#14 0x0878deee in Ipopt::MinC_1NrmRestorationPhase::PerformRestoration() 
(this=0x89d6c28) at IpRestoMinC_1Nrm.cpp:145
#15 0x08739d69 in Ipopt::FilterLineSearch::FindAcceptableTrialPoint() 
(this=0x89c9ef8) at IpFilterLineSearch.cpp:565
#16 0x0874c477 in Ipopt::IpoptAlgorithm::ComputeAcceptableTrialPoint() 
(this=0x89c64e8) at IpIpoptAlg.cpp:287
#17 0x0874b4b2 in Ipopt::IpoptAlgorithm::Optimize() (this=0x89c64e8) at 
IpIpoptAlg.cpp:158
#18 0x08691913 in 
Ipopt::IpoptApplication::OptimizeNLP(Ipopt::SmartPtr<Ipopt::NLP> const&, 
Ipopt::SmartPtr<Ipopt::IpoptData>&, 
Ipopt::SmartPtr<Ipopt::IpoptCalculatedQuantities>&) (this=0x89bf0e8, 
nlp=@0xbfffe390, ip_data=@0x89be108, ip_cq=@0x89be110) at 
IpIpoptApplication.cpp:259
#19 0x08690dc6 in 
Ipopt::IpoptApplication::OptimizeTNLP(Ipopt::SmartPtr<Ipopt::TNLP> const&, 
Ipopt::SmartPtr<Ipopt::IpoptData>&, 
Ipopt::SmartPtr<Ipopt::IpoptCalculatedQuantities>&) (this=0x89bf0e8, 
nlp=@0x89be100, ip_data=@0x89be108, ip_cq=@0x89be110) at 
IpIpoptApplication.cpp:198


So, I had a look at StdAugSystemSolver::Solve to check where the failure comes 
from, but I have no understanding of the IPOPT code yet.
However, since it is writting in a nice style (I would like to be able to 
write such good readable C++ code :-)), I just added
augmented_system_=NULL;
CreateAugmentedSpace(*W, *J_c, *J_d, rhs_x, rhs_s, rhs_c, rhs_d);
before line 177 in IpStdAugSystemSolver.cpp. It might be against the idea of 
an update of the augmented system, but it made the assertion disappearing.

Maybe it helps you, but probably its a failure on my side somewhere else,
thank you :-),
Stefan

-- 
Stefan Vigerske
Humboldt University Berlin, Numerical Mathematics
http://www.math.hu-berlin.de/~stefan





More information about the Coin-ipopt mailing list