[Clp-tickets] [COIN-OR Linear Programming Solver] #55: ClpSolve::infeasibleReturn ignored
COIN-OR Linear Programming Solver
coin-trac at coin-or.org
Fri Mar 23 14:38:26 EDT 2012
#55: ClpSolve::infeasibleReturn ignored
------------------------+----------------------
Reporter: mlubin | Owner: somebody
Type: defect | Status: new
Priority: minor | Milestone:
Component: component1 | Version:
Keywords: |
------------------------+----------------------
It seems that the ClpSolve::infeasibleReturn option is ignored when
infeasibility is detected from tightening primal bounds. See the code
below from trunk (ClpSolve.cpp starting at line 915):
{{{
if (method == ClpSolve::useDual) {
double * saveLower = NULL;
double * saveUpper = NULL;
if (presolve == ClpSolve::presolveOn) {
int numberInfeasibilities =
model2->tightenPrimalBounds(0.0, 0);
if (numberInfeasibilities) {
handler_->message(CLP_INFEASIBLE, messages_)
<< CoinMessageEol;
delete model2;
model2 = this;
presolve = ClpSolve::presolveOff;
}
} else if (numberRows_ + numberColumns_ > 5000) {
// do anyway
saveLower = new double[numberRows_+numberColumns_];
CoinMemcpyN(model2->columnLower(), numberColumns_,
saveLower);
CoinMemcpyN(model2->rowLower(), numberRows_, saveLower +
numberColumns_);
saveUpper = new double[numberRows_+numberColumns_];
CoinMemcpyN(model2->columnUpper(), numberColumns_,
saveUpper);
CoinMemcpyN(model2->rowUpper(), numberRows_, saveUpper +
numberColumns_);
int numberInfeasibilities = model2->tightenPrimalBounds();
if (numberInfeasibilities) {
handler_->message(CLP_INFEASIBLE, messages_)
<< CoinMessageEol;
CoinMemcpyN(saveLower, numberColumns_,
model2->columnLower());
CoinMemcpyN(saveLower + numberColumns_, numberRows_,
model2->rowLower());
delete [] saveLower;
saveLower = NULL;
CoinMemcpyN(saveUpper, numberColumns_,
model2->columnUpper());
CoinMemcpyN(saveUpper + numberColumns_, numberRows_,
model2->rowUpper());
delete [] saveUpper;
saveUpper = NULL;
}
}
}}}
At an earlier point in the same file (line 502), there is:
{{{
if (!model2) {
handler_->message(CLP_INFEASIBLE, messages_)
<< CoinMessageEol;
model2 = this;
eventHandler()->event(ClpEventHandler::presolveInfeasible);
problemStatus_ = pinfo->presolveStatus();
if (options.infeasibleReturn() || (moreSpecialOptions_ & 1)
!= 0) {
delete pinfo;
return -1;
}
presolve = ClpSolve::presolveOff;
}
}}}
The code in the first snippet should include a check for
`options.infeasibleReturn()` as in the second snippet.
--
Ticket URL: <https://projects.coin-or.org/ticket/55>
COIN-OR Linear Programming Solver <http://projects.coin-or.org/Clp>
A linear programming solver.
More information about the Clp-tickets
mailing list