Skip to content

Commit 8e2f3b4

Browse files
committed
clean preprocessed model a bit more
1 parent 4039409 commit 8e2f3b4

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

src/CglPreProcess/CglPreProcess.cpp

+55
Original file line numberDiff line numberDiff line change
@@ -4317,6 +4317,61 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface &model,
43174317
for ( int i=0 ; (i<returnModel->getNumCols()) ; i++ )
43184318
returnModel->setColName( i, model.getColName( originalColumns()[i] ) );
43194319
}
4320+
// clean model
4321+
if (returnModel) {
4322+
int numberRows = returnModel->getNumRows();
4323+
int numberColumns = returnModel->getNumCols();
4324+
CoinPackedMatrix matrixByRow(*returnModel->getMutableMatrixByRow());
4325+
// clean rhs
4326+
double *elementByRow = matrixByRow.getMutableElements();
4327+
const int *column = matrixByRow.getIndices();
4328+
const CoinBigIndex *rowStart = matrixByRow.getVectorStarts();
4329+
const int *rowLength = matrixByRow.getVectorLengths();
4330+
4331+
const double *rowLower = returnModel->getRowLower();
4332+
const double *rowUpper = returnModel->getRowUpper();
4333+
for (int iRow=0;iRow<numberRows;iRow++) {
4334+
CoinBigIndex start = rowStart[iRow];
4335+
CoinBigIndex end = start+rowLength[iRow];
4336+
bool allInteger = true;
4337+
for (CoinBigIndex j=start;j<end;j++) {
4338+
if (!returnModel->isInteger(column[j])) {
4339+
allInteger = false;
4340+
break;
4341+
}
4342+
double value = fabs(elementByRow[j]);
4343+
if (value-floor(value+0.5)>1.0e-13) {
4344+
allInteger = false;
4345+
break;
4346+
}
4347+
}
4348+
if (allInteger) {
4349+
double lower = rowLower[iRow];
4350+
double upper = rowUpper[iRow];
4351+
double lowerNew = lower;
4352+
double upperNew = upper;
4353+
if (lower>-1.0e15&&lower!=floor(lower+0.5)) {
4354+
if (fabs(lower-floor(lower+0.5))<1.0e-13) {
4355+
lowerNew = floor(lower+0.5);
4356+
}
4357+
}
4358+
if (upper<1.0e15&&upper!=floor(upper+0.5)) {
4359+
if (fabs(upper-floor(upper+0.5))<1.0e-13) {
4360+
upperNew = floor(upper+0.5);
4361+
}
4362+
}
4363+
if (lowerNew<=upperNew) {
4364+
if (lowerNew!=lower)
4365+
returnModel->setRowLower(iRow,lowerNew);
4366+
if (upperNew!=upper)
4367+
returnModel->setRowUpper(iRow,upperNew);
4368+
} else {
4369+
printf("LOOKS infeas\n");
4370+
}
4371+
}
4372+
}
4373+
}
4374+
// end clean model
43204375
delete [] scBound;
43214376
return returnModel;
43224377
}

0 commit comments

Comments
 (0)