Changeset 199 for trunk


Ignore:
Timestamp:
Oct 21, 2005 5:33:03 PM (14 years ago)
Author:
forrest
Message:

more stuff

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Test/CoinSolve.cpp

    r197 r199  
    304304    std::string debugFile="";
    305305    double * debugValues = NULL;
     306    int numberDebugValues = -1;
    306307    int basisHasValues=0;
    307308    std::string exportBasisFile ="default.bas";
     
    309310    std::string restoreFile ="default.prob";
    310311    std::string solutionFile ="stdout";
     312    std::string solutionSaveFile ="solution.file";
    311313#define CBCMAXPARAMETERS 200
    312314    CbcOrClpParam parameters[CBCMAXPARAMETERS];
     
    338340    parameters[whichParam(TIMELIMIT_BAB,numberParameters,parameters)].setDoubleValue(1.0e8);
    339341    parameters[whichParam(SOLUTION,numberParameters,parameters)].setStringValue(solutionFile);
     342    parameters[whichParam(SAVESOL,numberParameters,parameters)].setStringValue(solutionSaveFile);
    340343    parameters[whichParam(SPRINT,numberParameters,parameters)].setIntValue(doSprint);
    341344    model.setNumberBeforeTrust(5);
    342345    parameters[whichParam(NUMBERBEFORE,numberParameters,parameters)].setIntValue(5);
    343346    parameters[whichParam(MAXNODES,numberParameters,parameters)].setIntValue(model.getMaximumNodes());
     347    model.setNumberStrong(10);
    344348    parameters[whichParam(STRONGBRANCHING,numberParameters,parameters)].setIntValue(model.numberStrong());
    345349    parameters[whichParam(INFEASIBILITYWEIGHT,numberParameters,parameters)].setDoubleValue(model.getDblParam(CbcModel::CbcInfeasibilityWeight));
     
    11131117              OsiSolverInterface * solver3 = clpSolver->clone();
    11141118              babModel->assignSolver(solver3);
    1115               clpSolver = dynamic_cast< OsiClpSolverInterface*> (babModel->solver());
     1119              OsiClpSolverInterface * clpSolver2 = dynamic_cast< OsiClpSolverInterface*> (babModel->solver());
    11161120              int numberChanged=0;
    1117               int * changed = analyze( clpSolver,numberChanged);
    1118               if (clpSolver->messageHandler()->logLevel())
    1119                 clpSolver->messageHandler()->setLogLevel(1);
     1121              int * changed = analyze( clpSolver2,numberChanged);
     1122              if (clpSolver2->messageHandler()->logLevel())
     1123                clpSolver2->messageHandler()->setLogLevel(1);
    11201124              int logLevel = parameters[slog].intValue();
    11211125              if (logLevel)
    1122                 clpSolver->messageHandler()->setLogLevel(logLevel);
    1123               lpSolver = clpSolver->getModelPtr();
     1126                clpSolver2->messageHandler()->setLogLevel(logLevel);
     1127              lpSolver = clpSolver2->getModelPtr();
    11241128              if (lpSolver->factorizationFrequency()==200) {
    11251129                // User did not touch preset
     
    11491153                /* Do not try and produce equality cliques and
    11501154                   do up to 10 passes */
    1151                 OsiSolverInterface * solver2 = process.preProcess(*saveSolver,true,10);
     1155                OsiSolverInterface * solver2 = process.preProcess(*saveSolver,false,10);
    11521156                if (!solver2) {
    11531157                  printf("Pre-processing says infeasible\n");
     
    11591163                //solver2->resolve();
    11601164                if (preProcess==2) {
    1161                   OsiClpSolverInterface * clpSolver = dynamic_cast< OsiClpSolverInterface*> (solver2);
    1162                   ClpSimplex * lpSolver = clpSolver->getModelPtr();
     1165                  OsiClpSolverInterface * clpSolver2 = dynamic_cast< OsiClpSolverInterface*> (solver2);
     1166                  ClpSimplex * lpSolver = clpSolver2->getModelPtr();
    11631167                  lpSolver->writeMps("presolved.mps",0,1,lpSolver->optimizationDirection());
    11641168                  printf("Preprocessed model (minimization) on presolved.mps\n");
     
    11811185              }
    11821186              if (debugValues) {
    1183                 // for debug
    1184                 babModel->solver()->activateRowCutDebugger(debugValues) ;
     1187                if (numberDebugValues==babModel->getNumCols()) {
     1188                  // for debug
     1189                  babModel->solver()->activateRowCutDebugger(debugValues) ;
     1190                } else {
     1191                  printf("debug file has incorrect number of columns\n");
     1192                }
    11851193              }
    11861194              // FPump done first as it only works if no solution
     
    12991307              babModel->branchAndBound();
    13001308              currentBranchModel = NULL;
     1309              osiclp = dynamic_cast< OsiClpSolverInterface*> (babModel->solver());
    13011310              if (debugFile=="createAfterPre"&&babModel->bestSolution()) {
    1302                 FILE * fp = fopen("debug.file","wb");
    1303                 assert (fp);
    1304                 int n = babModel->getNumCols();
    1305                 fwrite(babModel->bestSolution(),sizeof(double),n,fp);
    1306                 fclose(fp);
     1311                lpSolver = osiclp->getModelPtr();
     1312                //move best solution (should be there -- but ..)
     1313                int n = lpSolver->getNumCols();
     1314                memcpy(lpSolver->primalColumnSolution(),babModel->bestSolution(),n*sizeof(double));
     1315                saveSolution(osiclp->getModelPtr(),"debug.file");
    13071316              }
    13081317              // Print more statistics
     
    13311340                }
    13321341              }
     1342              // clpSolver still OK clpSolver = dynamic_cast< OsiClpSolverInterface*> (babModel->solver());
     1343              lpSolver = clpSolver->getModelPtr();
     1344              if (babModel->bestSolution()){
     1345                //move best solution (should be there -- but ..)
     1346                int n = lpSolver->getNumCols();
     1347                memcpy(lpSolver->primalColumnSolution(),babModel->bestSolution(),n*sizeof(double));
     1348              }
    13331349              if (debugFile=="create"&&babModel->bestSolution()) {
    1334                 FILE * fp = fopen("debug.file","wb");
    1335                 assert (fp);
    1336                 int n = babModel->getNumCols();
    1337                 fwrite(babModel->bestSolution(),sizeof(double),n,fp);
    1338                 fclose(fp);
     1350                saveSolution(lpSolver,"debug.file");
    13391351              }
    1340               clpSolver = dynamic_cast< OsiClpSolverInterface*> (babModel->solver());
    13411352              if (numberChanged) {
    13421353                for (int i=0;i<numberChanged;i++) {
     
    13461357                delete [] changed;
    13471358              }
    1348               lpSolver = clpSolver->getModelPtr();
    13491359              std::string statusName[]={"Finished","Stopped on ","Difficulties",
    13501360                                        "","","User ctrl-c"};
     
    13581368                " iterations - took "<<time2-time1<<" seconds"<<std::endl;
    13591369              time1 = time2;
     1370              delete babModel;
     1371              babModel=NULL;
    13601372            } else {
    13611373              std::cout << "** Current model not valid" << std::endl ;
     
    17001712              if (fp) {
    17011713                // can open - lets go for it
    1702                 int numColumns = lpSolver->getNumCols();
    1703                 debugValues = new double[numColumns];
    1704                 int n=fread(debugValues,sizeof(double),numColumns,fp);
    1705                 printf("%d doubles read into debugValues\n",n);
     1714                int numRows;
     1715                double obj;
     1716                fread(&numRows,sizeof(int),1,fp);
     1717                fread(&numberDebugValues,sizeof(int),1,fp);
     1718                fread(&obj,sizeof(double),1,fp);
     1719                debugValues = new double[numberDebugValues+numRows];
     1720                fread(debugValues,sizeof(double),numRows,fp);
     1721                fread(debugValues,sizeof(double),numRows,fp);
     1722                fread(debugValues,sizeof(double),numberDebugValues,fp);
     1723                printf("%d doubles read into debugValues\n",numberDebugValues);
    17061724                fclose(fp);
    17071725              } else {
     
    22112229            }
    22122230            break;
     2231          case SAVESOL:
     2232            if (goodModel) {
     2233              // get next field
     2234              field = CoinReadGetString(argc,argv);
     2235              if (field=="$") {
     2236                field = parameters[iParam].stringValue();
     2237              } else if (field=="EOL") {
     2238                parameters[iParam].printString();
     2239                break;
     2240              } else {
     2241                parameters[iParam].setStringValue(field);
     2242              }
     2243              std::string fileName;
     2244              if (field[0]=='/'||field[0]=='\\') {
     2245                fileName = field;
     2246              } else if (field[0]=='~') {
     2247                char * environ = getenv("HOME");
     2248                if (environ) {
     2249                  std::string home(environ);
     2250                  field=field.erase(0,1);
     2251                  fileName = home+field;
     2252                } else {
     2253                  fileName=field;
     2254                }
     2255              } else {
     2256                fileName = directory+field;
     2257              }
     2258              saveSolution(lpSolver,fileName);
     2259            } else {
     2260              std::cout<<"** Current model not valid"<<std::endl;
     2261             
     2262            }
     2263            break;
    22132264          default:
    22142265            abort();
Note: See TracChangeset for help on using the changeset viewer.