[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