# What is the performance improvement when using semi-continuous variables instead of binary + continuous variable pair?

I have a MILP model that solves a master production schedule including capacity decisions. In the model I have a production quantity that should either be 0 or at least the amount that can be produced in one shift (or half shift), i.e., a minimium production quantity. Right now this is modeled using two variables, one binary and one continuous.

The actual implementation right now is done with Google's or-tools which doesn't support semi-continuous variables, so I can't easily test this out. I would need to rewrite the whole model using a solver specific API and that would take quite some time.

The model is solved in about 24h (with a reasonable gap remaining), it has more than 100,000 rows, 150,000 columns, and 600,000 non-zeros. Due to this "minimum quantity" I have about 28,000 binary variables in the model and without it there would be only a handful (basically choosing between different capacity levels). I tried removing the minimum quantity restriction (and thus those binary variables) and the model is solved in 2-3h to optimality.

Would the use of semi-continuous variables instead of the binary-continuous pair allow the model to be solved faster than using two variables? Are there any examples that show this difference in similar sized dimensions?

• Would you ask just about the variable type changing or you would like to reduce the solving time? Oct 23 '20 at 19:42
• I want the model to be solved faster and thus I wanted to know whether adding semi-continuous variables in place of the binary-continuous variable pair could be expected to have an impact Oct 24 '20 at 5:41
• For the first part, the excellent answer of Dr 4er would be interested. About the second part to reduce the solving time, would you try using the state-of-art solvers to do that? have you tried to feed a warm-start solution to your model by heuristic methods which are frequently used in industries like calculating master schedule by using MRP to initialize a prior solution? might be some constraints interpreted as the lazy to reduce the solution space? Oct 24 '20 at 6:03