I am working on a flexible job-shop scheduling problem, where indices are as follows:
- $i$: Index of operations
- $j$: Index of jobs
- $m$: Index of machines
- $p$: Index of operation sequences on a machine
The decision variables of this model are defined as follows:
- $x_{ijmp} \in \{0, 1\}$: If operation $O_{ij}$ is allocated to machine $m$ with sequence $p$, 1; otherwise, 0
- $t_{ij} \geq 0$: Start time of operation $O_{ij}$
- $t'_{pm} \geq 0$: Start time of machine $m$ in sequence $p$
Suppose $S_{ij}$ is the processing time of operation $O_{ij}$ (a preset parameter). If $a_{lm} \geq 0$, I need constraint sets that specify:
- $a_{lm} = S_{ij}$ if $\sum_{p} x_{ijmp} = 1$ and $l = t_{ij}$ (or $a_{lm} = S_{ij}$ if $x_{ijmp} = 1$ and $l = t'_{mp}$) $\forall l, m$
- $a_{lm} = 0$ if ($\sum_{i,j,p} x_{ijmp} = 0$) or ($\sum_{p} x_{ijmp} = 1$ and $l \neq t_{ij}$ for all operations) $\forall l, m$
Since the time set is large in my application (300+ time slots for real-sized instances), I think it might be better not to use a time-indexed formulation (i.e., $x_{ijmt}$). How do you efficiently formulate such a constraint set?