Changeset 588


Ignore:
Timestamp:
May 31, 2011 4:53:55 AM (9 years ago)
Author:
fmargot
Message:

Fix bug in selection of strong branching when requesting non-full strong-branching; add END_OF_HEADER in output file fres.xxx

Location:
trunk/Couenne/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Couenne/src/branch/CouenneChooseStrong.cpp

    r586 r588  
    12521252        }
    12531253        if(card_vPriority > 0) {
    1254           numberOnList_ = card_vPriority;
     1254          numberOnList_ = (card_vPriority < maximumStrong ? card_vPriority : maximumStrong);
    12551255          bool alwaysSort = false;
    12561256          if(alwaysSort) {
     
    13001300          }
    13011301        }
     1302
     1303#ifdef FM_CHECK
     1304        // priority of last selected object
     1305        double ckPrio = (card_vPriority < numberUnsatisfied_ ?
     1306                         vPriority[card_vPriority] : 100000);
     1307        double ckUse = (card_vPriority < numberUnsatisfied_ ?
     1308                      useful_[card_vPriority] : 100000);
     1309        for(i=0; i<card_vPriority; i++) {
     1310          int indObj = list_[i];
     1311          if(object[indObj]->priority() > ckPrio + 1e-3) {
     1312            printf("CouenneChooseStrong::gutsOfSetupList(): ### ERROR: object[%d]->priority(): %d  > ckPrio: %d\n",
     1313                   indObj, object[indObj]->priority(), ckPrio);
     1314            exit(1);
     1315          }
     1316          if(fabs(object[indObj]->priority() - ckPrio) < 1e-3) {
     1317            if(useful_[i] > ckUse + 1e-3) {
     1318              printf("CouenneChooseStrong::gutsOfSetupList(): ### ERROR: object[%d]->useful: %f  > ckUse: %d\n",
     1319                   indObj, useful_[i], ckUse);
     1320              exit(1);
     1321            }
     1322          }
     1323        }
     1324        for(i=card_vPriority; i<numberUnsatisfied_; i++) {
     1325          int indObj = list_[i];
     1326          if(object[indObj]->priority() < ckPrio - 1e-3) {
     1327            printf("CouenneChooseStrong::gutsOfSetupList(): ### ERROR: object[%d]->priority(): %d  < ckPrio: %d\n",
     1328                   indObj, object[indObj]->priority(), ckPrio);
     1329            exit(1);
     1330          }
     1331          if(fabs(object[indObj]->priority() - ckPrio) < 1e-3) {
     1332            if(useful_[i] < ckUse - 1e-3) {
     1333              printf("CouenneChooseStrong::gutsOfSetupList(): ### ERROR: object[%d]->useful: %f  < ckUse: %d\n",
     1334                   indObj, useful_[i], ckUse);
     1335              exit(1);
     1336            }
     1337          }
     1338        }
     1339#endif
     1340       
     1341
    13021342      }
    13031343      else {
     
    14161456      }
    14171457    }
    1418     return numberUnsatisfied_;
     1458    // return -1 if infeasible to differentiate with numberOnList_==0
     1459    // when feasible
     1460    if(numberUnsatisfied_ == -1) {
     1461      return(-1);
     1462    }
     1463    return numberOnList_;
    14191464  }
    14201465
  • trunk/Couenne/src/main/BonCouenne.cpp

    r587 r588  
    304304#ifdef FM_FRES
    305305    if(cp != NULL) {
    306       FILE *f_res = fopen("fres.xxx", "a");
     306      FILE *f_res = NULL;
     307      f_res = fopen("fres.xxx", "r");
     308      if(f_res == NULL) {
     309        f_res = fopen("fres.xxx", "w");
     310        fprintf(f_res, "END_OF_HEADER\n");
     311      }
     312      else {
     313        fclose(f_res);
     314        f_res = fopen("fres.xxx", "a");
     315      }
    307316      char *pbName, shortName[256]; 
    308317     
Note: See TracChangeset for help on using the changeset viewer.