00001 /* $Id: CouenneOrbitObj.hpp 560 2011-04-17 10:01:15Z stefan $ 00002 * 00003 * Name: CouenneOrbitObj.hpp 00004 * Authors: Jim Ostrowski, University of Waterloo 00005 * Pietro Belotti, Lehigh University 00006 * Purpose: Object for orbital branching 00007 * 00008 * This file is licensed under the Eclipse Public License (EPL) 00009 */ 00010 /* 00011 #ifndef COUENNEORBITOBJ_HPP 00012 #define COUENNEORBITOBJ_HPP 00013 00014 #include "BonBabSetupBase.hpp" 00015 00016 #include "CouenneExprVar.hpp" 00017 #include "CouenneJournalist.hpp" 00018 #include "OsiBranchingObject.hpp" 00019 #include "CouenneObject.hpp" 00020 #include "Nauty.h" 00021 00022 namespace Couenne { 00023 00024 class Node{ 00025 int index; 00026 double coeff; 00027 double lb; 00028 double ub; 00029 int color; 00030 int code; 00031 public: 00032 void node(int, double, double, double, int); 00033 void color_vertex(int); 00034 int get_index () {return index; 00035 }; 00036 double get_coeff () {return coeff; 00037 }; 00038 double get_lb () {return lb; 00039 }; 00040 double get_ub () {return ub ; 00041 }; 00042 int get_color () {return color; 00043 }; 00044 int get_code () {return code; 00045 }; 00046 void bounds( double a, double b){ lb = a; ub = b; 00047 }; 00048 }; 00049 00050 bool compare ( Node a, Node b); 00051 bool node_sort ( Node a, Node b); 00052 bool index_sort ( Node a, Node b); 00053 00054 00056 class CouenneOrbitObj: public CouenneObject { 00057 00058 public: 00059 00061 CouenneOrbitObj (); 00062 00064 CouenneOrbitObj (CouenneCutGenerator *cutgen, 00065 CouenneProblem *p, 00066 exprVar *ref, Bonmin::BabSetupBase *base, JnlstPtr jnlst); 00067 00068 00069 00070 00072 CouenneOrbitObj (exprVar *ref, Bonmin::BabSetupBase *base, JnlstPtr jnlst); 00073 00075 ~CouenneOrbitObj () {} 00076 00078 CouenneOrbitObj (const CouenneOrbitObj &src); 00079 00081 virtual CouenneObject * clone () const 00082 {return new CouenneOrbitObj (*this);} 00083 00084 00085 00087 void setParameters (Bonmin::BabSetupBase *base); 00090 virtual double infeasibility (const OsiBranchingInformation *info, int &way) const; 00091 00094 virtual double checkInfeasibility (const OsiBranchingInformation * info) const; 00095 00097 virtual double feasibleRegion (OsiSolverInterface*, const OsiBranchingInformation*) const; 00098 00101 virtual OsiBranchingObject *createBranch (OsiSolverInterface*,const OsiBranchingInformation*, int) const; 00102 00103 00104 00105 void Compute_Symmetry(); 00106 void Print_Orbits(); 00107 void ChangeBounds (CouenneProblem *p); 00108 00109 00110 std::vector<Node> node_info; 00111 00112 Nauty *nauty_info; 00113 00114 protected: 00115 00116 }; 00117 00118 } 00119 00120 #endif 00121 */