[Ipopt-tickets] [Ipopt] #177: setting multipliers for fixed variables gives assert/segfault if solve failed

Ipopt coin-trac at coin-or.org
Thu Jan 26 05:43:42 EST 2012


#177: setting multipliers for fixed variables gives assert/segfault if solve
failed
-------------------+------------------------
Reporter:  stefan  |      Owner:  ipopt-team
    Type:  defect  |     Status:  new
Priority:  normal  |  Component:  Ipopt
 Version:  3.10    |   Severity:  minor
Keywords:          |
-------------------+------------------------
 Hi,

 I run Ipopt with "fixed_variable_treatment make_constraint".

 The solve failed with status RESTORATION_FAILURE.

 In this case, I get a segmentation fault from
 {{{TNLPAdapter::FinalizeSolution}}} in the lines
 {{{
 // Hopefully the following is correct to recover the bound
 // multipliers for fixed variables (sign ok?)
 if (fixed_variable_treatment_==MAKE_CONSTRAINT && n_x_fixed_>0) {
   const DenseVector* dy_c = static_cast<const DenseVector*>(&y_c);
   DBG_ASSERT(dynamic_cast<const DenseVector*>(&y_c));
   DBG_ASSERT(!dy_c->IsHomogeneous());
   const Number* values = dy_c->Values();
   Index n_c_no_fixed = y_c.Dim() - n_x_fixed_;
   for (Index i=0; i<n_x_fixed_; i++) {
     full_z_L[x_fixed_map_[i]] = Max(0., -values[n_c_no_fixed+i]);
     full_z_U[x_fixed_map_[i]] = Max(0., values[n_c_no_fixed+i]);
   }
 }
 }}}
 because the values pointer is NULL.
 Debugging shows, that y_c is a homogeneous vector with value 0.0.
 I believe this is because the solve failed.
 Probably, I would get an assert if DBG_ASSERT is activated.

 I committed a workaround to stable/3.10:
 https://projects.coin-or.org/Ipopt/changeset/2066/

 However, a better fix may be to skip setting the multipliers if no
 solution is available.

-- 
Ticket URL: <https://projects.coin-or.org/ticket/177>
Ipopt <http://projects.coin-or.org/Ipopt>
Interior-point optimizer for nonlinear programs.



More information about the Ipopt-tickets mailing list