# CbcSolver.hpp

Go to the documentation of this file.

    00001 /* $Id: CbcSolver.hpp 1212 2009-08-21 16:19:13Z forrest $ */
    00002 // Copyright (C) 2007, International Business Machines
    00003 // Corporation and others.  All Rights Reserved.
    00004 // This code is licensed under the terms of the Eclipse Public License (EPL).
    00005
    00006
    00018 #ifndef CbcSolver_H
    00019 #define CbcSolver_H
    00020
    00021 #include <string>
    00022 #include <vector>
    00023 #include "CoinMessageHandler.hpp"
    00024 #include "OsiClpSolverInterface.hpp"
    00025
    00026 #if CBC_OTHER_SOLVER==1
    00027 #include "OsiCpxSolverInterface.hpp"
    00028 #endif
    00029
    00030 #include "CbcModel.hpp"
    00031 #include "CbcOrClpParam.hpp"
    00032
    00033 class CbcUser;
    00034 class CbcStopNow;
    00035 class CglCutGenerator;
    00036
    00037 //#############################################################################
    00038
    00056 class CbcSolver {
    00057
    00058 public:
    00060
    00061
    00067     int solve(int argc, const char * argv[], int returnMode);
    00074     int solve(const char * input, int returnMode);
    00076
    00077
    00078
    00079     CbcSolver();
    00080
    00082     CbcSolver(const OsiClpSolverInterface &);
    00083
    00085     CbcSolver(const CbcModel &);
    00086
    00089     CbcSolver(const CbcSolver & rhs);
    00090
    00092     CbcSolver & operator=(const CbcSolver& rhs);
    00093
    00095     ~CbcSolver ();
    00097     void fillParameters();
    00104     void fillValuesInSolver();
    00106     void addUserFunction(CbcUser * function);
    00108     void setUserCallBack(CbcStopNow * function);
    00110     void addCutGenerator(CglCutGenerator * generator);
    00112
    00113
    00114     // analyze model
    00115     int * analyze(OsiClpSolverInterface * solverMod, int & numberChanged, double & increment,
    00116                   bool changeInt,  CoinMessageHandler * generalMessageHandler);
    00122     //int doHeuristics(CbcModel * model, int type);
    00129     void updateModel(ClpSimplex * model2, int returnMode);
    00131
    00132
    00133
    00134     int intValue(CbcOrClpParameterType type) const;
    00136     void setIntValue(CbcOrClpParameterType type, int value);
    00138     double doubleValue(CbcOrClpParameterType type) const;
    00140     void setDoubleValue(CbcOrClpParameterType type, double value);
    00142     CbcUser * userFunction(const char * name) const;
    00144     inline CbcModel * model() {
    00145         return &model_;
    00146     }
    00148     inline CbcModel * babModel() {
    00149         return babModel_;
    00150     }
    00152     inline int numberUserFunctions() const {
    00153         return numberUserFunctions_;
    00154     }
    00156     inline CbcUser ** userFunctionArray() const {
    00157         return userFunction_;
    00158     }
    00160     inline OsiClpSolverInterface * originalSolver() const {
    00161         return originalSolver_;
    00162     }
    00164     inline CoinModel * originalCoinModel() const {
    00165         return originalCoinModel_;
    00166     }
    00168     void setOriginalSolver(OsiClpSolverInterface * originalSolver);
    00170     void setOriginalCoinModel(CoinModel * originalCoinModel);
    00172     inline int numberCutGenerators() const {
    00173         return numberCutGenerators_;
    00174     }
    00176     inline CglCutGenerator ** cutGeneratorArray() const {
    00177         return cutGenerator_;
    00178     }
    00180     inline double startTime() const {
    00181         return startTime_;
    00182     }
    00184     inline void setPrinting(bool onOff) {
    00185         noPrinting_ = !onOff;
    00186     }
    00188     inline void setReadMode(int value) {
    00189         readMode_ = value;
    00190     }
    00192 private:
    00194
    00195
    00197     CbcModel model_;
    00198
    00200     CbcModel * babModel_;
    00201
    00203     CbcUser ** userFunction_;
    00210     int * statusUserFunction_;
    00212     OsiClpSolverInterface * originalSolver_;
    00214     CoinModel * originalCoinModel_;
    00216     CglCutGenerator ** cutGenerator_;
    00218     int numberUserFunctions_;
    00220     int numberCutGenerators_;
    00222     CbcStopNow * callBack_;
    00224     double startTime_;
    00226     CbcOrClpParam * parameters_;
    00228     int numberParameters_ ;
    00230     bool doMiplib_;
    00232     bool noPrinting_;
    00234     int readMode_;
    00236 };
    00237 //#############################################################################
    00238
    00240 typedef struct {
    00241     // Priorities
    00242     int * priorities_;
    00243     // SOS priorities
    00244     int * sosPriority_;
    00245     // Direction to branch first
    00246     int * branchDirection_;
    00247     // Input solution
    00248     double * primalSolution_;
    00249     // Down pseudo costs
    00250     double * pseudoDown_;
    00251     // Up pseudo costs
    00252     double * pseudoUp_;
    00253 } CbcSolverUsefulData;
    00254
    00255
    00260 class CbcUser {
    00261
    00262 public:
    00264
    00265
    00272     virtual int importData(CbcSolver * /*model*/, int & /*argc*/, char ** /*argv[]*/) {
    00273         return -1;
    00274     }
    00275
    00283     virtual void exportSolution(CbcSolver * /*model*/,
    00284                                 int /*mode*/, const char * /*message*/ = NULL) {}
    00285
    00287     virtual void exportData(CbcSolver * /*model*/) {}
    00288
    00290     virtual void fillInformation(CbcSolver * /*model*/,
    00291                                  CbcSolverUsefulData & /*info*/) {}
    00293
    00295
    00296
    00297     inline CoinModel *coinModel() const {
    00298         return coinModel_;
    00299     }
    00301     virtual void * stuff() {
    00302         return NULL;
    00303     }
    00305     inline std::string name() const {
    00306         return userName_;
    00307     }
    00309     virtual void solve(CbcSolver * model, const char * options) = 0;
    00311     virtual bool canDo(const char * options) = 0;
    00313
    00315
    00316
    00317     CbcUser();
    00318
    00320     CbcUser(const CbcUser & rhs);
    00321
    00323     CbcUser & operator=(const CbcUser& rhs);
    00324
    00326     virtual CbcUser * clone() const = 0;
    00327
    00329     virtual ~CbcUser ();
    00331
    00332 protected:
    00334
    00335
    00337     CoinModel * coinModel_;
    00338
    00340     std::string userName_;
    00341
    00343 };
    00344 //#############################################################################
    00345
    00351 class CbcStopNow {
    00352
    00353 public:
    00355
    00356
    00369     virtual int callBack(CbcModel * /*currentSolver*/, int /*whereFrom*/) {
    00370         return 0;
    00371     }
    00373
    00375
    00376
    00377     CbcStopNow();
    00378
    00381     CbcStopNow(const CbcStopNow & rhs);
    00382
    00384     CbcStopNow & operator=(const CbcStopNow& rhs);
    00385
    00387     virtual CbcStopNow * clone() const;
    00388
    00390     virtual ~CbcStopNow ();
    00392
    00393 private:
    00395
    00396
    00397 };
    00398 #endif
    00399

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines