DippyDecompAlgo.h

Go to the documentation of this file.
00001 #ifndef DIPPY_DECOMPALGO_INCLUDED
00002 #define DIPPY_DECOMPALGO_INCLUDED
00003 
00004 #include "Decomp.h"
00005 #include "DecompAlgoC.h"
00006 #include "DecompAlgoPC.h"
00007 #include "DecompAlgoRC.h"
00008 #include "DecompAlgoD.h"
00009 #include "DecompCutPool.h"
00010 #include "AlpsDecompTreeNode.h"
00011 
00012 #include "Python.h"
00013 
00022 class DippyAlgoMixin {
00023 private:
00024    PyObject* pDownLB;
00025    PyObject* pDownUB;
00026    PyObject* pUpLB;
00027    PyObject* pUpUB;
00028 
00029 protected:
00030    PyObject* m_pProb;
00031    UtilParameters* m_utilParam;
00032 public:
00039    DippyAlgoMixin(UtilParameters* utilParam, PyObject* pProb)
00040       : m_pProb(pProb), m_utilParam(utilParam), pDownLB(NULL),
00041         pDownUB(NULL), pUpLB(NULL), pUpUB(NULL) {
00042    }
00043 
00044    bool chooseBranchSet(DecompAlgo* algo,
00045                         std::vector< std::pair<int, double> >& downBranchLB,
00046                         std::vector< std::pair<int, double> >& downBranchUB,
00047                         std::vector< std::pair<int, double> >& upBranchLB,
00048                         std::vector< std::pair<int, double> >& upBranchUB);
00049 
00050    PyObject* getPDownLB() {
00051       return pDownLB;
00052    };
00053    PyObject* getPDownUB() {
00054       return pDownUB;
00055    };
00056    PyObject* getPUpLB() {
00057       return pUpLB;
00058    };
00059    PyObject* getPpUpUB() {
00060       return pUpUB;
00061    };
00062 
00063    void postProcessBranch(DecompAlgo* algo, DecompStatus decompStatus);
00064 
00065    void postProcessNode(DecompAlgo* algo, DecompStatus decompStatus);
00066 
00067 };
00068 
00073 class DippyAlgoC : DippyAlgoMixin, public DecompAlgoC {
00074 public:
00075    DippyAlgoC(DecompApp* app, UtilParameters* utilParam, PyObject* pProb)
00076       : DippyAlgoMixin(utilParam, pProb), DecompAlgoC(app, utilParam) {
00077    }
00078 
00079    virtual bool chooseBranchSet(
00080       std::vector< std::pair<int, double> >& downBranchLB,
00081       std::vector< std::pair<int, double> >& downBranchUB,
00082       std::vector< std::pair<int, double> >& upBranchLB,
00083       std::vector< std::pair<int, double> >& upBranchUB) {
00084       bool ret_val = DippyAlgoMixin::chooseBranchSet(this, downBranchLB, downBranchUB,
00085                      upBranchLB, upBranchUB);
00086       return ret_val;
00087    }
00088 
00089    virtual void postProcessBranch(DecompStatus decompStatus) {
00090       DippyAlgoMixin::postProcessBranch(this, decompStatus);
00091    }
00092 
00093    virtual void postProcessNode(DecompStatus decompStatus) {
00094       DippyAlgoMixin::postProcessNode(this, decompStatus);
00095    }
00096 
00097 };
00098 
00103 class DippyAlgoPC : DippyAlgoMixin, public DecompAlgoPC {
00104 public:
00105    DippyAlgoPC(DecompApp* app, UtilParameters* utilParam, PyObject* pProb)
00106       : DippyAlgoMixin(utilParam, pProb), DecompAlgoPC(app, utilParam) {
00107    }
00108 
00109    virtual bool chooseBranchSet(std::vector< std::pair<int, double> >& downBranchLB,
00110                                 std::vector< std::pair<int, double> >& downBranchUB,
00111                                 std::vector< std::pair<int, double> >& upBranchLB,
00112                                 std::vector< std::pair<int, double> >& upBranchUB) {
00113       return DippyAlgoMixin::chooseBranchSet(this, downBranchLB, downBranchUB,
00114                                              upBranchLB, upBranchUB);
00115    }
00116 
00117    virtual void postProcessBranch(DecompStatus decompStatus) {
00118       DippyAlgoMixin::postProcessBranch(this, decompStatus);
00119    }
00120 
00121    virtual void postProcessNode(DecompStatus decompStatus) {
00122       DippyAlgoMixin::postProcessNode(this, decompStatus);
00123    }
00124 
00125 };
00126 
00131 class DippyAlgoRC : DippyAlgoMixin, public DecompAlgoRC {
00132 public:
00133    DippyAlgoRC(DecompApp* app, UtilParameters* utilParam, PyObject* pProb)
00134       : DippyAlgoMixin(utilParam, pProb), DecompAlgoRC(app, utilParam) {
00135    }
00136 
00137    virtual bool chooseBranchSet(std::vector< std::pair<int, double> >& downBranchLB,
00138                                 std::vector< std::pair<int, double> >& downBranchUB,
00139                                 std::vector< std::pair<int, double> >& upBranchLB,
00140                                 std::vector< std::pair<int, double> >& upBranchUB) {
00141       return DippyAlgoMixin::chooseBranchSet(this, downBranchLB, downBranchUB,
00142                                              upBranchLB, upBranchUB);
00143    }
00144 
00145    virtual void postProcessBranch(DecompStatus decompStatus) {
00146       DippyAlgoMixin::postProcessBranch(this, decompStatus);
00147    }
00148 
00149    virtual void postProcessNode(DecompStatus decompStatus) {
00150       DippyAlgoMixin::postProcessNode(this, decompStatus);
00151    }
00152 
00153 };
00154 
00155 #endif

Generated on 5 Apr 2015 for Dip-All by  doxygen 1.6.1