Changeset 1128


Ignore:
Timestamp:
Jan 21, 2009 1:43:43 PM (11 years ago)
Author:
forrest
Message:

debug file always unpreprocessed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cbc/src/CbcSolver.cpp

    r1127 r1128  
    39303930        si->setIntegerPriority(1000);
    39313931        si->setBiLinearPriority(10000);
    3932         CoinModel * model2 = (CoinModel *) coinModel;
     3932        CoinModel * model2 = reinterpret_cast<CoinModel *> (coinModel);
    39333933        int logLevel = parameters_[whichParam(LOGLEVEL,numberParameters_,parameters_)].intValue();
    39343934        si->load(*model2,true,logLevel);
     
    39803980        int i;
    39813981        for (i=0;i<info.numberColumns;i++)
    3982           statusArray[i]=(char)info.columnStatus[i];
     3982          statusArray[i]= info.columnStatus[i];
    39833983        statusArray+=info.numberColumns;
    39843984        for (i=0;i<info.numberRows;i++)
    3985           statusArray[i]=(char)info.rowStatus[i];
     3985          statusArray[i]= info.rowStatus[i];
    39863986        CoinWarmStartBasis * basis = lpSolver->getBasis();
    39873987        solver->setWarmStart(basis);
     
    52665266                free(info.primalSolution);
    52675267                int numberColumns=model2->numberColumns();
    5268                 info.primalSolution = (double *) malloc(numberColumns*sizeof(double));
     5268                info.primalSolution = reinterpret_cast<double *> (malloc(numberColumns*sizeof(double)));
    52695269                CoinCopyN(model2->primalColumnSolution(),numberColumns,info.primalSolution);
    52705270                int numberRows = model2->numberRows();
    52715271                free(info.dualSolution);
    5272                 info.dualSolution = (double *) malloc(numberRows*sizeof(double));
     5272                info.dualSolution = reinterpret_cast<double *> (malloc(numberRows*sizeof(double)));
    52735273                CoinCopyN(model2->dualRowSolution(),numberRows,info.dualSolution);
    52745274                CoinWarmStartBasis * basis = model2->getBasis();
    52755275                free(info.rowStatus);
    5276                 info.rowStatus = (int *) malloc(numberRows*sizeof(int));
     5276                info.rowStatus = reinterpret_cast<int *> (malloc(numberRows*sizeof(int)));
    52775277                free(info.columnStatus);
    5278                 info.columnStatus = (int *) malloc(numberColumns*sizeof(int));
     5278                info.columnStatus = reinterpret_cast<int *> (malloc(numberColumns*sizeof(int)));
    52795279                // Put basis in
    52805280                int i;
     
    54615461                  free(info.primalSolution);
    54625462                  int numberColumns=lpSolver->numberColumns();
    5463                   info.primalSolution = (double *) malloc(numberColumns*sizeof(double));
     5463                  info.primalSolution = reinterpret_cast<double *> (malloc(numberColumns*sizeof(double)));
    54645464                  CoinCopyN(model_.bestSolution(),numberColumns,info.primalSolution);
    54655465                  int numberRows = lpSolver->numberRows();
    54665466                  free(info.dualSolution);
    5467                   info.dualSolution = (double *) malloc(numberRows*sizeof(double));
     5467                  info.dualSolution = reinterpret_cast<double *> (malloc(numberRows*sizeof(double)));
    54685468                  CoinZeroN(info.dualSolution,numberRows);
    54695469                  CoinWarmStartBasis * basis = lpSolver->getBasis();
    54705470                  free(info.rowStatus);
    5471                   info.rowStatus = (int *) malloc(numberRows*sizeof(int));
     5471                  info.rowStatus = reinterpret_cast<int *> (malloc(numberRows*sizeof(int)));
    54725472                  free(info.columnStatus);
    5473                   info.columnStatus = (int *) malloc(numberColumns*sizeof(int));
     5473                  info.columnStatus = reinterpret_cast<int *> (malloc(numberColumns*sizeof(int)));
    54745474                  // Put basis in
    54755475                  int i;
     
    66196619                changed=analyze( osiclp,numberChanged,increment,false,generalMessageHandler);
    66206620              if (debugValues) {
    6621                 if (numberDebugValues==babModel_->getNumCols()) {
     6621                int numberColumns = babModel_->solver()->getNumCols();
     6622                if (numberDebugValues==numberColumns) {
    66226623                  // for debug
    66236624                  babModel_->solver()->activateRowCutDebugger(debugValues) ;
    6624                 } else {
    6625                   printf("debug file has incorrect number of columns\n");
     6625                } else {
     6626                  int numberOriginalColumns =
     6627                    process.originalModel()->getNumCols();
     6628                  if (numberDebugValues<=numberOriginalColumns) {
     6629                    const int * originalColumns = process.originalColumns();
     6630                    double * newValues = new double [numberColumns];
     6631                    // in case preprocess added columns!
     6632                    // need to find values
     6633                    OsiSolverInterface * siCopy =
     6634                      babModel_->solver()->clone();
     6635                    for (int i=0;i<numberColumns;i++) {
     6636                      int jColumn = originalColumns[i];
     6637                      if (jColumn<numberDebugValues&&
     6638                          siCopy->isInteger(i)) {
     6639                        // integer variable
     6640                        double soln=floor(debugValues[jColumn]+0.5);
     6641                        // Set bounds to fix variable to its solution     
     6642                        siCopy->setColUpper(i,soln);
     6643                        siCopy->setColLower(i,soln);
     6644                      }
     6645                    }
     6646                    // All integers have been fixed at optimal value.
     6647                    // Now solve to get continuous values
     6648                    siCopy->setHintParam(OsiDoScale,false);
     6649                    siCopy->initialSolve();
     6650                    if (siCopy->isProvenOptimal()) {
     6651                      memcpy(newValues,siCopy->getColSolution(),
     6652                             numberColumns*sizeof(double));
     6653                    } else {
     6654                      printf("BAD debug file\n");
     6655                    }
     6656                    delete siCopy;
     6657                    // for debug
     6658                    babModel_->solver()->activateRowCutDebugger(newValues) ;
     6659                    delete [] newValues;
     6660                  } else {
     6661                    printf("debug file has incorrect number of columns\n");
     6662                  }
    66266663                }
    66276664              }
Note: See TracChangeset for help on using the changeset viewer.