Integer programming : linearize product of constants given conditions

constraintsinteger programmingmixed-integer programmingnonlinear optimizationoptimization

I have some constant values $c_i$ in $(0.5, 2)$.
I also have binary variables $x_i$. For my integer program, for a particular constraint, I need to multiply only those $c_i$ when $x_i$ takes the value 1.

So basically, $\Pi_i \big[(c_i – 1)x_i + 1\big]$. I'm trying to linearize this. I can put a continuous variable $\gamma_i = (c_i – 1)x_i + 1$ and try to use piecewise linear functions, but since $(c_i – 1)x_i + 1$ can only take two values, i.e., $c_i$ and $1$, is there any way to use this property to have a more efficient linearization?

Best Answer

Depending on how you want to use the resulting product, you might be able to use a log transformation, which yields the linear function $\sum_i \log(c_i)x_i$.

Related Question