# Beyond Kanban: POLCA-Constrained Scheduling for Job Shops
## 4 Industrial Case: Aerospace Manufacturing Firm
### The Proposed Methodology
#### 4.2.2 Constraint Programming Model
 \tag{12}\] \[\underbrace{\max_{i\in\mathcal{N}}\text{EndOf}(\text{ordItv}_{i})}_{ \text{(v) Maxespan}},\underbrace{\sum_{i\in\mathcal{N}}\text{EndOf}(\text{ordItv} _{i})}_{\text{(vi) Sum of completion times}}\Bigg{)}\end{split}\]  
Subject to:  
\[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\] \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK}+p_{i,j}^{WC },\forall i\in\mathcal{N},j\in\mathcal{J}_{i}\] (14) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WN})=p_{i,j}^{WK}+p_{i,j}^{WC }+p_{i,j}^{PN},\forall i\in\mathcal{N},j\in\mathcal{J}_{i}\] (15) \[\text{StartAtStart}(\text{jobItv}_{i,j}^{WK},\text{jobItv}_{i,j}^{ PWN}),\forall i\in\mathcal{N},j\in\mathcal{J}_{i}\] (16) \[\text{StartAtStart}(\text{jobItv}_{i,j}^{WC},\text{jobItv}_{i,j}^{ PN}),\forall i\in\mathcal{N},j\in\mathcal{J}_{i}\] (17) \[\text{Span}\big{(}\text{ordItv}_{i},\,\{\text{jobItv}_{i}^{PN}: \forall j\in\mathcal{J}_{i}\}\big{)},\forall i\in\mathcal{N}\] (18) \[\text{EndBeforeStart}\big{(}\text{jobItv}_{i,j-1}^{PN},\,\text{jobItv }_{i,j}^{PN},\,\delta_{ij}\big{)},\forall i\in\mathcal{N},j\in\{2,\ldots,J_{ i}\}\] (19) \[\Delta_{ij}^{MIN}\leq\delta_{ij}\leq\Delta_{ij,i}^{MAX},\forall i \in\mathcal{N},j\in\{2,\ldots,J_{i}\}\] (20) \[\text{Alternative}(\text{jobItv}_{i,j}^{WK},\,\{\text{workerItv}_{i,j }:\forall w\in\mathcal{K}_{i,j}\}),\forall i\in\mathcal{N},j\in\{1,\ldots,J_{ i}\}\] (21) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]0 (22) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]1 (23) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]2 (24) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]3 (25) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]4 (26) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]5 (27) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]6 (28) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]7 (29) \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]8  
Job processing is modeled through three distinct interval variables for each job \((i,j)\). According to Equation (13), the worker processing interval \(\text{jobItv}_{i},j^{WK}\) is set to have a size equal to \(pi,j^{WK}\); the processing time on the worker as defined in \[\text{SizeOf}(\text{jobItv}_{i,j}^{WK})=p_{i,j}^{WK},\forall i\in \mathcal{N},j\in\mathcal{J}_{i} \tag{13}\]9 In Equation (14), the workcenter processing interval \(\text{jobItv}_{i},j^{WC}\) is defined with a duration equal to the sum \(pi,j^{WK}+p_{i,j}^{WC}\), where \(p_{i,j}^{WC}\) represents the additional processing time on the workcenter. Equation (15) further extends this definition by introducing the overall processing interval \(\text{jobItv}_{i},j^{PN}\), whose size is the total of \(pi,j^{WK}+p_{i,j}^{WC}+p_{i,j}^{PN}\), incorporating the extra processing time for the part number. Synchronization among these intervals is enforced through Equations (16) and (17), which require that the start of both the worker and workcenter intervals aligns with the start of the overall processing interval \(\mathrm{jobItv}_{i,j}^{PN}\). Moreover, Equation (18) applies the Span constraint to bind the order interval \(\mathrm{ordIttv}_{i}\) to the sequence of overall processing intervals for all jobs within order \(i\), ensuring that the order's time window encapsulates all its constituent jobs.