Changeset 1005 for stable


Ignore:
Timestamp:
Jul 15, 2008 5:24:25 PM (11 years ago)
Author:
forrest
Message:

improve hot start

File:
1 edited

Legend:

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

    r968 r1005  
    62866286                const int * originalColumns = preProcess ? process.originalColumns() : NULL;
    62876287                if (solutionIn&&useSolution>=0) {
     6288                  if (!prioritiesIn) {
     6289                    int n;
     6290                    if (preProcess) {
     6291                      int numberColumns = babModel_->getNumCols();
     6292                      // extend arrays in case SOS
     6293                      n = originalColumns[numberColumns-1]+1;
     6294                    } else {
     6295                      n = babModel_->getNumCols();
     6296                    }
     6297                    prioritiesIn = new int[n];
     6298                    for (int i=0;i<n;i++)
     6299                      prioritiesIn[i]=100;
     6300                  }
    62886301                  if (preProcess) {
    62896302                    int numberColumns = babModel_->getNumCols();
     
    63116324                        prioritiesIn2[i]=prioritiesIn2[iColumn];
    63126325                    }
    6313                     babModel_->setHotstartSolution(solutionIn2,prioritiesIn2);
     6326                    if (useSolution)
     6327                      babModel_->setHotstartSolution(solutionIn2,prioritiesIn2);
     6328                    else
     6329                      babModel_->setBestSolution(solutionIn2,numberColumns,
     6330                                                 COIN_DBL_MAX,true);
    63146331                    delete [] solutionIn2;
    63156332                    delete [] prioritiesIn2;
    63166333                  } else {
    6317                     babModel_->setHotstartSolution(solutionIn,prioritiesIn);
     6334                    if (useSolution)
     6335                      babModel_->setHotstartSolution(solutionIn,prioritiesIn);
     6336                    else
     6337                      babModel_->setBestSolution(solutionIn,babModel_->getNumCols(),
     6338                                                 COIN_DBL_MAX,true);
    63186339                  }
    63196340                }
     
    72097230                }
    72107231#endif
    7211                 if (useSolution>0) {
     7232                if (useSolution>1) {
    72127233                  // use hotstart to try and find solution
    72137234                  CbcHeuristicPartial partial(*babModel_,10000,useSolution);
     
    92079228                  delete [] newMasks;
    92089229                }
    9209                 if (printMode>2) {
     9230                if (printMode>2&&printMode<5) {
    92109231                  for (iRow=0;iRow<numberRows;iRow++) {
    92119232                    int type=printMode-3;
     
    92399260                double * columnUpper = lpSolver->columnUpper();
    92409261                if (printMode!=2) {
     9262                  if (printMode==5) {
     9263                    if (lengthName)
     9264                      fprintf(fp,"name");
     9265                    else
     9266                      fprintf(fp,"number");
     9267                    fprintf(fp,",solution\n");
     9268                  }
    92419269                  for (iColumn=0;iColumn<numberColumns;iColumn++) {
    92429270                    int type=(printMode>3) ? 1 :0;
     
    92589286                      type =0;
    92599287                    if (type) {
    9260                       fprintf(fp,"%7d ",iColumn);
    9261                       if (lengthName)
    9262                         fprintf(fp,format,columnNames[iColumn].c_str());
    9263                       fprintf(fp,"%15.8g        %15.8g\n",
    9264                               primalColumnSolution[iColumn],
    9265                               dualColumnSolution[iColumn]);
     9288                      if (printMode!=5) {
     9289                        fprintf(fp,"%7d ",iColumn);
     9290                        if (lengthName)
     9291                          fprintf(fp,format,columnNames[iColumn].c_str());
     9292                        fprintf(fp,"%15.8g        %15.8g\n",
     9293                                primalColumnSolution[iColumn],
     9294                                dualColumnSolution[iColumn]);
     9295                      } else {
     9296                        char temp[100];
     9297                        if (lengthName)
     9298                          sprintf(temp,format,columnNames[iColumn].c_str());
     9299                        else
     9300                          sprintf(temp,"%7d ",iColumn);
     9301                        sprintf(temp+strlen(temp),",%15.8g",
     9302                                primalColumnSolution[iColumn]);
     9303                        int n=strlen(temp);
     9304                        int k=0;
     9305                        for (int i=0;i<n+1;i++) {
     9306                          if (temp[i]!=' ')
     9307                            temp[k++]=temp[i];
     9308                        }
     9309                        fprintf(fp,"%s\n",temp);
     9310                      }
    92669311                    }
    92679312                  }
Note: See TracChangeset for help on using the changeset viewer.