/home/coin/SVN-release/CoinAll-1.1.0/Blis/src/BlisHeuristic.h

Go to the documentation of this file.
00001 /*===========================================================================*
00002  * This file is part of the BiCePS Linear Integer Solver (BLIS).             *
00003  *                                                                           *
00004  * BLIS is distributed under the Common Public License as part of the        *
00005  * COIN-OR repository (http://www.coin-or.org).                              *
00006  *                                                                           *
00007  * Authors:                                                                  *
00008  *                                                                           *
00009  *          Yan Xu, Lehigh University                                        *
00010  *          Ted Ralphs, Lehigh University                                    *
00011  *                                                                           *
00012  * Conceptual Design:                                                        *
00013  *                                                                           *
00014  *          Yan Xu, Lehigh University                                        *
00015  *          Ted Ralphs, Lehigh University                                    *
00016  *          Laszlo Ladanyi, IBM T.J. Watson Research Center                  *
00017  *          Matthew Saltzman, Clemson University                             *
00018  *                                                                           * 
00019  *                                                                           *
00020  * Copyright (C) 2001-2007, Lehigh University, Yan Xu, and Ted Ralphs.       *
00021  * All Rights Reserved.                                                      *
00022  *===========================================================================*/
00023 
00024 
00025 //#############################################################################
00026 // This file is modified from COIN/Cbc/CbcHeuristic.hpp
00027 //#############################################################################
00028 
00029 
00030 #ifndef BlisHeuristic_h_
00031 #define BlisHeuristic_h_
00032 
00033 #include <string>
00034 #include <vector>
00035 
00036 #include "CoinPackedMatrix.hpp"
00037 #include "OsiCuts.hpp"
00038 
00039 #include "Blis.h"
00040 
00041 class BlisModel;
00042 
00043 
00044 //#############################################################################
00045 
00046 
00048 class BlisHeuristic {
00049 
00050  private:
00051 
00053     BlisHeuristic & operator = (const BlisHeuristic& rhs);
00054     
00055  protected:
00056 
00058     BlisModel *model_;
00059     
00061     char *name_;
00062     
00070     BlisHeurStrategy strategy_;
00071 
00073     int heurCallFrequency_;
00074     
00076     int numSolutions_;
00077 
00079     double time_;
00080 
00082     int calls_;
00083 
00085     int noSolsCalls_;
00086     
00087 public:
00088     
00090     BlisHeuristic() {
00091         model_ = NULL;
00092         name_ = strdup("Unknown");
00093         strategy_ = BlisHeurStrategyAuto;
00094         heurCallFrequency_ = 1;
00095         numSolutions_ = 0;
00096         time_ = 0.0;
00097         calls_ = 0;
00098         noSolsCalls_ = 0;
00099     }
00100     
00102     BlisHeuristic(BlisModel *model, const char *name,
00103                   BlisHeurStrategy strategy, int heurCallFrequency) {
00104         model_ = model;
00105         if (name) {
00106             name_ = strdup(name);
00107         }
00108         else {
00109             name_ = strdup("Unknown");
00110         }
00111         strategy_ = strategy;
00112         heurCallFrequency_ = heurCallFrequency;
00113         numSolutions_ = 0;
00114         time_ = 0.0;
00115         calls_ = 0;
00116         noSolsCalls_ = 0;
00117     }
00118 
00120     virtual ~BlisHeuristic() { if (name_) free(name_); }
00121 
00123     BlisHeuristic(const BlisHeuristic & rhs) {        
00124         model_ = rhs.model_;
00125         name_ = strdup(rhs.name_);
00126         strategy_ = rhs.strategy_; // What if disabled?
00127         heurCallFrequency_ = rhs.heurCallFrequency_;
00128         numSolutions_ = 0;
00129         time_ = 0.0;
00130         calls_ = 0;
00131         noSolsCalls_ = 0;
00132     }
00133  
00135     virtual void setModel(BlisModel * model) { model_ = model ;}
00136     
00139     virtual void setStrategy(BlisHeurStrategy strategy) {strategy_ = strategy;}
00140     virtual BlisHeurStrategy strategy() const { return strategy_; }
00141     //@]
00142 
00145     virtual void setHeurCallFrequency(int freq) { heurCallFrequency_ = freq; }
00146     virtual int heurCallFrequency() const { return heurCallFrequency_; }
00147     //@]
00148 
00150     virtual BlisHeuristic * clone() const {
00151         BlisHeuristic *h = NULL;
00152         assert(0);
00153         return h;
00154     };
00155     
00161     virtual bool searchSolution(double & objectiveValue, 
00162                                double * newSolution)=0;
00163     
00172     virtual bool searchSolution(double & objectiveValue,
00173                                double * newSolution,
00174                                OsiCuts & cs) { return 0; }
00175     
00177     inline const char * name() const { return name_; }
00178     
00180     inline void addNumSolutions(int num=1) { numSolutions_ += num; }
00181 
00183     inline int numSolutions() const { return numSolutions_; }
00184     
00186     inline void addTime(double t=0.0) { time_ += t; }
00187 
00189     inline double time() const { return time_; }
00190     
00192     inline void addCalls(int c=1) { calls_ += c; }
00193     
00195     inline int calls() const { return calls_; } 
00196 
00198     inline int noSolCalls() const { return noSolsCalls_; }
00199 
00201     inline void addNoSolCalls(int n=1) { noSolsCalls_ += n; }
00202 };
00203 
00204 #endif
00205 

Generated on Sun Nov 14 14:06:30 2010 for Coin-All by  doxygen 1.4.7