I have the following constraint in my model:

$$(\sum_i^I \epsilon_i^m x_{ij} - c_j^m) \sum_k^K w_{jkm} z_{jk} \le \tau_j^m - c_j^m \qquad \forall j, m$$

where $0 \leq x_{ij} \leq 1$ and $z_{jk} = \{0, 1\}$.

$\epsilon_i^m$, $c_j^m$, $\tau_j^m$ are 2d arrays of constants and $w_{jkm}$ is a 3d array of constants.

I merged part of the LHS of the constraint with the product of two variables to arrive at this:

$$\sum_i^I \sum_k^K \epsilon_i^m w_{jkm} x_{ij} z_{jk} - c_j^m \sum_k^K w_{jkm} z_{jk} \leq \tau_j^m - c_j^m \qquad \forall j,m$$

From here, I proceeded to replace the product $x_{ij} z_{jk}$ with $s_{ijk}$ and introduced additional constraints as one would when there is a product of binary variables.

$$\sum_i^I \sum_k^K \epsilon_i^m w_{jkm} s_{ijk} - c_j^m \sum_k^K w_{jkm} z_{jk} \leq \tau_j^m - c_j^m$$ $$x_{ij} - (1 - z_{jk}) \leq s_{ijk}$$ $$s_{ijk} \geq 0$$

After doing this conversion, I realised that all of the examples I have come across introducing replacement variables only replace integer (if not binary) variables. Is this still a legitimate method to replace the nonlinear variable that I have in my model? If this is incorrect, what should I be doing to linearize this constraint instead?


The general form of a linearization of $s=x\cdot z$ with $x\in \{0,1\}$ and $z\in[0,1]$ is: $$ \begin{align} &s \le x\\ &s \le z\\ &s \ge z+x-1\\ &s \in [0,1] \end{align} $$ (You can check by setting $x=0$ , and $x=1$ respectively). This is indeed the same as for $x,z\in \{0,1\}$.

  • $\begingroup$ Ah i see. I realise that I missed the first two constraints you listed. Thank you for the answer! $\endgroup$ – cyeow Feb 22 '17 at 4:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.