User:NicoMeg/sandbox

= Ordonnancement de processus pondérés =

La théorie de l'ordonnancement est une branche de la recherche opérationnelle qui s'intéresse au calcul de dates d'exécution optimales de tâches. Pour cela, il est très souvent nécessaire d'affecter en même temps les ressources nécessaires à l'exécution de ces tâches. Un problème d'ordonnancement peut être considéré comme un sous-problème de planification dans lequel il s'agit de décider de l'exécution opérationnelle des tâches planifiées.

Définition
Un problème d'ordonnancement consiste à organiser dans le temps la réalisation de tâches, compte tenu de contraintes temporelles (délais, contraintes d'enchaînement) et de contraintes portant sur la disponibilité des ressources requises.

En production (manufacturière, de biens, de service), on peut le présenter comme un problème où il faut réaliser le déclenchement et le contrôle de l'avancement d'un ensemble de commandes à travers les différents centres composant le système.

Un ordonnancement constitue une solution au problème d'ordonnancement. Il est défini par le planning d'exécution des tâches (« ordre » et « calendrier ») et d'allocation des ressources et vise à satisfaire un ou plusieurs objectifs. Un ordonnancement est très souvent représenté par un diagramme de Gantt.

Formulation du problème
Soit n tâches notées $$T_i$$ de priorité $$ P_i$$ et de durée d'execution $$t_i$$ pour $$i \in [1,n]$$, le problème vise à ordonnancer les tâches pour minimiser le temps d'exécution total pondéré de ces $$n$$ taches. En notant $$ \sigma $$ une permutation de $$ [1,n] $$ le problème revient à minimiser $$\sum_{i=1}^{n}P_{\sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma(i)} \right ) $$ sur l'ensemble des permutations de $$ [1,n] $$ (noté $$ S_n$$). Dans la suite, nous noterons $$A(\sigma)=\sum_{i=1}^{n}P_{\sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma(i)} \right )$$, cette expression représente la somme pondérée des temps d'exécution des $$ n $$ tâches ordonnancées suivant la permutation $$ \sigma $$.

Le problème revient donc à trouver la permutation $$\sigma^* $$ tel que $$  A(\sigma^*)=\min\limits_{\sigma \in  S_n}  $$.

Ce problème admet une solution (pas nécessairement unique) car $$ \left \{ A(\sigma), \sigma \in S_n \right \} $$ est une partie finie de $$ \mathbb{R}$$.

Il est important de noter que par symétrie, il est possible d'inverser $$ P_i$$ et $$ t_i$$ dans l'expression de $$ A(\sigma)$$, et on trouve : $$A(\sigma)=\sum_{i=1}^{n}t_{\sigma(i)}\left ( \sum_{j=1}^{n+1-i} P_{\sigma(i)}\right ) $$.

Les pondérations sont constantes
Si les pondérations des tâches sont constantes et égales à $$ P $$, en utilisant la seconde expression de $$ A(\sigma) $$ présentée ci-dessus, on peut réécrire $$ A(\sigma) $$ sous la forme suivante : $$A(\sigma)=P.\sum_{i=1}^{n}t_{\sigma(i)}.(n+1-i)$$.

Il vient naturellement que plus $$t_i$$ est exécuté tôt (i.e plus $$ \sigma(i) $$ est faible) plus il aura un poids important dans la somme $$A(\sigma)$$.

La solution optimale du problème est donc d'ordonnancer par ordre croissant de durée d'exécution les processus.

Les durées d'exécution sont constantes
Si les durées d'exécution sont constantes et égales à $$ t $$, en utilisant la première expression de $$ A(\sigma) $$ présentée ci-dessus, on peut réécrire : $$A(\sigma)=t.\sum_{i=1}^{n}P_{\sigma(i)}.i  $$.

Il vient naturellement que plus $$t_i$$ est exécuté tard (i.e plus $$ \sigma(i) $$ est grand) plus il aura un poids important dans la somme $$A(\sigma)$$.

