Cbc 2.10.11
Loading...
Searching...
No Matches
CbcNode.hpp
Go to the documentation of this file.
1/* $Id$ */
2// Copyright (C) 2002, 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 CbcNode_H
7#define CbcNode_H
8
9#include <string>
10#include <vector>
11
12#include "CoinWarmStartBasis.hpp"
13#include "CoinSearchTree.hpp"
14#include "CbcBranchBase.hpp"
15#include "CbcNodeInfo.hpp"
16#include "CbcFullNodeInfo.hpp"
18
19class OsiSolverInterface;
20class OsiSolverBranch;
21
22class OsiCuts;
23class OsiRowCut;
24class OsiRowCutDebugger;
25class CoinWarmStartBasis;
26class CbcCountRowCut;
27class CbcModel;
28class CbcNode;
29class CbcSubProblem;
30class CbcGeneralBranchingObject;
31
49class CbcNode : public CoinTreeNode {
50
51public:
54
56 CbcNode(CbcModel *model, CbcNode *lastNode);
57
59 CbcNode(const CbcNode &);
60
63
66
82 void
84 CbcNode *lastNode,
85 const CoinWarmStartBasis *lastws,
86 const double *lastLower, const double *lastUpper,
87 int numberOldActiveCuts, int numberNewCuts);
88
110 CbcNode *lastNode,
111 int numberPassesLeft);
138 CbcNode *lastNode,
139 OsiSolverBranch *&branches,
140 int numberPassesLeft);
168 CbcNode *lastNode,
169 OsiBranchingInformation *usefulInfo,
170 int branchState);
187 CbcNode *lastNode);
188 int analyze(CbcModel *model, double *results);
190 void decrementCuts(int change = 1);
191
193 void decrementParentCuts(CbcModel *model, int change = 1);
194
206
208 int branch(OsiSolverInterface *solver);
209
213 double checkIsCutoff(double cutoff);
214 // Information to make basis and bounds
215 inline CbcNodeInfo *nodeInfo() const
216 {
217 return nodeInfo_;
218 }
219
220 // Objective value
221 inline double objectiveValue() const
222 {
223 return objectiveValue_;
224 }
225 inline void setObjectiveValue(double value)
226 {
227 objectiveValue_ = value;
228 }
230 inline int numberBranches() const
231 {
232 if (branch_)
233 return (branch_->numberBranches());
234 else
235 return (-1);
236 }
237
238 /* Active arm of the attached OsiBranchingObject.
239
240 In the simplest instance, coded -1 for the down arm of the branch, +1 for
241 the up arm. But see OsiBranchingObject::way()
242 Use nodeInfo--.numberBranchesLeft_ to see how active
243 */
244 int way() const;
246 inline int depth() const
247 {
248 return depth_;
249 }
251 inline void setDepth(int value)
252 {
253 depth_ = value;
254 }
256 inline int numberUnsatisfied() const
257 {
258 return numberUnsatisfied_;
259 }
261 inline void setNumberUnsatisfied(int value)
262 {
263 numberUnsatisfied_ = value;
264 }
266 inline double sumInfeasibilities() const
267 {
268 return sumInfeasibilities_;
269 }
271 inline void setSumInfeasibilities(double value)
272 {
273 sumInfeasibilities_ = value;
274 }
275 // Guessed objective value (for solution)
276 inline double guessedObjectiveValue() const
277 {
279 }
280 inline void setGuessedObjectiveValue(double value)
281 {
283 }
285 inline const OsiBranchingObject *branchingObject() const
286 {
287 return branch_;
288 }
290 inline OsiBranchingObject *modifiableBranchingObject() const
291 {
292 return branch_;
293 }
295 inline void setBranchingObject(OsiBranchingObject *branchingObject)
296 {
298 }
300 inline int nodeNumber() const
301 {
302 return nodeNumber_;
303 }
304 inline void setNodeNumber(int node)
305 {
306 nodeNumber_ = node;
307 }
309 inline bool onTree() const
310 {
311 return (state_ & 1) != 0;
312 }
314 inline void setOnTree(bool yesNo)
315 {
316 if (yesNo)
317 state_ |= 1;
318 else
319 state_ &= ~1;
320 }
322 inline bool active() const
323 {
324 return (state_ & 2) != 0;
325 }
327 inline void setActive(bool yesNo)
328 {
329 if (yesNo)
330 state_ |= 2;
331 else
332 state_ &= ~2;
333 }
335 inline int getState() const
336 {
337 return state_;
338 }
340 inline void setState(int value)
341 {
342 state_ = value;
343 }
345 void print() const;
347 inline void checkInfo() const
348 {
349 assert(nodeInfo_->numberBranchesLeft() == branch_->numberBranchesLeft());
350 }
351
352private:
353 // Data
363 OsiBranchingObject *branch_;
375};
376
377#endif
378
379/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
380*/
OsiRowCut augmented with bookkeeping.
Simple Branch and bound class.
Definition CbcModel.hpp:100
Information required to recreate the subproblem at this node.
int numberBranchesLeft() const
Return number of branches left in object.
Information required while the node is live.
Definition CbcNode.hpp:49
int numberUnsatisfied_
The number of objects unsatisfied at this node.
Definition CbcNode.hpp:367
int way() const
void setNumberUnsatisfied(int value)
Set the number of objects unsatisfied at this node.
Definition CbcNode.hpp:261
double objectiveValue() const
Definition CbcNode.hpp:221
CbcNode(const CbcNode &)
Copy constructor.
double guessedObjectiveValue_
Guessed satisfied Objective value.
Definition CbcNode.hpp:359
int nodeNumber_
The node number.
Definition CbcNode.hpp:369
CbcNodeInfo * nodeInfo() const
Definition CbcNode.hpp:215
int depth() const
Depth in branch-and-cut search tree.
Definition CbcNode.hpp:246
void setDepth(int value)
Set depth in branch-and-cut search tree.
Definition CbcNode.hpp:251
CbcNode(CbcModel *model, CbcNode *lastNode)
Construct and increment parent reference count.
void nullNodeInfo()
Nulls out node info.
OsiBranchingObject * modifiableBranchingObject() const
Modifiable branching object for this node.
Definition CbcNode.hpp:290
double sumInfeasibilities() const
Get sum of "infeasibilities" reported by each object.
Definition CbcNode.hpp:266
CbcNode()
Default Constructor.
bool active() const
Returns true if active.
Definition CbcNode.hpp:322
CbcNodeInfo * nodeInfo_
Information to make basis and bounds.
Definition CbcNode.hpp:355
void initializeInfo()
Initialize reference counts in attached CbcNodeInfo.
double sumInfeasibilities_
Sum of "infeasibilities" reported by each object.
Definition CbcNode.hpp:361
void setBranchingObject(OsiBranchingObject *branchingObject)
Set branching object for this node (takes ownership)
Definition CbcNode.hpp:295
int chooseBranch(CbcModel *model, CbcNode *lastNode, int numberPassesLeft)
Create a branching object for the node.
void setSumInfeasibilities(double value)
Set sum of "infeasibilities" reported by each object.
Definition CbcNode.hpp:271
bool onTree() const
Returns true if on tree.
Definition CbcNode.hpp:309
int getState() const
Get state (really for debug)
Definition CbcNode.hpp:335
OsiBranchingObject * branch_
Branching object for this node.
Definition CbcNode.hpp:363
void checkInfo() const
Debug.
Definition CbcNode.hpp:347
double guessedObjectiveValue() const
Definition CbcNode.hpp:276
void setGuessedObjectiveValue(double value)
Definition CbcNode.hpp:280
int depth_
Depth of the node in the search tree.
Definition CbcNode.hpp:365
const OsiBranchingObject * branchingObject() const
Branching object for this node.
Definition CbcNode.hpp:285
void setNodeNumber(int node)
Definition CbcNode.hpp:304
void decrementParentCuts(CbcModel *model, int change=1)
Decrement all active cut counts in chain starting at parent.
int chooseOsiBranch(CbcModel *model, CbcNode *lastNode, OsiBranchingInformation *usefulInfo, int branchState)
Create a branching object for the node.
void setOnTree(bool yesNo)
Sets true if on tree.
Definition CbcNode.hpp:314
int chooseDynamicBranch(CbcModel *model, CbcNode *lastNode, OsiSolverBranch *&branches, int numberPassesLeft)
Create a branching object for the node - when dynamic pseudo costs.
int branch(OsiSolverInterface *solver)
Does next branch and updates state.
void createInfo(CbcModel *model, CbcNode *lastNode, const CoinWarmStartBasis *lastws, const double *lastLower, const double *lastUpper, int numberOldActiveCuts, int numberNewCuts)
Create a description of the subproblem at this node.
int analyze(CbcModel *model, double *results)
void setActive(bool yesNo)
Sets true if active.
Definition CbcNode.hpp:327
int numberUnsatisfied() const
Get the number of objects unsatisfied at this node.
Definition CbcNode.hpp:256
~CbcNode()
Destructor.
void decrementCuts(int change=1)
Decrement active cut counts.
int nodeNumber() const
The node number.
Definition CbcNode.hpp:300
void print() const
Print.
int chooseClpBranch(CbcModel *model, CbcNode *lastNode)
Create a branching object for the node.
int numberBranches() const
Number of arms defined for the attached OsiBranchingObject.
Definition CbcNode.hpp:230
void setObjectiveValue(double value)
Definition CbcNode.hpp:225
int state_
State 1 - on tree 2 - active.
Definition CbcNode.hpp:374
void setState(int value)
Set state (really for debug)
Definition CbcNode.hpp:340
CbcNode & operator=(const CbcNode &rhs)
Assignment operator.
double checkIsCutoff(double cutoff)
Double checks in case node can change its mind! Returns objective value Can change objective etc.
double objectiveValue_
Objective value.
Definition CbcNode.hpp:357