ILOG CPLEX 11.0 User's Manual > Discrete Optimization > Using Semi-Continuous Variables: a Rates Example > What Are Semi-Continuous Variables?

A semi-continuous variable is a variable that by default can take the value 0 (zero) or any value between its semi-continuous lower bound (sclb) and its upper bound (ub). The semi-continuous lower bound (sclb) must be finite. The upper bound (ub) need not be finite. The semi-continuous lower bound (sclb) must be greater than or equal to 0 (zero). An attempt to use a negative value for the semi-continuous lower bound (sclb) will result in that bound being treated as 0 (zero).

In Concert Technology, semi-continuous variables are represented by the class IloSemiContVar. To create a semi-continuous variable, you use the constructor from that class to indicate the environment, the semi-continuous lower bound, and the upper bound of the variable, like this:

IloSemiContVar mySCV(env, 1.0, 3.0);

That statement creates a semi-continuous variable with a semi-continuous lower bound of 1.0 and an upper bound of 3.0. The method IloSemiContVar::getSemiContinuousLB returns the semi-continuous lower bound of the invoking variable, and the method IloSemiContVar::getUB returns the upper bound. That class, its constructors, and its methods are documented in the ILOG CPLEX Reference Manual of the C++ API.

In that manual, you will see that IloSemiContVar derives from IloNumVar, the Concert Technology class for numeric variables. Like other numeric variables, semi-continuous variables assume floating-point values by default (type ILOFLOAT). However, you can designate a semi-continuous variable as integer (type ILOINT). In that case, it is a semi-integer variable.

For details about the feasible region of a semi-continuous or semi-integer variable, see the documentation of IloSemiContVar in the ILOG CPLEX Reference Manual of the C++ API.

In the Callable Library, semi-continuous variables can be entered with type CPX_SEMICONT or CPX_SEMIINT via the routine CPXcopyctype. In that case, the lower bound of 0 (zero) is implied; the semi-continuous lower bound is defined by the corresponding entry in the array of lower bounds; and likewise, the semi-continuous upper bound is defined by the corresponding entry in the array of upper bounds of the problem.

Semi-continuous variables can be specified in MPS and LP files. Stating a MIP Problem tells you how to specify variables as semi-continuous.