Cbc 2.10.12
Loading...
Searching...
No Matches
CbcClique Class Reference

Branching object for cliques. More...

#include <CbcClique.hpp>

Inheritance diagram for CbcClique:
Collaboration diagram for CbcClique:

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.
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

◆ CbcClique() [1/3]

CbcClique::CbcClique ( )

Default Constructor.

◆ CbcClique() [2/3]

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() [3/3]

CbcClique::CbcClique ( const CbcClique & )

Copy constructor.

◆ ~CbcClique()

virtual CbcClique::~CbcClique ( )
virtual

Destructor.

Member Function Documentation

◆ clone()

virtual CbcObject * CbcClique::clone ( ) const
virtual

Clone.

◆ operator=()

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

Assignment operator.

◆ infeasibility()

virtual double CbcClique::infeasibility ( const OsiBranchingInformation * info,
int & preferredWay ) const
virtual

Infeasibility - large is 0.5.

◆ feasibleRegion()

virtual void CbcClique::feasibleRegion ( )
virtual

This looks at solution and sets bounds to contain solution.

◆ createCbcBranch()

virtual CbcBranchingObject * CbcClique::createCbcBranch ( OsiSolverInterface * solver,
const OsiBranchingInformation * info,
int way )
virtual

Creates a branching object.

◆ numberMembers()

int CbcClique::numberMembers ( ) const
inline

Number of members.

Definition at line 77 of file CbcClique.hpp.

◆ numberNonSOSMembers()

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.

◆ members()

const int * CbcClique::members ( ) const
inline

Members (indices in range 0 ... numberIntegers_-1).

Definition at line 92 of file CbcClique.hpp.

◆ type()

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 106 of file CbcClique.hpp.

◆ cliqueType()

int CbcClique::cliqueType ( ) const
inline

Clique type: 0 is <=, 1 is ==.

Definition at line 115 of file CbcClique.hpp.

◆ redoSequenceEtc()

virtual void CbcClique::redoSequenceEtc ( CbcModel * model,
int numberColumns,
const int * originalColumns )
virtual

Redoes data when sequence numbers change.

Member Data Documentation

◆ numberMembers_

int CbcClique::numberMembers_
protected

data Number of members

Definition at line 125 of file CbcClique.hpp.

◆ numberNonSOSMembers_

int CbcClique::numberNonSOSMembers_
protected

Number of Non SOS members i.e. fixing to zero is strong.

Definition at line 128 of file CbcClique.hpp.

◆ members_

int* CbcClique::members_
protected

Members (indices in range 0 ... numberIntegers_-1).

Definition at line 131 of file CbcClique.hpp.

◆ type_

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 142 of file CbcClique.hpp.

◆ cliqueType_

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 149 of file CbcClique.hpp.

◆ slack_

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 157 of file CbcClique.hpp.


The documentation for this class was generated from the following file: