Changeset 277 for trunk/Test/CbcMain.cpp


Ignore:
Timestamp:
Mar 16, 2006 2:18:04 PM (14 years ago)
Author:
lou
Message:

Revise cbc build process for better control of solvers included in build
(COIN_USE_XXX -> CBC_USE_XXX). Add CbcEventHandler? for independence from
clp.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Test/CbcMain.cpp

    r246 r277  
    4444#include  "CbcParam.hpp"
    4545
    46 #ifdef COIN_USE_CLP
     46#ifdef CBC_USE_CLP
    4747#include "OsiClpSolverInterface.hpp"
    4848#endif
    49 #ifdef COIN_USE_DYLP
     49#ifdef CBC_USE_DYLP
    5050#include "OsiDylpSolverInterface.hpp"
    5151#endif
    52 #ifdef COIN_USE_OSL
     52#ifdef CBC_USE_OSL
    5353#include "OsiOslSolverInterface.hpp"
    5454#endif
     
    560560}       /* end unnamed namespace */
    561561
     562int CbcOrClpRead_mode=1;
     563FILE * CbcOrClpReadCommand=stdin;
    562564
    563565int main (int argc, const char *argv[])
     
    584586    solverMap_t solvers ;
    585587
    586 #   ifdef COIN_USE_CLP
     588#   ifdef CBC_USE_CLP
    587589#     ifndef CBC_DEFAULT_SOLVER
    588590#       define CBC_DEFAULT_SOLVER "clp"
     
    592594      solvers["clp"] = 0 ;
    593595#   endif
    594 #   ifdef COIN_USE_DYLP
     596#   ifdef CBC_USE_DYLP
    595597#     ifndef CBC_DEFAULT_SOLVER
    596598#       define CBC_DEFAULT_SOLVER "dylp"
     
    600602      solvers["dylp"] = 0 ;
    601603#   endif
    602 #   ifdef COIN_USE_OSL
     604#   ifdef CBC_USE_OSL
    603605#     ifndef CBC_DEFAULT_SOLVER
    604606#       define CBC_DEFAULT_SOLVER "osl"
     
    10171019              if (!doScaling)
    10181020                solver->setHintParam(OsiDoScale,false,OsiHintTry);
    1019 #ifdef COIN_USE_CLP
     1021#ifdef CBC_USE_CLP
    10201022              OsiClpSolverInterface * si =
    10211023                dynamic_cast<OsiClpSolverInterface *>(solver) ;
     
    10851087                      model2->solver()->setHintParam(OsiDoDualInResolve,false,OsiHintTry);
    10861088                    }
    1087                     model2->branchAndBound();
     1089                    try
     1090                    { model2->branchAndBound(); }
     1091                    catch (CoinError err)
     1092                    { std::cerr << "Exception: "
     1093                                << err.className() << "::" << err.methodName()
     1094                                << std::endl ;
     1095                      std::cerr << err.message() << std::endl ;
     1096                      exit (1) ; }
    10881097                    // get back solution
    10891098                    model->originalModel(model2,false);
     
    11411150                else if (twomirAction==2)
    11421151                  model->addCutGenerator(&twomirGen,-99,"TwoMirCuts");
    1143                 model->branchAndBound() ; }
     1152                try
     1153                { model->branchAndBound(); }
     1154                catch (CoinError err)
     1155                { std::cerr << "Exception: "
     1156                            << err.className() << "::" << err.methodName()
     1157                            << std::endl ;
     1158                  std::cerr << err.message() << std::endl ;
     1159                  exit (1) ; }
     1160              }
    11441161              if (model->bestSolution())
    11451162              { std::cout << "Optimal solution "
     
    11551172              time1 = time2 ;
    11561173            } else {
    1157               // User is going to get what I think best
     1174/*
     1175  User is willing to accept cbc defaults. Do an initial solve.
     1176*/
    11581177              if (!doScaling)
    11591178                model->solver()->setHintParam(OsiDoScale,false,OsiHintTry);
    11601179              model->initialSolve();
    1161               // See if we want preprocessing
     1180/*
     1181  Integer preprocessing. For reasons that escape me just yet, the first thing
     1182  we'll do is clone the solver for the model.
     1183*/
    11621184              OsiSolverInterface * saveSolver=NULL;
    11631185              CglPreProcess process;
     
    12471269             
    12481270              model->solver()->setIntParam(OsiMaxNumIterationHotStart,100);
    1249 #ifdef COIN_USE_CLP
     1271#ifdef CBC_USE_CLP
    12501272              OsiClpSolverInterface * osiclp = dynamic_cast< OsiClpSolverInterface*> (model->solver());
    1251               // go faster stripes
    1252               if (osiclp->getNumRows()<300&&osiclp->getNumCols()<500) {
    1253                 osiclp->setupForRepeatedUse(2,0);
     1273# ifndef CBC_ONLY_CLP
     1274              if (osiclp) {
     1275# endif
     1276                // go faster stripes
     1277                if (osiclp->getNumRows()<300&&osiclp->getNumCols()<500) {
     1278                  osiclp->setupForRepeatedUse(2,0);
     1279                }
     1280# ifndef CBC_ONLY_CLP
    12541281              }
     1282# endif
    12551283#endif
    12561284              if (gapRatio < 1.0e100)
     
    12611289                          << ", so allowable gap set to "
    12621290                          << value2 << std::endl ; }
    1263               model->branchAndBound();
     1291              try
     1292              { model->branchAndBound(); }
     1293              catch (CoinError err)
     1294              { std::cerr << "Exception: "
     1295                          << err.className() << "::" << err.methodName()
     1296                          << std::endl ;
     1297                std::cerr << err.message() << std::endl ;
     1298                exit (1) ; }
    12641299              time2 = CoinCpuTime();
    12651300              totalTime += time2-time1;
     
    13961431                                                   "");
    13971432              assert(!status);
    1398               model->branchAndBound();
     1433              try
     1434              { model->branchAndBound(); }
     1435              catch (CoinError err)
     1436              { std::cerr << "Exception: "
     1437                          << err.className() << "::" << err.methodName()
     1438                          << std::endl ;
     1439                std::cerr << err.message() << std::endl ;
     1440                exit (1) ; }
    13991441              model->solver()->resolve();
    14001442              std::cout<<"Optimal solution "<<model->solver()->getObjValue()<<std::endl;
     
    14141456              model->setNodeComparison(compare);
    14151457              model->solver()->resolve();
    1416               model->branchAndBound();
     1458              try
     1459              { model->branchAndBound(); }
     1460              catch (CoinError err)
     1461              { std::cerr << "Exception: "
     1462                          << err.className() << "::" << err.methodName()
     1463                          << std::endl ;
     1464                std::cerr << err.message() << std::endl ;
     1465                exit (1) ; }
    14171466              model->solver()->resolve();
    14181467              std::cout<<"partial solution "<<model->solver()->getObjValue()<<std::endl;
Note: See TracChangeset for help on using the changeset viewer.