semivar defines a semi-continuous variable


x = semivar(n)
x = semivar(n,m)
x = semivar(n,m,'type')
x = semivar(n,m,'type','field')


YALMIP defines a semi-continuous variable as a variable taking either the value 0, or any value between an upper and lower bound. In contrast to the definitions used in most mixed-integer solver, YALMIP allows negative variables, and will reformulate the model accordingly if required.

The following code defines a least squares problem with a constraint that all variables are either 0, or between 0.1 and 0.3.

A = randn(20,10);
b = randn(20,1);
x = semivar(10,1);

e = b-A*x;
F = [0.1 <= x <= 0.3];

Note that we have defined constraints which cuts away 0 from the feasible set. However, when the variable is defined with semivar, YALMIP understands that the simple bounds relate to the semi-continuous nature of the variable.


semivar requires that the solver used supports semi-continuous variables.