Ignore:
Timestamp:
Dec 20, 2007 7:20:12 AM (13 years ago)
Author:
forrest
Message:

make useSolution work better

File:
1 edited

Legend:

Unmodified
Added
Removed
  • stable/2.0/Cbc/src/CbcSolver.cpp

    r823 r844  
    37813781    int useCosts=0;
    37823782    // don't use input solution
    3783     int useSolution=0;
     3783    int useSolution=-1;
    37843784   
    37853785    // total number of commands read
     
    41164116              else if (parameters_[iParam].type()==PROCESSTUNE)
    41174117                tunePreProcess = value;
     4118              else if (parameters_[iParam].type()==USESOLUTION)
     4119                useSolution = value;
    41184120              else if (parameters_[iParam].type()==VERBOSE)
    41194121                verbose = value;
     
    43744376              preProcess = action;
    43754377              break;
    4376             case USESOLUTION:
    4377               useSolution = action;
    4378               break;
    43794378            default:
    43804379              abort();
     
    59755974#endif               
    59765975                const int * originalColumns = preProcess ? process.originalColumns() : NULL;
    5977                 if (solutionIn&&useSolution) {
     5976                if (solutionIn&&useSolution>=0) {
    59785977                  if (preProcess) {
    59795978                    int numberColumns = babModel_->getNumCols();
     
    68646863                  return returnCode;
    68656864                }
     6865                if (useSolution>0) {
     6866                  // use hotstart to try and find solution
     6867                  CbcHeuristicPartial partial(*babModel_,10000,useSolution);
     6868                  partial.setHeuristicName("Partial solution given");
     6869                  babModel_->addHeuristic(&partial);
     6870                }
    68666871                babModel_->branchAndBound(statistics);
    68676872#ifdef NEW_STYLE_SOLVER
     
    77657770                  if (got[0]>=0&&!lpSolver->lengthNames())
    77667771                    good=false;
     7772                  int numberFields=99;
     7773                  if (good&&(strstr(fileName.c_str(),".mst")||strstr(fileName.c_str(),".MST"))) {
     7774                    numberFields=0;
     7775                    for (i=2;i<(int) (sizeof(got)/sizeof(int));i++) {
     7776                      if (got[i]>=0)
     7777                        numberFields++;
     7778                    }
     7779                    if (!numberFields) {
     7780                      // Like Cplex format
     7781                      order[nAcross]=6;
     7782                      got[6]=nAcross++;
     7783                    }
     7784                  }
    77677785                  if (good) {
    77687786                    char ** columnNames = new char * [numberColumns];
     
    77787796                    if (got[6]>=0) {
    77797797                      solutionIn = (double *) malloc(numberColumns*sizeof(double));
    7780                       CoinZeroN(solutionIn,numberColumns);
     7798                      for (iColumn=0;iColumn<numberColumns;iColumn++)
     7799                        solutionIn[iColumn]=-COIN_DBL_MAX;
    77817800                    }
    7782                     if (got[7]>=0) {
     7801                    if (got[7]>=0||!numberFields) {
    77837802                      prioritiesIn = (int *) malloc(numberColumns*sizeof(int));
    77847803                      for (iColumn=0;iColumn<numberColumns;iColumn++)
     
    78007819                    int nLine=0;
    78017820                    while (fgets(line,1000,fp)) {
     7821                      if (!strncmp(line,"ENDATA",6))
     7822                        break;
    78027823                      nLine++;
    78037824                      iColumn = -1;
     
    78107831                      char * pos = line;
    78117832                      char * put = line;
     7833                      if (!numberFields) {
     7834                        // put in ,
     7835                        for (i=4;i<100;i++) {
     7836                          if (line[i]==' '||line[i]=='\t') {
     7837                            line[i]=',';
     7838                            break;
     7839                          }
     7840                        }
     7841                      }
    78127842                      while (*pos>=' '&&*pos!='\n') {
    78137843                        if (*pos!=' '&&*pos!='\t') {
Note: See TracChangeset for help on using the changeset viewer.