Clp  1.17.6
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ClpNode.hpp
Go to the documentation of this file.
1 /* $Id: ClpNode.hpp 2385 2019-01-06 19:43:06Z unxusr $ */
2 // Copyright (C) 2008, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 
6 #ifndef ClpNode_H
7 #define ClpNode_H
8 
9 #include "CoinPragma.hpp"
10 
11 // This implements all stuff for Clp fathom
16 class ClpFactorization;
17 class ClpDualRowSteepest;
18 class ClpNodeStuff;
19 class ClpNode {
20 
21 public:
29  void applyNode(ClpSimplex *model, int doBoundsEtc);
31  void chooseVariable(ClpSimplex *model, ClpNodeStuff *info);
33  int fixOnReducedCosts(ClpSimplex *model);
35  void createArrays(ClpSimplex *model);
37  void cleanUpForCrunch();
39 
42  inline double objectiveValue() const
44  {
45  return objectiveValue_;
46  }
48  inline void setObjectiveValue(double value)
49  {
50  objectiveValue_ = value;
51  }
53  inline const double *primalSolution() const
54  {
55  return primalSolution_;
56  }
58  inline const double *dualSolution() const
59  {
60  return dualSolution_;
61  }
63  inline double branchingValue() const
64  {
65  return branchingValue_;
66  }
68  inline double sumInfeasibilities() const
69  {
70  return sumInfeasibilities_;
71  }
73  inline int numberInfeasibilities() const
74  {
76  }
78  inline int depth() const
79  {
80  return depth_;
81  }
83  inline double estimatedSolution() const
84  {
85  return estimatedSolution_;
86  }
88  int way() const;
90  bool fathomed() const;
92  void changeState();
94  inline int sequence() const
95  {
96  return sequence_;
97  }
99  inline bool oddArraysExist() const
100  {
101  return lower_ != NULL;
102  }
104  inline const unsigned char *statusArray() const
105  {
106  return status_;
107  }
109 
113  ClpNode();
115  ClpNode(ClpSimplex *model, const ClpNodeStuff *stuff, int depth);
117  void gutsOfConstructor(ClpSimplex *model, const ClpNodeStuff *stuff,
118  int arraysExist, int depth);
120  virtual ~ClpNode();
122 
126  ClpNode(const ClpNode &);
128  ClpNode &operator=(const ClpNode &);
130 
131 protected:
132  // For state of branch
133  typedef struct {
134  unsigned int firstBranch : 1; // nonzero if first branch on variable is up
135  unsigned int branch : 2; // 0 means do first branch next, 1 second, 2 finished
136  unsigned int spare : 29;
137  } branchState;
140  double branchingValue_;
153  unsigned char *status_;
157  double *dualSolution_;
159  int *lower_;
161  int *upper_;
165  int *fixed_;
173  int depth_;
177  int flags_;
187 };
189 
190 public:
194  ClpNodeStuff();
196  virtual ~ClpNodeStuff();
198 
202  ClpNodeStuff(const ClpNodeStuff &);
206  void zap(int type);
208 
212  void fillPseudoCosts(const double *down, const double *up,
213  const int *priority,
214  const int *numberDown, const int *numberUp,
215  const int *numberDownInfeasible, const int *numberUpInfeasible,
216  int number);
218  void update(int way, int sequence, double change, bool feasible);
220  int maximumNodes() const;
222  int maximumSpace() const;
224 
225 public:
228  double integerTolerance_;
233  double smallChange_;
235  double *downPseudo_;
237  double *upPseudo_;
239  int *priority_;
243  int *numberUp_;
249  double *saveCosts_;
255  int *whichRow_;
258 #ifndef NO_FATHOM_PRINT
261 #endif
262  int nBound_;
282  int nDepth_;
284  int nNodes_;
291 #ifndef NO_FATHOM_PRINT
292  int startingDepth_;
296 #endif
297 
298 };
300 
301 public:
304  int index(double value) const;
307  int addValue(double value);
309  inline int numberEntries() const
310  {
311  return numberHash_;
312  }
314 
318  ClpHashValue();
320  ClpHashValue(ClpSimplex *model);
322  virtual ~ClpHashValue();
324 
328  ClpHashValue(const ClpHashValue &);
332 private:
336  int hash(double value) const;
338  void resize(bool increaseMax);
340 
341 protected:
345  // for hashing
347  typedef struct {
348  double value;
349  int index, next;
350  } CoinHashLink;
352  mutable CoinHashLink *hash_;
356  int maxHash_;
360 };
361 #endif
362 
363 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
364 */
int saveOptions_
Save of specialOptions_ (local)
Definition: ClpNode.hpp:265
double * dualSolution_
Dual solution.
Definition: ClpNode.hpp:157
double smallChange_
Small change in branch.
Definition: ClpNode.hpp:233
int * pivotVariables_
Pivot variables for factorization.
Definition: ClpNode.hpp:163
void fillPseudoCosts(const double *down, const double *up, const int *priority, const int *numberDown, const int *numberUp, const int *numberDownInfeasible, const int *numberUpInfeasible, int number)
Fill with pseudocosts.
ClpNode & operator=(const ClpNode &)
Operator =.
ClpNodeStuff()
Default constructor.
int maximumNodes_
Maximum number of nodes to do.
Definition: ClpNode.hpp:276
int * numberUpInfeasible_
Number of times up infeasible.
Definition: ClpNode.hpp:247
int * fixed_
Variables fixed by reduced costs (at end of branch) 0x10000000 added if fixed to UB.
Definition: ClpNode.hpp:165
void gutsOfConstructor(ClpSimplex *model, const ClpNodeStuff *stuff, int arraysExist, int depth)
Does work of constructor (partly so gdb will work)
double branchingValue() const
Initial value of integer variable.
Definition: ClpNode.hpp:63
const unsigned char * statusArray() const
Status array.
Definition: ClpNode.hpp:104
double integerTolerance_
Integer tolerance.
Definition: ClpNode.hpp:229
CoinMessageHandler * handler_
Cbc's message handler.
Definition: ClpNode.hpp:260
void createArrays(ClpSimplex *model)
Create odd arrays.
ClpFactorization * factorization_
Factorization.
Definition: ClpNode.hpp:149
int * numberUp_
Number of times up.
Definition: ClpNode.hpp:243
int nodeCalled_
Node at which called.
Definition: ClpNode.hpp:295
Dual Row Pivot Steepest Edge Algorithm Class.
unsigned char * status_
Status vector.
Definition: ClpNode.hpp:153
This just implements CoinFactorization when an ClpMatrixBase object is passed.
const double * dualSolution() const
Dual solution.
Definition: ClpNode.hpp:58
double objectiveValue_
Value of objective.
Definition: ClpNode.hpp:143
double * saveCosts_
Copy of costs (local)
Definition: ClpNode.hpp:249
int addValue(double value)
Add value to list and return index.
double * primalSolution_
Primal solution.
Definition: ClpNode.hpp:155
void cleanUpForCrunch()
Clean up as crunch is different model.
Base class for message handling.
ClpNode ** nodeInfo_
Array of ClpNodes.
Definition: ClpNode.hpp:251
int numberHash_
Number of entries in hash table.
Definition: ClpNode.hpp:354
double estimatedSolution() const
Estimated solution value.
Definition: ClpNode.hpp:83
int maximumColumns_
Maximum columns so far.
Definition: ClpNode.hpp:183
int maximumRows_
Maximum rows so far.
Definition: ClpNode.hpp:181
ClpHashValue()
Default constructor.
virtual ~ClpHashValue()
Destructor.
void update(int way, int sequence, double change, bool feasible)
Update pseudo costs.
int numberBeforeTrust_
Number before trust from CbcModel.
Definition: ClpNode.hpp:278
ClpHashValue & operator=(const ClpHashValue &)
=
branchState branchState_
State of branch.
Definition: ClpNode.hpp:167
int fixOnReducedCosts(ClpSimplex *model)
Fix on reduced costs.
CoinHashLink * hash_
Hash table.
Definition: ClpNode.hpp:352
double objectiveValue() const
Objective value.
Definition: ClpNode.hpp:43
double * downPseudo_
Down pseudo costs.
Definition: ClpNode.hpp:235
int * numberDownInfeasible_
Number of times down infeasible.
Definition: ClpNode.hpp:245
int nDepth_
Number deep.
Definition: ClpNode.hpp:282
int * whichColumn_
Which columns in large model.
Definition: ClpNode.hpp:257
int index(double value) const
Return index or -1 if not found.
This solves LPs using the simplex method.
Definition: ClpSimplex.hpp:106
const double * primalSolution() const
Primal solution.
Definition: ClpNode.hpp:53
ClpNodeStuff & operator=(const ClpNodeStuff &)
Operator =.
void chooseVariable(ClpSimplex *model, ClpNodeStuff *info)
Choose a new variable.
ClpNode()
Default constructor.
int hash(double value) const
returns hash
int startingDepth_
Depth passed in.
Definition: ClpNode.hpp:293
int maximumSpace() const
Return maximum space for nodes.
double * upPseudo_
Up pseudo costs.
Definition: ClpNode.hpp:237
int maximumNodes() const
Return maximum number of nodes.
double sumInfeasibilities() const
Sum infeasibilities.
Definition: ClpNode.hpp:68
bool oddArraysExist() const
If odd arrays exist.
Definition: ClpNode.hpp:99
ClpDualRowSteepest * weights_
Steepest edge weights.
Definition: ClpNode.hpp:151
int * numberDown_
Number of times down.
Definition: ClpNode.hpp:241
int maximumFixed_
Maximum number fixed by reduced cost.
Definition: ClpNode.hpp:179
int numberInfeasibilities() const
Number infeasibilities.
Definition: ClpNode.hpp:73
void resize(bool increaseMax)
Resizes.
int sequence_
Sequence number of integer variable (-1 if none)
Definition: ClpNode.hpp:169
int depth() const
Relative depth.
Definition: ClpNode.hpp:78
void changeState()
Change state of variable i.e. go other way.
double integerIncrement_
Integer increment.
Definition: ClpNode.hpp:231
int nNodes_
Number nodes returned (-1 if fathom aborted)
Definition: ClpNode.hpp:284
void zap(int type)
Zaps stuff 1 - arrays, 2 ints, 3 both.
int maxHash_
Maximum number of entries in hash table i.e. size.
Definition: ClpNode.hpp:356
ClpSimplex * large_
Large model if crunched.
Definition: ClpNode.hpp:253
int lastUsed_
Last used space.
Definition: ClpNode.hpp:358
void setObjectiveValue(double value)
Set objective value.
Definition: ClpNode.hpp:48
int * priority_
Priority.
Definition: ClpNode.hpp:239
int sequence() const
Sequence number of integer variable (-1 if none)
Definition: ClpNode.hpp:94
bool fathomed() const
Return true if branch exhausted.
int presolveType_
Type of presolve - 0 none, 1 crunch.
Definition: ClpNode.hpp:290
int * lower_
Integer lower bounds (only used in fathomMany)
Definition: ClpNode.hpp:159
int numberInfeasibilities_
Number of infeasibilities.
Definition: ClpNode.hpp:171
double sumInfeasibilities_
Sum of infeasibilities.
Definition: ClpNode.hpp:145
virtual ~ClpNodeStuff()
Destructor.
int flags_
Flags - 1 duals scaled.
Definition: ClpNode.hpp:177
double estimatedSolution_
Estimated solution value.
Definition: ClpNode.hpp:147
int maximumIntegers_
Maximum Integers so far.
Definition: ClpNode.hpp:185
virtual ~ClpNode()
Destructor.
int solverOptions_
Options to pass to solver 1 - create external reduced costs for columns 2 - create external reduced c...
Definition: ClpNode.hpp:274
int * whichRow_
Which rows in large model.
Definition: ClpNode.hpp:255
int nBound_
Number bounds in large model.
Definition: ClpNode.hpp:263
int * upper_
Integer upper bounds (only used in fathomMany)
Definition: ClpNode.hpp:161
int numberNodesExplored_
Number of nodes explored.
Definition: ClpNode.hpp:286
int numberIterations_
Number of iterations.
Definition: ClpNode.hpp:288
int depth_
Relative depth.
Definition: ClpNode.hpp:173
int numberEntries() const
Number of different entries.
Definition: ClpNode.hpp:309
int stateOfSearch_
State of search from CbcModel.
Definition: ClpNode.hpp:280
int way() const
Way for integer variable -1 down , +1 up.
void applyNode(ClpSimplex *model, int doBoundsEtc)
Applies node to model 0 - just tree bounds 1 - tree bounds and basis etc 2 - saved bounds and basis e...
double branchingValue_
Initial value of integer variable.
Definition: ClpNode.hpp:141
int numberFixed_
Number fixed by reduced cost.
Definition: ClpNode.hpp:175