MIP features in LP file format
CPLEX conforms to these rules about MIP features in the LP file format.
LP file format supports special features of mixed integer programming (MIP), such as binary variables, integer variables, semi-continuous variables, special ordered sets (SOS), and branching priorities. See also Piecewise linear (PWL) constraints in LP file format for more information about piecewise linear (PWL) constraints in LP file format.
MIP integer variables
This rule applies to the CPLEX MIP optimizer.
To specify any of the variables as general integer variables,
add a GENERAL
section; to specify any of the variables
as binary integer variables, add a BINARY
section. The GENERAL
and BINARY
sections follow the BOUNDS
section, if
one is present; otherwise, they follow the constraints section. Either
of the GENERAL
or BINARY
sections can precede the other. The GENERAL
section is preceded by the word GENERAL
,
GENERALS
, or GEN
in
any mix of upper- and lowercase characters which must appear alone
on a line. The following line or lines should list the names of all
variables which are to be restricted to general integer values, separated
by at least one space. The BINARY
section
is preceded by the word BINARY
, BINARIES
,
or BIN
in
any mix of upper- and lowercase characters which must appear alone
on a line. The following line or lines should list the names of all
variables which are to be restricted to binary integer values, separated
by at least one space. Binary variables are automatically given bounds
of 0 (zero) and 1 (one), unless alternative bounds are specified in
the BOUNDS
section, in which case a warning
message is issued.
Here is an example of a problem
formulation in LP format where x4
is a
general integer:
Maximize
obj: x1 + 2 x2 + 3 x3 + x4
Subject To
c1: - x1 + x2 + x3 + 10 x4 <= 20
c2: x1 - 3 x2 + x3 <= 30
c3: x2 - 3.5 x4 = 0
Bounds
0 <= x1 <= 40
2 <= x4 <= 3
General
x4
End
If branching priorities or branching directions exist, enter this information through ORD files, as documented in ORD file format: priorities and branching orders.
MIP semi-continuous variables
This rule applies to the CPLEX MIP optimizer.
To specify any of the variables as
semi-continuous variables, that is as variables that may take the value 0
or values
between the specified lower and upper bounds, use a SEMI-CONTINUOUS
section. This
section must follow the BOUNDS
, GENERALS
, and
BINARIES
sections. The SEMI-CONTINUOUS
section is preceded by the
keyword SEMI-CONTINUOUS
, SEMI
, or SEMIS
. The
following line or lines should list the names of all the variables which are to be declared
semi-continuous, separated by at least one space.
To specify a semi-integer variable, the name
of the variable must be listed both in the GENERAL
and the
SEMI-CONTINUOUS
sections.
Semi-continuous
x1 x2 x3
MIP special ordered sets
This rule applies to the CPLEX MIP optimizer. To specify special ordered sets, use an SOS section, which is preceded by the SOS keyword. The SOS section should follow the Bounds, General, Binaries and Semi-Continuous sections. Special ordered sets of type 1 require that, of the variables in the set, one at most may be nonzero. Special ordered sets of type 2 require that at most two variables in the set may be nonzero, and if there are two nonzeros, they must be adjacent. Adjacency is defined by the weights, which must be unique within a set given to the variables. The sorted weights define the order of the special ordered set. For MIP branch and cut, the order is used to decide how the variables are branched upon. See the CPLEX User’s Manual for more information. The set is specified by an optional set name followed by a colon and then either of the S1 or S2 keywords (specifying the type) followed by a double colon. The set member names are listed on this line or lines, with their weights. Variable names and weights are separated by a colon, for example:
SOS
set1: S1:: x1:10 x2:13
MIP indicator constraints
This rule applies to CPLEX MIP optimizer.
To specify an indicator constraint, enter it among any other constraints in the model, like this:
[constraintname:] binaryvariable = value -> linear constraint
The constraint name, followed by a colon,
is optional. The hyphen followed by the greater-than symbol (->
),
separates the indicator variable and its
value from the linear constraint that is controlled. The indicator
variable must be declared as a binary variable, and the value it is
compared to must be either 0 (zero) or 1 (one).
These limitations apply to indicator constraints in LP file format:
- The constraint must be linear; a quadratic constraint is not allowed to have an indicator constraint.
- A lazy constraint cannot have an indicator constraint.
- A user-defined cut cannot have an indicator constraint.