{La solution optimale du problème est donc d'ordonnancer par ordre décroissant de priorité les processus.}

La durée d'exécution d'un processus est très petite devant les autres
Dans le cas où il existe $$ k \in [1,n] $$ tel que $$ t_k \ll t_i $$ pour tout  $$i \in [1,n]\setminus \left \{ k \right \}$$ le processus $$k$$ doit passer en priorité.

Demonstration
Soit $$ \sigma \in S_n| \sigma(k) \neq 1, \exists p \in [1,n] | \sigma(k)=p $$.

On construit une seconde permutation de $$ [1,n]$$, notée $$\sigma'$$qui ramène le p ième élément en première position et décale l'ensemble des éléments avant p d'un élément de la manière suivante:

$$ \left\{\begin{matrix} i=p, & \sigma(i)=1 \\ i p, & \sigma(i)=i \end{matrix}\right. $$

On remarque que la composée de ces 2 permutations est une permutation qui vérifie $$\sigma'(\sigma(k))=1$$ et que \sigma' restreinte à $$ [1,p] $$ est une permutation de $$ [1,p] $$, et de même pour $$ [p+1,n]$$.

$$A(\sigma)=\sum_{i=1}^{n}P_{\sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma(i)} \right )=\sum_{i=1}^{p-1}P_{\sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma(i)} \right ) + P_k.\left ( \sum_{j=1}^{p}t_{\sigma(i)} \right ) + \sum_{i=p+1}^{n}P_{\sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma(i)} \right )$$

$$A(\sigma' \circ \sigma)=\sum_{i=1}^{n}P_{\sigma' \circ \sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma' \circ \sigma(i)} \right )=P_k.t_k +\sum_{i=2}^{p}P_{\sigma' \circ \sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma' \circ \sigma(i)} \right )+\sum_{i=p+1}^{n}P_{\sigma' \circ \sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma' \circ \sigma(i)} \right ) $$

On remarque ensuite que :

$$\sum_{i=2}^{p}P_{\sigma' \circ \sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma' \circ \sigma(i)} \right )=\sum_{i=1}^{p-1}P_{\sigma(i)}\left ( t_k+\sum_{j=1}^{i}t_{\sigma(i)} \right ) $$

or $$ t_k \ll t_i $$ pour tout  $$i \in [1,n]\setminus \left \{ k \right \} \Rightarrow  t_k+\sum_{j=1}^{i}t_{\sigma(i)} \approx \sum_{j=1}^{i}t_{\sigma(i)} $$

Ainsi on a $$\sum_{i=2}^{p}P_{\sigma' \circ \sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma' \circ \sigma(i)} \right )=\sum_{i=1}^{p-1}P_{\sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma(i)} \right ) $$

De plus comme \sigma' restreinte à $$ [1,p] $$ est une permutation de $$ [1,p] $$ et que $$ \sigma$$ est égale à l'identité sur $$[p+1,n]$$,  on a $$  \sum_{j=1}^{i}t_{\sigma' \circ \sigma(i)}  =  \sum_{j=1}^{i}t_{\sigma(i)} $$ pour tout $$ i >p+1$$

ainsi on trouve :

$$\sum_{i=p+1}^{n}P_{\sigma' \circ \sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma' \circ \sigma(i)} \right )= \sum_{i=p+1}^{n}P_{\sigma(i)}\left ( \sum_{j=1}^{i}t_{\sigma(i)} \right )$$

et donc :

$$ A(\sigma)-A(\sigma' \circ \sigma)= P_k.\left ( \sum_{j=1}^{p}t_{\sigma(i)} \right ) -P_k.t_k = P_k.\left ( \sum_{j=1}^{p-1}t_{\sigma(i)} \right) >0$$

Pour toute permutation $$ \sigma $$ de $$[1,n]$$ pour laquelle le kième processus n'est pas en première position, il est donc possible de construire une permutation $$ \sigma' \circ \sigma$$ de $$ [1,n] $$ telle que la somme pondérée des temps d'exécution soit inférieure à celle de $$ \sigma$$ (i.e. $$ A(\sigma' \circ \sigma)<A(\sigma) $$) et donc le kième processus doit passer en premier.

Bibliographie

 * Joseph Y-T. Leung, Handbook of Scheduling: Algorithms, Models, and Performance Analysis, Chapman & Hall/CRC Computer & Information Science Series, 2004.

Articles connexes

 * Théorie de l'ordonnancement
 * Ordonnancement_dans_les_systèmes_d
 * Liste_de_problèmes_NP-complets