Cbc
2.10.10
|
Branching object for cliques. More...
#include <CbcClique.hpp>
Public Member Functions | |
CbcClique () | |
Default Constructor. More... | |
CbcClique (CbcModel *model, int cliqueType, int numberMembers, const int *which, const char *type, int identifier, int slack=-1) | |
Useful constructor (which are integer indices) slack can denote a slack in set. More... | |
CbcClique (const CbcClique &) | |
Copy constructor. More... | |
virtual CbcObject * | clone () const |
Clone. More... | |
CbcClique & | operator= (const CbcClique &rhs) |
Assignment operator. More... | |
virtual | ~CbcClique () |
Destructor. More... | |
virtual double | infeasibility (const OsiBranchingInformation *info, int &preferredWay) const |
Infeasibility - large is 0.5. More... | |
virtual void | feasibleRegion () |
This looks at solution and sets bounds to contain solution. More... | |
virtual CbcBranchingObject * | createCbcBranch (OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) |
Creates a branching object. More... | |
int | numberMembers () const |
Number of members. More... | |
int | numberNonSOSMembers () const |
Number of variables with -1 coefficient. More... | |
const int * | members () const |
Members (indices in range 0 ... numberIntegers_-1) More... | |
char | type (int index) const |
Type of each member, i.e., which way is strong. More... | |
int | cliqueType () const |
Clique type: 0 is <=, 1 is ==. More... | |
virtual void | redoSequenceEtc (CbcModel *model, int numberColumns, const int *originalColumns) |
Redoes data when sequence numbers change. More... | |
virtual void | feasibleRegion ()=0 |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. More... | |
virtual double | feasibleRegion (OsiSolverInterface *solver, const OsiBranchingInformation *info) const |
Dummy one for compatibility. More... | |
virtual double | feasibleRegion (OsiSolverInterface *solver) const |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. More... | |
![]() | |
CbcObject () | |
CbcObject (CbcModel *model) | |
CbcObject (const CbcObject &) | |
CbcObject & | operator= (const CbcObject &rhs) |
virtual | ~CbcObject () |
Destructor. More... | |
virtual double | infeasibility (int &) const |
virtual double | feasibleRegion (OsiSolverInterface *solver, const OsiBranchingInformation *info) const |
Dummy one for compatibility. More... | |
virtual double | feasibleRegion (OsiSolverInterface *solver) const |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. More... | |
virtual OsiBranchingObject * | createBranch (OsiSolverInterface *, const OsiBranchingInformation *, int) const |
virtual OsiBranchingObject * | createOsiBranch (OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const |
Create an Osibranching object and indicate which way to branch first. More... | |
virtual OsiSolverBranch * | solverBranch () const |
Create an OsiSolverBranch object. More... | |
virtual CbcBranchingObject * | preferredNewFeasible () const |
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new feasible point in a good direction. More... | |
virtual CbcBranchingObject * | notPreferredNewFeasible () const |
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new feasible point in a bad direction. More... | |
virtual void | resetBounds (const OsiSolverInterface *) |
Reset variable bounds to their original values. More... | |
virtual void | floorCeiling (double &floorValue, double &ceilingValue, double value, double tolerance) const |
Returns floor and ceiling i.e. More... | |
virtual CbcObjectUpdateData | createUpdateInformation (const OsiSolverInterface *solver, const CbcNode *node, const CbcBranchingObject *branchingObject) |
Pass in information on branch just done and create CbcObjectUpdateData instance. More... | |
virtual void | updateInformation (const CbcObjectUpdateData &) |
Update object by CbcObjectUpdateData. More... | |
int | id () const |
Identifier (normally column number in matrix) More... | |
void | setId (int value) |
Set identifier (normally column number in matrix) but 1000000000 to 1100000000 means optional branching object i.e. More... | |
bool | optionalObject () const |
Return true if optional branching object i.e. More... | |
int | position () const |
Get position in object_ list. More... | |
void | setPosition (int position) |
Set position in object_ list. More... | |
void | setModel (CbcModel *model) |
update model More... | |
CbcModel * | model () const |
Return model. More... | |
int | preferredWay () const |
If -1 down always chosen first, +1 up always, 0 normal. More... | |
void | setPreferredWay (int value) |
Set -1 down always chosen first, +1 up always, 0 normal. More... | |
virtual void | initializeForBranching (CbcModel *) |
Initialize for branching. More... | |
Protected Attributes | |
int | numberMembers_ |
data Number of members More... | |
int | numberNonSOSMembers_ |
Number of Non SOS members i.e. fixing to zero is strong. More... | |
int * | members_ |
Members (indices in range 0 ... numberIntegers_-1) More... | |
char * | type_ |
Strong value for each member. More... | |
int | cliqueType_ |
Clique type. More... | |
int | slack_ |
Slack variable for the clique. More... | |
![]() | |
CbcModel * | model_ |
data More... | |
int | id_ |
Identifier (normally column number in matrix) More... | |
int | position_ |
Position in object list. More... | |
int | preferredWay_ |
If -1 down always chosen first, +1 up always, 0 normal. More... | |
Branching object for cliques.
A clique is defined to be a set of binary variables where fixing any one variable to its ‘strong’ value fixes all other variables. An example is the most common SOS1 construction: a set of binary variables x_j s.t. SUM{j} x_j = 1. Setting any one variable to 1 forces all other variables to 0. (See comments for CbcSOS below.)
Other configurations are possible, however: Consider x1-x2+x3 <= 0. Setting x1 (x3) to 1 forces x2 to 1 and x3 (x1) to 0. Setting x2 to 0 forces x1 and x3 to 0.
The proper point of view to take when interpreting CbcClique is ‘generalisation of SOS1 on binary variables.’ To get into the proper frame of mind, here's an example.
Consider the following sequence, where x_j = (1-y_j):
x1 + x2 + x3 <= 1 all strong at 1 x1 - y2 + x3 <= 0 y2 strong at 0; x1, x3 strong at 1 -y1 - y2 + x3 <= -1 y1, y2 strong at 0, x3 strong at 1 -y1 - y2 - y3 <= -2 all strong at 0
The first line is a standard SOS1 on binary variables.
Variables with +1 coefficients are ‘SOS-style’ and variables with -1 coefficients are ‘non-SOS-style’. So numberNonSOSMembers_ simply tells you how many variables have -1 coefficients. The implicit rhs for a clique is 1-numberNonSOSMembers_.
Definition at line 41 of file CbcClique.hpp.
CbcClique::CbcClique | ( | ) |
Default Constructor.
CbcClique::CbcClique | ( | CbcModel * | model, |
int | cliqueType, | ||
int | numberMembers, | ||
const int * | which, | ||
const char * | type, | ||
int | identifier, | ||
int | slack = -1 |
||
) |
Useful constructor (which are integer indices) slack can denote a slack in set.
If type == NULL then as if 1
CbcClique::CbcClique | ( | const CbcClique & | ) |
Copy constructor.
|
virtual |
Destructor.
|
virtual |
Infeasibility - large is 0.5.
Reimplemented from CbcObject.
|
virtual |
This looks at solution and sets bounds to contain solution.
Implements CbcObject.
|
virtual |
Creates a branching object.
Reimplemented from CbcObject.
|
inline |
Number of members.
Definition at line 77 of file CbcClique.hpp.
|
inline |
Number of variables with -1 coefficient.
Number of non-SOS members, i.e., fixing to zero is strong. See comments at head of class, and comments for type_.
Definition at line 86 of file CbcClique.hpp.
|
inline |
Members (indices in range 0 ... numberIntegers_-1)
Definition at line 92 of file CbcClique.hpp.
|
inline |
Type of each member, i.e., which way is strong.
This also specifies whether a variable has a +1 or -1 coefficient.
Indexed as 0 .. numberMembers_-1
Definition at line 106 of file CbcClique.hpp.
|
inline |
Clique type: 0 is <=, 1 is ==.
Definition at line 115 of file CbcClique.hpp.
|
virtual |
Redoes data when sequence numbers change.
Reimplemented from CbcObject.
virtual void CbcObject::feasibleRegion |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution.
virtual double CbcObject::feasibleRegion |
Dummy one for compatibility.
virtual double CbcObject::feasibleRegion |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution.
Returns measure of how much it had to move solution to make feasible
|
protected |
data Number of members
Definition at line 125 of file CbcClique.hpp.
|
protected |
Number of Non SOS members i.e. fixing to zero is strong.
Definition at line 128 of file CbcClique.hpp.
|
protected |
Members (indices in range 0 ... numberIntegers_-1)
Definition at line 131 of file CbcClique.hpp.
|
protected |
Strong value for each member.
This also specifies whether a variable has a +1 or -1 coefficient.
Indexed as 0 .. numberMembers_-1
Definition at line 142 of file CbcClique.hpp.
|
protected |
Clique type.
0 defines a <= relation, 1 an equality. The assumed value of the rhs is numberNonSOSMembers_+1. (See comments for the class.)
Definition at line 149 of file CbcClique.hpp.
|
protected |
Slack variable for the clique.
Identifies the slack variable for the clique (typically added to convert a <= relation to an equality). Value is sequence number within clique menbers.
Definition at line 157 of file CbcClique.hpp.