# CouenneOrbitObj.hpp

Go to the documentation of this file.

    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 */

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines