33 #ifndef CBC_SYMMETRY_HPP 34 #define CBC_SYMMETRY_HPP 37 #include "nausparse.h" 52 #define NTY_BAD_DEPTH 10 56 #define COUENNE_HACKED_EPS 1.e-07 57 #define COUENNE_HACKED_EPS_SYMM 1e-8 58 #define COUENNE_HACKED_EXPRGROUP 8 77 void node(
int,
double,
double,
double,
int,
int);
86 inline void bounds(
register double a,
register double b)
109 inline bool operator()(
register const char *a,
register const char *b)
const 111 return strcmp(a, b) < 0;
157 int largestOrbit(
const double *lower,
const double *upper)
const;
158 void ChangeBounds(
const double *lower,
const double *upper,
159 int numberColumns,
bool justFixedAtOne)
const;
160 inline bool compare(
register Node &a,
register Node &b)
const;
193 CbcNauty(
int n,
const size_t *v,
const int *d,
const int *e);
222 std::vector< std::vector< int > > *
getOrbits()
const;
239 inline optionblk *
options()
const 287 std::multimap< int, int >::iterator
it;
289 std::pair< std::multimap< int, int >::iterator,
290 std::multimap< int, int >::iterator >
311 int numberExtra,
const int *extraToZero);
330 virtual void fix(OsiSolverInterface *solver,
331 double *lower,
double *upper,
332 int branchState)
const;
345 virtual void print();
virtual void fix(OsiSolverInterface *solver, double *lower, double *upper, int branchState) const
Update bounds in solver as in 'branch' and update given bounds.
bool operator()(register const char *a, register const char *b) const
virtual CbcBranchObjType type() const
Return the type (an integer identifier) of this.
void color_node(int ix, int color)
virtual ~CbcOrbitalBranchingObject()
void addElement(int ix, int jx)
optionblk * options() const
Pointer to options.
std::vector< int > * Find_Orbit(int) const
#define COUENNE_HACKED_EPS_SYMM
void color_vertex(register int k)
void setupSymmetry(CbcModel *model)
empty if no NTY, symmetry data structure setup otherwise
void deleteElement(int ix, int jx)
virtual int compareOriginalObject(const CbcBranchingObject *brObj) const
Compare the original object of this with the original object of brObj.
void ChangeBounds(const double *lower, const double *upper, int numberColumns, bool justFixedAtOne) const
virtual double branch()
Does next branch and updates state.
Branching object for Orbital branching.
bool compare(register Node &a, register Node &b) const
~CbcSymmetry()
Destructor.
int statsOrbits(CbcModel *model, int type) const
std::pair< std::multimap< int, int >::iterator, std::multimap< int, int >::iterator > ret
CbcModel * model() const
Return model.
Class to deal with symmetry.
void Compute_Symmetry() const
int * fixToZero_
Fix to zero.
double getGroupSize() const
void setWriteAutoms(const std::string &afilename)
Methods to classify orbits.
int way() const
Get the state of the branching object.
Abstract branching object base class Now just difference with OsiBranchingObject. ...
void bounds(register double a, register double b)
void Print_Orbits() const
virtual void previousBranch()
Reset every information so that the branching object appears to point to the previous child...
void getVstat(double *v, int nv)
virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap=false)
Compare the this with brObj.
void node(int, double, double, double, int, int)
int column_
Column to go to 1.
CbcOrbitalBranchingObject & operator=(const CbcOrbitalBranchingObject &rhs)
virtual double branch()=0
Execute the actions required to branch, as specified by the current state of the branching object...
virtual void print() const
Print something about branch - only if log level high.
void insertRHS(int rhs, int cons)
int numberOther_
Number (without column) going to zero on down branch.
int numberExtra_
Number extra.
CbcNauty & operator=(const CbcNauty &rhs)
Assignment operator.
bool operator()(register const Node &a, register const Node &b)
std::multimap< int, int >::iterator it
int numberUsefulObjects() const
int getNumGenerators() const
CbcOrbitalBranchingObject()
virtual void print()
Print something about branch - only if log level high.
int largestOrbit(const double *lower, const double *upper) const
virtual void previousBranch()
Reset every information so that the branching object appears to point to the previous child...
std::multimap< int, int > constr_rhs
CbcSymmetry & operator=(const CbcSymmetry &rhs)
Assignment operator.
virtual CbcBranchingObject * clone() const
Clone.
int orbitalFixing(OsiSolverInterface *solver)
Fixes variables using orbits (returns number fixed)
std::vector< Node > node_info_
Simple Branch and bound class.
std::vector< std::vector< int > > * getOrbits() const
Returns the orbits in a "convenient" form.
CbcSymmetry()
Default constructor.
CbcNauty()
Default constructor.
int numberUsefulOrbits() const
bool operator()(register const Node &a, register const Node &b)