1 | // Copyright (C) 2004, International Business Machines |
---|

2 | // Corporation and others. All Rights Reserved. |
---|

3 | #ifndef CbcFathom_H |
---|

4 | #define CbcFathom_H |
---|

5 | |
---|

6 | class CbcModel; |
---|

7 | |
---|

8 | //############################################################################# |
---|

9 | /** Fathom base class. |
---|

10 | |
---|

11 | The idea is that after some branching the problem will be effectively smaller than |
---|

12 | the original problem and maybe there will be a more specialized technique which can completely |
---|

13 | fathom this branch quickly. |
---|

14 | |
---|

15 | One method is to presolve the problem to give a much smaller new problem and then do branch |
---|

16 | and cut on that. Another might be dynamic programming. |
---|

17 | |
---|

18 | */ |
---|

19 | |
---|

20 | class CbcFathom { |
---|

21 | public: |
---|

22 | // Default Constructor |
---|

23 | CbcFathom (); |
---|

24 | |
---|

25 | // Constructor with model - assumed before cuts |
---|

26 | CbcFathom (CbcModel & model); |
---|

27 | |
---|

28 | virtual ~CbcFathom(); |
---|

29 | |
---|

30 | /// update model (This is needed if cliques update matrix etc) |
---|

31 | virtual void setModel(CbcModel * model); |
---|

32 | |
---|

33 | /// Clone |
---|

34 | virtual CbcFathom * clone() const=0; |
---|

35 | |
---|

36 | /// Resets stuff if model changes |
---|

37 | virtual void resetModel(CbcModel * model)=0; |
---|

38 | |
---|

39 | /** returns 0 if no fathoming attempted, 1 fully fathomed, |
---|

40 | 2 incomplete search, 3 incomplete search but treat as complete. |
---|

41 | If solution then newSolution will not be NULL and |
---|

42 | will be freed by CbcModel. It is expected that the solution is better |
---|

43 | than best so far but CbcModel will double check. |
---|

44 | |
---|

45 | If returns 3 then of course there is no guarantee of global optimum |
---|

46 | */ |
---|

47 | virtual int fathom(double *& newSolution)=0; |
---|

48 | |
---|

49 | // Is this method possible |
---|

50 | inline bool possible() const |
---|

51 | { return possible_;}; |
---|

52 | |
---|

53 | protected: |
---|

54 | |
---|

55 | /// Model |
---|

56 | CbcModel * model_; |
---|

57 | /// Possible - if this method of fathoming can be used |
---|

58 | bool possible_; |
---|

59 | private: |
---|

60 | |
---|

61 | /// Illegal Assignment operator |
---|

62 | CbcFathom & operator=(const CbcFathom& rhs); |
---|

63 | |
---|

64 | }; |
---|

65 | |
---|

66 | #endif |
---|