How can I convert non-linear constraint to linear one?

540 Views Asked by At

Problem: Suppose I have $n$ finished products and each product has its own completion time, such as C$_i$ (C$_i$=completion time of product $i$, where $i=\{1,2,...,n\}$). These products will be delivered to customers by forming delivery batches, such as B$_{ij}$ (B$_{ij}$=$1$, if product $i$ is allocated to delivery batch $j$; otherwise, B$_{ij}$=$0$). Since completion times of products are different and each delivery batch may contain multiple products, the delivery time of a delivery batch will be the maximum completion time among the allocated products. Suppose, d$_j$ is the delivery time of delivery batch $j$. Then, the constraint can be written as:

$d_j\geq B_{ij}\times C_i$, $\forall i,j$

Let assume that three products $\{1,4,8\}$ with their respective completion times $\{50,60,45\}$ i.e., C$_1$=50, C$_4$=60 and C$_8$=45 form the delivery batch $j=1$, thus result will be B$_{11}$=$1$, B$_{14}$=$1$ and B$_{18}$=$1$. According to the constraint, $d_1$ will be $60$. Since C$_i$, B$_{ij}$ and $d_j$ are all decision variables and thus, the constraint is non-linear. My question is, how can i convert this constraint to linear, keeping the purpose same.

1

There are 1 best solutions below

0
On BEST ANSWER

You want to enforce $$B_{ij}=1\implies C_i\le d_j.$$ You can do so via linear big-M constraints $$C_i-d_j\le M_{ij}(1-B_{ij}),$$ where $M_{ij}$ is a (small) constant upper bound on the LHS when $B_{ij}=0$.