Cbc trunk
|
Branching object for cliques. More...
#include <CbcClique.hpp>
Public Member Functions | |
CbcClique () | |
Default Constructor. | |
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. | |
CbcClique (const CbcClique &) | |
Copy constructor. | |
virtual CbcObject * | clone () const |
Clone. | |
CbcClique & | operator= (const CbcClique &rhs) |
Assignment operator. | |
virtual | ~CbcClique () |
Destructor. | |
virtual double | infeasibility (const OsiBranchingInformation *info, int &preferredWay) const |
Infeasibility - large is 0.5. | |
virtual void | feasibleRegion () |
This looks at solution and sets bounds to contain solution. | |
virtual CbcBranchingObject * | createCbcBranch (OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) |
Creates a branching object. | |
int | numberMembers () const |
Number of members. | |
int | numberNonSOSMembers () const |
Number of variables with -1 coefficient. | |
const int * | members () const |
Members (indices in range 0 ... numberIntegers_-1) | |
char | type (int index) const |
Type of each member, i.e., which way is strong. | |
int | cliqueType () const |
Clique type: 0 is <=, 1 is ==. | |
virtual void | redoSequenceEtc (CbcModel *model, int numberColumns, const int *originalColumns) |
Redoes data when sequence numbers change. | |
Protected Attributes | |
int | numberMembers_ |
data Number of members | |
int | numberNonSOSMembers_ |
Number of Non SOS members i.e. fixing to zero is strong. | |
int * | members_ |
Members (indices in range 0 ... numberIntegers_-1) | |
char * | type_ |
Strong value for each member. | |
int | cliqueType_ |
Clique type. | |
int | slack_ |
Slack variable for the clique. |
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 CbcClique::~CbcClique | ( | ) | [virtual] |
Destructor.
virtual double CbcClique::infeasibility | ( | const OsiBranchingInformation * | info, |
int & | preferredWay | ||
) | const [virtual] |
Infeasibility - large is 0.5.
Reimplemented from CbcObject.
virtual void CbcClique::feasibleRegion | ( | ) | [virtual] |
This looks at solution and sets bounds to contain solution.
Implements CbcObject.
virtual CbcBranchingObject* CbcClique::createCbcBranch | ( | OsiSolverInterface * | solver, |
const OsiBranchingInformation * | info, | ||
int | way | ||
) | [virtual] |
Creates a branching object.
Reimplemented from CbcObject.
int CbcClique::numberMembers | ( | ) | const [inline] |
Number of members.
Definition at line 78 of file CbcClique.hpp.
int CbcClique::numberNonSOSMembers | ( | ) | const [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.
const int* CbcClique::members | ( | ) | const [inline] |
Members (indices in range 0 ... numberIntegers_-1)
Definition at line 91 of file CbcClique.hpp.
char CbcClique::type | ( | int | index | ) | const [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 104 of file CbcClique.hpp.
int CbcClique::cliqueType | ( | ) | const [inline] |
Clique type: 0 is <=, 1 is ==.
Definition at line 110 of file CbcClique.hpp.
virtual void CbcClique::redoSequenceEtc | ( | CbcModel * | model, |
int | numberColumns, | ||
const int * | originalColumns | ||
) | [virtual] |
Redoes data when sequence numbers change.
Reimplemented from CbcObject.
int CbcClique::numberMembers_ [protected] |
data Number of members
Definition at line 119 of file CbcClique.hpp.
int CbcClique::numberNonSOSMembers_ [protected] |
Number of Non SOS members i.e. fixing to zero is strong.
Definition at line 122 of file CbcClique.hpp.
int* CbcClique::members_ [protected] |
Members (indices in range 0 ... numberIntegers_-1)
Definition at line 125 of file CbcClique.hpp.
char* CbcClique::type_ [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 136 of file CbcClique.hpp.
int CbcClique::cliqueType_ [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 143 of file CbcClique.hpp.
int CbcClique::slack_ [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 151 of file CbcClique.hpp.