Cbc  2.10.10
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CbcSymmetry.hpp
Go to the documentation of this file.
1 /* $Id: CbcSymmetry.hpp 1033 2013-12-14 19:34:28Z pbelotti $
2  *
3  * Name: Hacked from CouenneProblem.hpp
4  * Author: Pietro Belotti, Lehigh University
5  * Andreas Waechter, IBM
6  * Purpose: define the class CouenneProblem
7  *
8  * (C) Carnegie-Mellon University, 2006-11.
9  * This file is licensed under the Eclipse Public License (EPL)
10  */
11 /*
12  If this is much used then we could improve build experience
13  Download nauty - say to /disk/nauty25r9
14  In that directory ./configure --enable-tls --enable-wordsize=32
15  make
16  copy nauty.a to libnauty.a
17 
18  In Cbc's configure
19  add -DCOIN_HAS_NTY to CXXDEFS
20  add -I/disk/nauty25r9 to CXXDEFS or ADD_CXXFLAGS
21  add -L/disk/nauty25r9 -lnauty to LDFLAGS
22 
23  If you wish to use Traces rather than nauty then add -DNTY_TRACES
24 
25  To use it is -orbit on
26 
27  */
28 #ifndef CBC_SYMMETRY_HPP
29 #define CBC_SYMMETRY_HPP
30 
31 #include "CbcConfig.h"
32 
33 #ifdef COIN_HAS_NTY
34 extern "C" {
35 #include "nauty/nauty.h"
36 #include "nauty/nausparse.h"
37 #ifdef NTY_TRACES
38 #include "nauty/traces.h"
39 #endif
40 }
41 #endif
42 
43 #include <vector>
44 #include <map>
45 #include <string.h>
46 
47 #include "CbcModel.hpp"
48 
49 class OsiObject;
50 // when to give up (depth since last success)
51 #ifndef NTY_BAD_DEPTH
52 #define NTY_BAD_DEPTH 4
53 #endif
54 class CbcNauty;
55 typedef struct {
58  int * orbits;
59 } cbc_permute;
60 
61 #define COUENNE_HACKED_EPS 1.e-07
62 #define COUENNE_HACKED_EPS_SYMM 1e-8
63 #define COUENNE_HACKED_EXPRGROUP 8
64 
71 class CbcSymmetry {
72  class Node {
73  int index;
74  double coeff;
75  double lb;
76  double ub;
77  int color;
78  int code;
79  int sign;
80 
81  public:
82  void node(int, double, double, double, int, int);
83  inline void color_vertex(register int k) { color = k; }
84  inline int get_index() const { return index; }
85  inline double get_coeff() const { return coeff; }
86  inline double get_lb() const { return lb; }
87  inline double get_ub() const { return ub; }
88  inline int get_color() const { return color; }
89  inline int get_code() const { return code; }
90  inline int get_sign() const { return sign; }
91  inline void bounds(register double a, register double b)
92  {
93  lb = a;
94  ub = b;
95  }
96  };
97 
98  struct myclass0 {
99  inline bool operator()(register const Node &a, register const Node &b)
100  {
101 
102  return ((a.get_code() < b.get_code()) || ((a.get_code() == b.get_code() && ((a.get_coeff() < b.get_coeff() - COUENNE_HACKED_EPS_SYMM) || ((fabs(a.get_coeff() - b.get_coeff()) < COUENNE_HACKED_EPS_SYMM) && ((a.get_lb() < b.get_lb() - COUENNE_HACKED_EPS_SYMM) || ((fabs(a.get_lb() - b.get_lb()) < COUENNE_HACKED_EPS_SYMM) && ((a.get_ub() < b.get_ub() - COUENNE_HACKED_EPS_SYMM) || ((fabs(a.get_ub() - b.get_ub()) < COUENNE_HACKED_EPS_SYMM) && ((a.get_index() < b.get_index())))))))))));
103  }
104  };
105 
106  struct myclass {
107  inline bool operator()(register const Node &a, register const Node &b)
108  {
109  return (a.get_index() < b.get_index());
110  }
111  };
112 
113  struct less_than_str {
114  inline bool operator()(register const char *a, register const char *b) const
115  {
116  return strcmp(a, b) < 0;
117  }
118  };
119 
120 public:
123  CbcSymmetry();
125 
127  CbcSymmetry(const CbcSymmetry &);
128 
130  CbcSymmetry &operator=(const CbcSymmetry &rhs);
131 
133  ~CbcSymmetry();
135 
136  // Symmetry Info
137 
138  std::vector< int > *Find_Orbit(int) const;
139 
142 
143  void Compute_Symmetry() const;
144  int statsOrbits(CbcModel *model, int type) const;
145  //double timeNauty () const;
146  void Print_Orbits(int type=0) const;
147  void fillOrbits();
149  int orbitalFixing(OsiSolverInterface *solver);
151  int orbitalFixing2(OsiSolverInterface *solver);
152  inline int *whichOrbit()
153  {
154  return numberUsefulOrbits_ ? whichOrbit_ : NULL;
155  }
156  inline int *fixedToZero() const
157  {
158  return whichOrbit_+4*numberColumns_;
159  }
160  inline int numberUsefulOrbits() const
161  {
162  return numberUsefulOrbits_;
163  }
164  inline int numberUsefulObjects() const
165  {
166  return numberUsefulObjects_;
167  }
168  int largestOrbit(const double *lower, const double *upper) const;
169  void ChangeBounds(const double *lower, const double *upper,
170  int numberColumns, bool justFixedAtOne) const;
173  int changeBounds(int kColumn, double * saveLower,
174  double * saveUpper,
175  OsiSolverInterface * solver,int mode) const;
176  int changeBounds(double *saveLower, double *saveUpper,
177  OsiSolverInterface * solver) const;
178  int changeBounds2(double *saveLower, double *saveUpper,
179  OsiSolverInterface * solver) const;
180  int fixSome(int iColumn, double *columnLower, double *columnUpper) const;
182  int worthBranching(const double *saveLower, const double *saveUpper,
183  int iColumn, int & numberCouldFix) const;
184  void fixSuccess(int nFixed);
186  void adjustStats(const CbcSymmetry * other);
187  inline int numberColumns() const
188  { return numberColumns_;}
189  inline bool compare(register Node &a, register Node &b) const;
191 
192  // bool node_sort ( Node a, Node b);
193  // bool index_sort ( Node a, Node b);
194 
196  void setupSymmetry(CbcModel * model);
197 
201  inline int numberPermutations() const
202  { return numberPermutations_;}
204  inline int * permutation(int which) const
205  { return permutations_[which].orbits;}
206  inline int numberInPermutation(int which) const
207  { return permutations_[which].numberInPerm;}
208  inline void incrementNautyBranches(int n)
209  { nautyOtherBranches_ += n;}
211  { nautyBranchSucceeded_ ++;}
212 private:
213  mutable std::vector< Node > node_info_;
221  int stats_[5];
222  double nautyTime_;
223  double nautyFixes_;
224  mutable double nautyOtherBranches_;
225  mutable int nautyBranchCalls_;
228  mutable int nautyFixCalls_;
231 };
232 
233 class CbcNauty {
234 
235 public:
238  FREE };
239 
242 private:
244  CbcNauty();
245 
246 public:
248  CbcNauty(int n, const size_t *v, const int *d, const int *e);
249 
251  CbcNauty(const CbcNauty &);
252 
254  CbcNauty &operator=(const CbcNauty &rhs);
255 
257  ~CbcNauty();
259 
260  void addElement(int ix, int jx);
261  void clearPartitions();
262  void computeAuto();
263  void deleteElement(int ix, int jx);
264  void color_node(int ix, int color) { vstat_[ix] = color; }
265  void insertRHS(int rhs, int cons) { constr_rhs.insert(std::pair< int, int >(rhs, cons)); }
266 
267  double getGroupSize() const;
268  //int getNautyCalls() const { return nautyCalls_; }
269  //double getNautyTime() const { return nautyTime_; }
270 
271  int getN() const { return n_; }
272 
273  int getNumGenerators() const;
274  int getNumOrbits() const;
275 
277  std::vector< std::vector< int > > *getOrbits() const;
278 
279  void getVstat(double *v, int nv);
280  inline bool isSparse() const
281  {
282  return GSparse_ != NULL;
283  }
284  inline int errorStatus() const
285 #ifndef NTY_TRACES
286  {
287  return stats_->errstatus;
288  }
289 #else
290  {
291  return 0;
292  }
293 #endif
294  inline optionblk *options() const
296  {
297  return options_;
298  }
302  // bool isAllFixOneOrbit(const std::vector<int> &orbit) const;
303  // bool isAllFreeOrbit(const std::vector<int> &orbit) const;
304  //bool isAutoComputed() const { return autoComputed_; }
305  //bool isConstraintOrbit(const std::vector<int> &orbit) const;
306  //bool isMixedFreeZeroOrbit(const std::vector<int> &orbit) const;
307  //void makeFree(int ix) { vstat_[ix] = FREE; }
308 
309  void setWriteAutoms(const std::string &afilename);
310  void unsetWriteAutoms();
311 
312 private:
313  // The base nauty stuff
314  graph *G_;
315  sparsegraph *GSparse_;
316  int *lab_;
317  int *ptn_;
318  set *active_;
319  int *orbits_;
320 #ifndef NTY_TRACES
321  optionblk *options_;
322  statsblk *stats_;
323 #else
324  TracesOptions *options_;
325  TracesStats *stats_;
326 #endif
327  setword *workspace_;
329  int m_;
330  int n_;
331  size_t nel_;
332  graph *canonG_;
333 
335 
336  int *vstat_;
337 
338  //static int nautyCalls_;
339  //static double nautyTime_;
340 
341  std::multimap< int, int > constr_rhs;
342  std::multimap< int, int >::iterator it;
343 
344  std::pair< std::multimap< int, int >::iterator,
345  std::multimap< int, int >::iterator >
347 
348  // File pointer for automorphism group
349  FILE *afp_;
350 };
351 
358 
359 public:
360  // Default Constructor
362 
363  // Useful constructor
365  int way,
366  int numberExtra, const int *extraToZero);
367  // Useful constructor (uses stored list)
368  CbcOrbitalBranchingObject(CbcModel *model, int column, int nFixed);
369 
370  // Copy constructor
372 
373  // Assignment operator
375 
377  virtual CbcBranchingObject *clone() const;
378 
379  // Destructor
380  virtual ~CbcOrbitalBranchingObject();
381 
384  virtual double branch();
387  virtual void fix(OsiSolverInterface *solver,
388  double *lower, double *upper,
389  int branchState) const;
390 
394  virtual void previousBranch()
395  {
397  }
398 
402  virtual void print();
403 
405  virtual CbcBranchObjType type() const
406  {
407  return SoSBranchObj;
408  }
409 
417  virtual int compareOriginalObject(const CbcBranchingObject *brObj) const;
418 
427  virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap = false);
428 
429 private:
431  int column_;
438 };
439 //#define PRINT_CBCAUTO
440 #endif
CbcNauty::getOrbits
std::vector< std::vector< int > > * getOrbits() const
Returns the orbits in a "convenient" form.
CbcSymmetry::worthBranching
int worthBranching(const double *saveLower, const double *saveUpper, int iColumn, int &numberCouldFix) const
return number of orbits if worth branching
CbcOrbitalBranchingObject::fix
virtual void fix(OsiSolverInterface *solver, double *lower, double *upper, int branchState) const
Update bounds in solver as in 'branch' and update given bounds.
CbcSymmetry::adjustStats
void adjustStats(const CbcSymmetry *other)
Adjust statistics from threads.
CbcBranchingObject::way
int way() const
Get the state of the branching object.
Definition: CbcBranchingObject.hpp:157
SoSBranchObj
@ SoSBranchObj
Definition: CbcBranchingObject.hpp:22
CbcSymmetry::incrementNautyBranches
void incrementNautyBranches(int n)
Definition: CbcSymmetry.hpp:208
CbcSymmetry::myclass::operator()
bool operator()(register const Node &a, register const Node &b)
Definition: CbcSymmetry.hpp:107
CbcSymmetry::Node::get_coeff
double get_coeff() const
Definition: CbcSymmetry.hpp:85
CbcSymmetry::whichOrbit_
int * whichOrbit_
Definition: CbcSymmetry.hpp:220
CbcSymmetry::operator=
CbcSymmetry & operator=(const CbcSymmetry &rhs)
Assignment operator.
CbcSymmetry::Node::node
void node(int, double, double, double, int, int)
CbcNauty::deleteElement
void deleteElement(int ix, int jx)
CbcSymmetry::incrementBranchSucceeded
void incrementBranchSucceeded()
Definition: CbcSymmetry.hpp:210
CbcNauty::autoComputed_
bool autoComputed_
Definition: CbcSymmetry.hpp:334
CbcSymmetry::orbitalFixing
int orbitalFixing(OsiSolverInterface *solver)
Fixes variables using orbits (returns number fixed)
CbcNauty
Definition: CbcSymmetry.hpp:233
CbcOrbitalBranchingObject::operator=
CbcOrbitalBranchingObject & operator=(const CbcOrbitalBranchingObject &rhs)
CbcSymmetry::Print_Orbits
void Print_Orbits(int type=0) const
cbc_permute::numberPerms
int numberPerms
Definition: CbcSymmetry.hpp:57
CbcNauty::constr_rhs
std::multimap< int, int > constr_rhs
Definition: CbcSymmetry.hpp:341
CbcOrbitalBranchingObject::numberExtra_
int numberExtra_
Number extra.
Definition: CbcSymmetry.hpp:435
CbcSymmetry::node_sort
myclass0 node_sort
Definition: CbcSymmetry.hpp:140
CbcBranchingObject::previousBranch
virtual void previousBranch()
Reset every information so that the branching object appears to point to the previous child.
Definition: CbcBranchingObject.hpp:122
CbcSymmetry::CbcSymmetry
CbcSymmetry()
Default constructor.
CbcSymmetry::Node::coeff
double coeff
Definition: CbcSymmetry.hpp:74
CbcOrbitalBranchingObject::print
virtual void print()
Print something about branch - only if log level high.
CbcConfig.h
CbcSymmetry::setupSymmetry
void setupSymmetry(CbcModel *model)
empty if no NTY, symmetry data structure setup otherwise
CbcNauty::addElement
void addElement(int ix, int jx)
CbcOrbitalBranchingObject::compareOriginalObject
virtual int compareOriginalObject(const CbcBranchingObject *brObj) const
Compare the original object of this with the original object of brObj.
CbcSymmetry::index_sort
myclass index_sort
Definition: CbcSymmetry.hpp:141
CbcSymmetry::Node::ub
double ub
Definition: CbcSymmetry.hpp:76
CbcBranchingObject::branch
virtual double branch()=0
Execute the actions required to branch, as specified by the current state of the branching object,...
CbcSymmetry::numberUsefulOrbits_
int numberUsefulOrbits_
Definition: CbcSymmetry.hpp:216
CbcSymmetry::compare
bool compare(register Node &a, register Node &b) const
CbcOrbitalBranchingObject::CbcOrbitalBranchingObject
CbcOrbitalBranchingObject()
CbcSymmetry::Find_Orbit
std::vector< int > * Find_Orbit(int) const
CbcNauty::VarStatus
VarStatus
Definition: CbcSymmetry.hpp:236
CbcSymmetry::less_than_str::operator()
bool operator()(register const char *a, register const char *b) const
Definition: CbcSymmetry.hpp:114
CbcSymmetry::Node::index
int index
Definition: CbcSymmetry.hpp:73
CbcModel.hpp
CbcSymmetry::fixSuccess
void fixSuccess(int nFixed)
CbcSymmetry::fillOrbits
void fillOrbits()
CbcOrbitalBranchingObject::previousBranch
virtual void previousBranch()
Reset every information so that the branching object appears to point to the previous child.
Definition: CbcSymmetry.hpp:394
CbcNauty::CbcNauty
CbcNauty()
Default constructor.
CbcNauty::lab_
int * lab_
Definition: CbcSymmetry.hpp:316
CbcNauty::GSparse_
sparsegraph * GSparse_
Definition: CbcSymmetry.hpp:315
CbcSymmetry::Node::get_index
int get_index() const
Definition: CbcSymmetry.hpp:84
CbcNauty::getGroupSize
double getGroupSize() const
CbcSymmetry::nautyBranchSucceeded_
int nautyBranchSucceeded_
Definition: CbcSymmetry.hpp:227
CbcOrbitalBranchingObject::compareBranchingObject
virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap=false)
Compare the this with brObj.
CbcNauty::worksize_
int worksize_
Definition: CbcSymmetry.hpp:328
CbcSymmetry::lastNautyBranchSucceeded_
int lastNautyBranchSucceeded_
Definition: CbcSymmetry.hpp:226
CbcNauty::clearPartitions
void clearPartitions()
CbcSymmetry::~CbcSymmetry
~CbcSymmetry()
Destructor.
CbcSymmetry::changeBounds
int changeBounds(int kColumn, double *saveLower, double *saveUpper, OsiSolverInterface *solver, int mode) const
for simple stuff - returns number can fix if can use saved orbit (mode 1) otherwise may fix and retur...
CbcSymmetry::nautyTime_
double nautyTime_
Definition: CbcSymmetry.hpp:222
CbcNauty::FREE
@ FREE
Definition: CbcSymmetry.hpp:238
CbcSymmetry::ChangeBounds
void ChangeBounds(const double *lower, const double *upper, int numberColumns, bool justFixedAtOne) const
cbc_permute::numberInPerm
int numberInPerm
Definition: CbcSymmetry.hpp:56
CbcSymmetry::nauty_info_
CbcNauty * nauty_info_
Definition: CbcSymmetry.hpp:214
CbcSymmetry::Node::get_lb
double get_lb() const
Definition: CbcSymmetry.hpp:86
CbcSymmetry
Class to deal with symmetry.
Definition: CbcSymmetry.hpp:71
CbcNauty::unsetWriteAutoms
void unsetWriteAutoms()
CbcNauty::ret
std::pair< std::multimap< int, int >::iterator, std::multimap< int, int >::iterator > ret
Definition: CbcSymmetry.hpp:346
CbcNauty::errorStatus
int errorStatus() const
Definition: CbcSymmetry.hpp:284
CbcNauty::FIX_AT_ZERO
@ FIX_AT_ZERO
Definition: CbcSymmetry.hpp:236
CbcNauty::FIX_AT_ONE
@ FIX_AT_ONE
Definition: CbcSymmetry.hpp:237
CbcSymmetry::fixSome
int fixSome(int iColumn, double *columnLower, double *columnUpper) const
CbcOrbitalBranchingObject
Branching object for Orbital branching.
Definition: CbcSymmetry.hpp:357
CbcSymmetry::Node::lb
double lb
Definition: CbcSymmetry.hpp:75
CbcSymmetry::nautyFixes_
double nautyFixes_
Definition: CbcSymmetry.hpp:223
CbcSymmetry::Compute_Symmetry
void Compute_Symmetry() const
CbcSymmetry::numberPermutations_
int numberPermutations_
Definition: CbcSymmetry.hpp:218
CbcSymmetry::Node::get_code
int get_code() const
Definition: CbcSymmetry.hpp:89
COUENNE_HACKED_EPS_SYMM
#define COUENNE_HACKED_EPS_SYMM
Definition: CbcSymmetry.hpp:62
CbcSymmetry::statsOrbits
int statsOrbits(CbcModel *model, int type) const
CbcNauty::stats_
statsblk * stats_
Definition: CbcSymmetry.hpp:322
CbcNauty::workspace_
setword * workspace_
Definition: CbcSymmetry.hpp:327
CbcSymmetry::Node
Definition: CbcSymmetry.hpp:72
CbcSymmetry::numberColumns_
int numberColumns_
Definition: CbcSymmetry.hpp:215
CbcNauty::setWriteAutoms
void setWriteAutoms(const std::string &afilename)
Methods to classify orbits.
CbcSymmetry::Node::color
int color
Definition: CbcSymmetry.hpp:77
CbcModel
Simple Branch and bound class.
Definition: CbcModel.hpp:100
CbcSymmetry::orbitalFixing2
int orbitalFixing2(OsiSolverInterface *solver)
Fixes variables using root orbits (returns number fixed)
CbcSymmetry::Node::get_sign
int get_sign() const
Definition: CbcSymmetry.hpp:90
CbcSymmetry::Node::sign
int sign
Definition: CbcSymmetry.hpp:79
CbcNauty::options
optionblk * options() const
Pointer to options.
Definition: CbcSymmetry.hpp:295
CbcSymmetry::Node::get_ub
double get_ub() const
Definition: CbcSymmetry.hpp:87
CbcNauty::nel_
size_t nel_
Definition: CbcSymmetry.hpp:331
CbcNauty::insertRHS
void insertRHS(int rhs, int cons)
Definition: CbcSymmetry.hpp:265
CbcSymmetry::myclass0
Definition: CbcSymmetry.hpp:98
CbcBranchingObject::print
virtual void print() const
Print something about branch - only if log level high.
Definition: CbcBranchingObject.hpp:132
CbcNauty::active_
set * active_
Definition: CbcSymmetry.hpp:318
CbcBranchingObject
Abstract branching object base class Now just difference with OsiBranchingObject.
Definition: CbcBranchingObject.hpp:51
CbcSymmetry::Node::code
int code
Definition: CbcSymmetry.hpp:78
CbcOrbitalBranchingObject::type
virtual CbcBranchObjType type() const
Return the type (an integer identifier) of this.
Definition: CbcSymmetry.hpp:405
CbcSymmetry::Node::bounds
void bounds(register double a, register double b)
Definition: CbcSymmetry.hpp:91
CbcSymmetry::lastNautyFixSucceeded_
int lastNautyFixSucceeded_
Definition: CbcSymmetry.hpp:229
CbcSymmetry::nautyFixCalls_
int nautyFixCalls_
Definition: CbcSymmetry.hpp:228
CbcSymmetry::addPermutation
void addPermutation(cbc_permute permutation)
takes ownership of cbc_permute (orbits part)
CbcSymmetry::Node::get_color
int get_color() const
Definition: CbcSymmetry.hpp:88
CbcSymmetry::numberColumns
int numberColumns() const
Definition: CbcSymmetry.hpp:187
CbcNauty::getNumOrbits
int getNumOrbits() const
CbcNauty::~CbcNauty
~CbcNauty()
Destructor.
CbcOrbitalBranchingObject::branch
virtual double branch()
Does next branch and updates state.
CbcNauty::getVstat
void getVstat(double *v, int nv)
CbcNauty::it
std::multimap< int, int >::iterator it
Definition: CbcSymmetry.hpp:342
CbcNauty::getN
int getN() const
Definition: CbcSymmetry.hpp:271
CbcOrbitalBranchingObject::numberOther_
int numberOther_
Number (without column) going to zero on down branch.
Definition: CbcSymmetry.hpp:433
CbcSymmetry::numberUsefulObjects
int numberUsefulObjects() const
Definition: CbcSymmetry.hpp:164
CbcSymmetry::myclass
Definition: CbcSymmetry.hpp:106
CbcSymmetry::nautyOtherBranches_
double nautyOtherBranches_
Definition: CbcSymmetry.hpp:224
CbcRangeCompare
CbcRangeCompare
Definition: CbcBranchBase.hpp:13
CbcSymmetry::Node::color_vertex
void color_vertex(register int k)
Definition: CbcSymmetry.hpp:83
CbcSymmetry::largestOrbit
int largestOrbit(const double *lower, const double *upper) const
CbcNauty::computeAuto
void computeAuto()
CbcNauty::operator=
CbcNauty & operator=(const CbcNauty &rhs)
Assignment operator.
CbcSymmetry::permutation
int * permutation(int which) const
Permutation arrays.
Definition: CbcSymmetry.hpp:204
CbcSymmetry::node_info_
std::vector< Node > node_info_
Definition: CbcSymmetry.hpp:213
CbcNauty::canonG_
graph * canonG_
Definition: CbcSymmetry.hpp:332
cbc_permute::orbits
int * orbits
Definition: CbcSymmetry.hpp:58
CbcSymmetry::numberPermutations
int numberPermutations() const
Number of permutation arrays.
Definition: CbcSymmetry.hpp:201
CbcSymmetry::permutations_
cbc_permute * permutations_
Definition: CbcSymmetry.hpp:219
CbcNauty::getNumGenerators
int getNumGenerators() const
CbcNauty::color_node
void color_node(int ix, int color)
Definition: CbcSymmetry.hpp:264
CbcNauty::orbits_
int * orbits_
Definition: CbcSymmetry.hpp:319
CbcNauty::ptn_
int * ptn_
Definition: CbcSymmetry.hpp:317
CbcBranchObjType
CbcBranchObjType
Definition: CbcBranchingObject.hpp:17
CbcNauty::vstat_
int * vstat_
Definition: CbcSymmetry.hpp:336
CbcOrbitalBranchingObject::fixToZero_
int * fixToZero_
Fix to zero.
Definition: CbcSymmetry.hpp:437
CbcBranchingObject::model
CbcModel * model() const
Return model.
Definition: CbcBranchingObject.hpp:177
CbcSymmetry::stats_
int stats_[5]
Definition: CbcSymmetry.hpp:221
CbcOrbitalBranchingObject::column_
int column_
Column to go to 1.
Definition: CbcSymmetry.hpp:431
CbcOrbitalBranchingObject::clone
virtual CbcBranchingObject * clone() const
Clone.
cbc_permute
Definition: CbcSymmetry.hpp:55
CbcNauty::G_
graph * G_
Definition: CbcSymmetry.hpp:314
CbcSymmetry::numberInPermutation
int numberInPermutation(int which) const
Definition: CbcSymmetry.hpp:206
CbcSymmetry::fixedToZero
int * fixedToZero() const
Definition: CbcSymmetry.hpp:156
CbcSymmetry::nautyBranchCalls_
int nautyBranchCalls_
Definition: CbcSymmetry.hpp:225
CbcNauty::n_
int n_
Definition: CbcSymmetry.hpp:330
CbcSymmetry::changeBounds2
int changeBounds2(double *saveLower, double *saveUpper, OsiSolverInterface *solver) const
CbcSymmetry::myclass0::operator()
bool operator()(register const Node &a, register const Node &b)
Definition: CbcSymmetry.hpp:99
CbcSymmetry::numberUsefulObjects_
int numberUsefulObjects_
Definition: CbcSymmetry.hpp:217
CbcNauty::afp_
FILE * afp_
Definition: CbcSymmetry.hpp:349
CbcSymmetry::numberUsefulOrbits
int numberUsefulOrbits() const
Definition: CbcSymmetry.hpp:160
CbcNauty::m_
int m_
Definition: CbcSymmetry.hpp:329
CbcNauty::options_
optionblk * options_
Definition: CbcSymmetry.hpp:321
CbcSymmetry::getNtyInfo
CbcNauty * getNtyInfo()
Definition: CbcSymmetry.hpp:190
CbcOrbitalBranchingObject::~CbcOrbitalBranchingObject
virtual ~CbcOrbitalBranchingObject()
CbcSymmetry::nautyFixSucceeded_
int nautyFixSucceeded_
Definition: CbcSymmetry.hpp:230
CbcSymmetry::whichOrbit
int * whichOrbit()
Definition: CbcSymmetry.hpp:152
CbcSymmetry::less_than_str
Definition: CbcSymmetry.hpp:113
CbcNauty::isSparse
bool isSparse() const
Definition: CbcSymmetry.hpp:280