Cbc  trunk
Public Member Functions | Protected Attributes
CbcClique Class Reference

Branching object for cliques. More...

#include <CbcClique.hpp>

+ Inheritance diagram for CbcClique:
+ Collaboration diagram for CbcClique:

List of all members.

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 CbcObjectclone () const
 Clone.
CbcCliqueoperator= (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 CbcBranchingObjectcreateCbcBranch (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.

Detailed Description

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.


Constructor & Destructor Documentation

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

Copy constructor.

virtual CbcClique::~CbcClique ( ) [virtual]

Destructor.


Member Function Documentation

virtual CbcObject* CbcClique::clone ( ) const [virtual]

Clone.

Implements CbcObject.

CbcClique& CbcClique::operator= ( const CbcClique rhs)

Assignment operator.

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.

  • 0 => -1 coefficient, 0 is strong value
  • 1 => +1 coefficient, 1 is strong value If unspecified, all coefficients are assumed to be positive.

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.


Member Data Documentation

int CbcClique::numberMembers_ [protected]

data Number of members

Definition at line 119 of file CbcClique.hpp.

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.

  • 0 => -1 coefficient, 0 is strong value
  • 1 => +1 coefficient, 1 is strong value If unspecified, all coefficients are assumed to be positive.

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.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines