Changeset 2217


Ignore:
Timestamp:
Oct 6, 2015 12:10:41 PM (3 years ago)
Author:
forrest
Message:

fix bug in greedy heuristic

File:
1 edited

Legend:

Unmodified
Added
Removed
  • stable/2.9/Cbc/src/CbcHeuristicGreedy.cpp

    r2094 r2217  
    996996    const int * columnLength = matrix_.getVectorLengths();
    997997    int * sosRow = new int [numberColumns];
     998    char * sos = new char [numberRows];
     999    memset(sos,'a',numberRows);
    9981000    int nonSOS=0;
    9991001    // If bit set then use current
     
    10181020        } else if (rowUpper[iRow] < 1.0e10) {
    10191021          rhs[iRow]=rowUpper[iRow];
     1022          if (rhs[iRow]<0)
     1023            sos[iRow]=0; // can't be SOS
    10201024        } else {
    10211025          rhs[iRow]=rowLower[iRow];
     1026          if (rhs[iRow]<0)
     1027            sos[iRow]=0; // can't be SOS
    10221028        }
    10231029      }
     
    10371043            good = false;
    10381044          int iRow = row[j];
    1039           if (rhs[iRow]==-1.0) {
     1045          if (rhs[iRow]==-1.0 && sos[iRow] == 'a') {
    10401046            if (element[j] != 1.0)
    10411047              good = false;
     
    10531059        delete [] sosRow;
    10541060        delete [] rhs;
     1061        delete [] sos;
    10551062        setWhen(0); // switch off
    10561063        return 0;
     
    10921099    }
    10931100    double offset2 = 0.0;
    1094     char * sos = new char [numberRows];
    10951101    for (int iRow = 0;iRow < numberRows; iRow++) {
    1096       sos[iRow]=0;
    1097       if (rhs[iRow]<0.0) {
    1098         sos[iRow]=1;
    1099         rhs[iRow]=1.0;
    1100       } else if (rhs[iRow] != rowUpper[iRow]) {
    1101         // G row
    1102         sos[iRow]=-1;
    1103       }
    1104       if( slackCost[iRow] == 1.0e30) {
    1105         slackCost[iRow]=0.0;
    1106       } else {
    1107         offset2 += slackCost[iRow];
    1108         sos[iRow] = 2;
     1102      if (sos[iRow]=='a') {
     1103        // row is possible
     1104        sos[iRow]=0;
     1105        if (rhs[iRow]<0.0) {
     1106          sos[iRow]=1;
     1107          rhs[iRow]=1.0;
     1108        } else if (rhs[iRow] != rowUpper[iRow]) {
     1109          // G row
     1110          sos[iRow]=-1;
     1111        }
     1112        if( slackCost[iRow] == 1.0e30) {
     1113          slackCost[iRow]=0.0;
     1114        } else {
     1115          offset2 += slackCost[iRow];
     1116          sos[iRow] = 2;
     1117        }
    11091118      }
    11101119    }
Note: See TracChangeset for help on using the changeset viewer.