@@ -4317,6 +4317,61 @@ CglPreProcess::preProcessNonDefault(OsiSolverInterface &model,
4317
4317
for ( int i=0 ; (i<returnModel->getNumCols ()) ; i++ )
4318
4318
returnModel->setColName ( i, model.getColName ( originalColumns ()[i] ) );
4319
4319
}
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
4320
4375
delete [] scBound;
4321
4376
return returnModel;
4322
4377
}
0 commit comments