The GCG Classification
To be able to decompose a mixed-integer program into blocks, we have to understand what the underlying structure of it is. This is done using two different types of classifiers, namely variable classifiers and constraint classifiers. As the name suggests, a variable classifier groups the variables into different categories, e.g. according to its type (binary/integer/continuous), while a constraint classifier does the same for constraints.
In addition to grouping the variables/constraints into different (disjoint) classes, it is also possible to precompute how the variables/constraints of a class should be handled in the later detection. This information is stored for each variable/constraint class in VarClassDecompInfo
and ConsClassDecompInfo
respectively.
Variable Classifiers
Variable classifiers can store in VarClassDecompInfo
how the variables of a class should be handled by a detector:
ALL
= 0 -> not specifiedLINKING
= 1 -> as linking variablesMASTER
= 2 -> as master variablesBLOCK
= 3 -> as block variables
Constraint Classifiers
Constraint classifiers can store in ConsClassDecompInfo
how the constraints of a class should be handled by a detector:
BOTH
-> not specifiedONLY_MASTER
-> assigned to master problemONLY_PRICING
-> assigned to pricing problem
List of Classifiers
Here you find a list of all classifiers available in GCG and a short description of their functionality. They are divided into variable and constraint classifiers.
The following variable classifiers are available:
- Type Classifier (SCIP Variable Type)
- Objective Function Coefficient Classifier (Values)
- Objective Function Coefficient Classifier (Signs)
The following constraint classifiers are available:
- Type Classifier (SCIP Constraint Type)
- Type Classifier (MIPLIB Constraint Type)
- Coefficient Classifier (N-nonzeros)
- Name Classifier (no numbers)
- Name Classifier (Levenshtein)
Adding own Classifiers
If you want to write your own classifier, i.e. define by what criteria you want to classify variables or constraints, please consult the "How to" for that.