Chaque tâche est affectée à une ressource autorisée (compétence) et démarre dans sa fenêtre. Le solveur minimise le pic de charge journalière par ressource.
ID tâche · Charge par jour actif · Durée (jours consécutifs) · Earliest / Latest de démarrage · Team : nombre de ressources requises simultanément (1 par défaut) · Autorisées : sous-ensemble de ressources pouvant exécuter la tâche.
| ID | Charge | Durée | E | L | Team | Autorisées |
|---|
Tâches $T$, ressources $R$, horizon $H$. Tâche $i$ : charge $\ell_i$, durée $p_i$, fenêtre $[e_i, f_i]$, ressources autorisées $S_i \subseteq R$.
Taille d'équipe imposée (exactement $N_i$ ressources choisies parmi $S_i$, $N_i=1$ par défaut) :
$$ \sum_{r \in S_i} x_{i,r} = N_i \quad \forall i $$Activité ↔ début : $a_{i,d}=1 \iff s_i \le d \le s_i+p_i-1$ (réification avec 2 booléens auxiliaires).
Charge par ressource et pic :
$$ L_{r,d} = \sum_{i:\, r \in S_i} \ell_i \cdot (a_{i,d} \wedge x_{i,r}),\qquad P \ge L_{r,d}\;\;\forall r, d $$Le produit $a \wedge x$ est linéarisé par une variable auxiliaire $z_{i,r,d}$ avec AddBoolAnd / AddBoolOr.
s_i → NewIntVar ·
x_{i,r} → NewBoolVar + Add(Σ x_{i,r} == N_i) ·
a_{i,d} → booléen + réif. OnlyEnforceIf ·
z = a ∧ x → AddBoolAnd / AddBoolOr ·
P ≥ L_{r,d} → contrainte linéaire ·
Minimize(P).