CORRIGÉ DU CONTRÔLE DE RECHERCHE OPÉRATIONNELLE 2013 Creuser une rivière artificielle à moindre coût 3 pts 1. C'est un problème de plus court chemin. Il peut être résolu par l'algorithme de Dijkstra, mais cela risque d'être long. Il vaut mieux utiliser l'équation de programmation dynamique, le graphe étant acircuitique. On pouvait aussi le résoudre en supprimant progressivement les arcs dominés par des chemins dans le graphe. π(x) Si on note le coût minimal d'un chemin de π(x) = s à x, on a min (π(y) + c(yx)). y∈N − (x) En appliquant cette formule de proche en proche, on obtient en mettant en indice le sommet précédent qui π(s) = 0, π(a) = 3s , π(b) = 8a , π(c) = 9s , π(d) = 21b , π(f ) = 20b , π(k) = 24f , π(g) = 26d , π(e) = 32d , π(i) = 44e , π(h) = 29g , π(l) = 37h , π(m) = 51l , π(n) = 54h , π(o) = 59n , π(q) = 38k , π(j) = 42e , π(r) = 55q , π(p) = 58j , π(t) = 64p . Le chemin optimal est s − a − b − d − e − j − p − t. minimise : 2. Utilisation optimisée d'un stock 3 pts 1. Ce problème se modélise comme un problème de couplage parfait de poids maximum dans un graphe biparti, pour lequel il existe plusieurs algorithmes polynomiaux. 2. Il sut de trier les τi dans l'ordre croissant, et faire sortir les objets dans cet ordre. tj l'objet i, et à l'instant tj+1 , l'objet i0 avec τi > τi0 . f (tj + τi ) + f (tj+1 + τi0 ). Or, d'après l'indication, on a En eet, supposons que l'on fasse sortir à l'instant La contribution au revenu de ces deux objets est f (tj+1 + τi0 ) − f (tj + τi0 ) ≤ f (tj+1 + τi ) − f (tj + τi ), ce qui est équivalent à f (tj + τi ) + f (tj+1 + τi0 ) ≤ f (tj+1 + τi ) + f (tj + τi0 ). On ne détériore pas le revenu en échangeant les places de 3. 3.1. i et de Ordonnancement de voitures sur une chaîne de montage 10 pts Cas général 6 pts. 1. La fonction objectif est 2. Pour tout k, zi,o = Pn−1 P yi,c = k∈K δk,o xi,k ρui + i=1 on doit avoir 3. On doit avoir Pn i=1 P o∈O xi,k = nk , P Pn−qo i=1 et pour tout k∈K k,c xi,k pour tout i i ∈ {1, . . . , n} et tout pour tout γo vi,o . i ∈ {1, . . . , n}, ∈ {1, . . . , n} o ∈ O. 4. Il y a deux solutions. La première consiste à écrire et tout c ∈ C. P k∈K xi,k = 1. De même, on doit avoir j=i uj ≥ 1 pour tout i ∈ {1, . . . , n − r + 1}. C'est Pi+r j=i yj,c ≤ r pour tout i ∈ {1, . . . , n − r} et c ∈ C. i et tout c les Pi+qo −1 zj,o − po . j=i 5. On a pour tout o, on doit avoir Pi+r−1 celle-là que l'on retiendra. L'autre solution consiste à écrire tout i0 . on a Date vi,o ≥ inégalités ui ≥ yi,c − yi+1,c : 6 février 2013. 1 et ui ≥ yi+1,c − yi,c . Par ailleurs, pour tout i et 6. Le programme linéaire complet est alors min Pn−1 i=1 ρui + Pn−qo o∈O Pn i=1 γo vi,o Pi=1 xi,k = nk P s.c. xi,k = 1 yi,c = P k∈K k,c xi,k zi,o = k∈K δk,o xi,k Pi+r−1 uj ≥ 1 j=i ui ≥ yi,c − yi+1,c u ≥ yi+1,c − yi,c Pii+q −1 vi,o ≥ j=io zj,o − po ui , yi,c , zi,o , xi,k ∈ {0, 1} vi,o ∈ Z+ . Pk∈K 7. On vérie aisément que xi,k = nk /n pour tout i et k k∈K i ∈ {1, . . . , n} i ∈ {1, . . . , n}, c ∈ C i ∈ {1, . . . , n}, k ∈ K i ∈ {1, . . . , n − r + 1} i ∈ {1, . . . , n − 1}, c ∈ C i ∈ {1, . . . , n − 1}, c ∈ C o ∈ O, i ∈ {1, . . . , n − qo + 1} est solution réalisable de ce programme. Montrons que cette solution est également optimale. La condition sur les options assure que le terme des options de la fonction objectif est nul. L'autre terme de la fonction objectif est alors égal à bn/rcρ. Or cette quantité est aussi une borne inférieure car c'est la valeur du programme suivant obtenu en supprimant des contraintes : min s.c. Pn−1 ρui Pi+r−1i=1 u ≥ 1 i ∈ {1, . . . , n − r + 1} j j=i ui ∈ {0, 1}. La valeur optimale du relâché continu est donc bien bn/rcρ. Cette borne est probablement de piètre qualité car elle ne tient absolument pas compte des contraintes sur les options. 3.2. Cas particuliers 4 pts. 3.2.1. Si r = +∞ et qo = 2 pour tout o ∈ O. 8. Chaque sommet correspond a une voiture distincte. Sur chaque arête chaînement qo = 2 , ij ij , on met le coût qu'aurait l'en- dans un ordonnancement des voitures. Comme il n'y a pas de contraintes sur les couleurs et le coût total d'un ordonnancement ne dépend que des paires de voitures consécutives. Ce coût se calcule de la manière suivante : cij = ρ × 1voitures i et j de couleurs diérentes + X γo × 1voitures i et j ont toutes deux l'option o et po = 1 o∈O Une chaîne ouverte de plus petit coût correspond à un ordonnancement réalisable de plus petit coût. 1, sauf le sommet 3 qui n'est 2. La quantité 5 × 1 + 2 = 7 est donc une borne inférieure sur le coût optimal. 1, 4, 6, 2, 7, 5, 3 est de coût 7 et est donc optimal. 9. Dans ce cas particulier, tous les sommets sont incidents à une arête de coût incident qu'à des arêtes de coût La suite réalisable 3.2.2. Si O = ∅. ∗ 10 . Ecrivons d'abord une condition nécessaire. de couleur c∗ mc∗ est le nombre minimum de blocs de voitures consécutives que l'on pourra trouver dans la séquence. Ces blocs doivent être séparés les uns des autres d'au moins une voiture de couleur c 6= c∗ . Une condition nécessaire est donc X mc∗ − 1 ≤ Nc . c∈C\{c∗ } c mc blocs de voitures consécutives de couleur c. Par dénition de mc , on peut choisir ces blocs de longueur ≤ r et bien avoir toutes les voitures. On va essayer de construire une solution en posant les blocs les uns Montrons qu'elle est également susante. Pour cela on considère que l'on dispose pour chaque couleur de derrière les autres. Deux cas sont à distinguer : 2 ∗ c∈C\{c∗ } mc : on peut utiliser un bloc monocouleur de couleur c 6= c pour séparer deux ∗ blocs consécutifs de couleur c . Les blocs en trop peuvent être placés entre deux blocs de couleurs mc∗ − 1 ≤ P diérentes. On peut donc construire une solution avec le nombre de changements de couleur dans ce cas est mc P bloc de couleur c, pour tout c ∈ C. Noter que c∈C mc − 1. P mc∗ − 1 > c∈C\{c∗ } mc : dans ce cas, on a mc < mc∗ pour tout c. On `casse' autant de blocs de ∗ couleurs c 6= c qu'il faut an d'arriver à un nombre de blocs = mc∗ − 1, puis on applique la méthode décrite au point précédent. Noter que le nombre de changements de couleur dans ce cas est 2mc∗ − 2. P Enn, montrons l'optimalité de ces solutions. Pour cela, il sut de noter que c∈C mc est le nombre P minimum de blocs monocouleurs que l'on peut avoir. m − 1 est donc une borne inférieure. D'autre c c∈C ∗ part, entre deux blocs consécutifs de couleur c , on a forcément 2 changements de couleurs, donc 2mc∗ − 2 est aussi une borne inférieure. 4. Utilisation des espaces vacants dans une flotte de camions 7 pts c et deux zones visitées t(c) = 2 est exactement le problème du sac-à-dos (c) pour la capacité K − k1 : les objets sont alors les clients, et la valeur d'un objet est le g (`) correspondant. Le problème du sac-à-dos étant NP-dicile, notre problème l'est aussi. 1. La cas particulier à un seul camion (c) 2. z = z0 h0 . z 6= z 0 et h0 > h : l'arc modélise le fait de laisser la marchandise en la zone et il existe c et j tels que (c) z = zj de marchandise possible par le camion 3. Si z = z0, alors Qa = +∞. c , (c) (c) Qa = K (c) − kj Sinon, de l'instant (c) h à l'instant z 0 = zj+1 et h0 = hj+1 : l'arc modélise un 0 0 zone z à l'instant h à la zone z à l'instant h . h = hj de la (c) z , pour les c et j transport dénis à la question précédente. 4. Le programme linéaire est le suivant. max s.t. X g (`) y (`) `∈L X κ(`) x(`) a ≤ Qa `∈L X X x(`) x(`) a = a a∈δ + (v) X xa(`) a∈A (`) (`) ` ∈ L, v ∈ V \ {vo , vd } a∈δ − (v) (`) `∈L =y (`) a∈δ + (vo ) (`) xa , y (`) ∈ {0, 1}. 5. La relaxation continue consiste à remplacer les contraintes (`) xa , y (`) ∈ {0, 1} par (`) xa , y (`) ∈ [0, 1]. Le problème d'optimisation peut alors être résolu en temps polynomial par la méthode des points intérieurs ou de façon ecace par l'algorithme du simplexe. Sa valeur est une borne supérieure pour notre problème de départ. On peut donc faire un branch-and-bound utilisant cette borne. 6. La fonction obectif devient : − P `∈L g (`) y (`) . 3 7. On a G(λ) = X XX min − g (`) y (`) + λa (κ(`) xa(`) − Qa ) `∈L `∈L X Xa∈A (`) (`) s.t. x(`) = x(`) ` ∈ L, v ∈ V \ {vo , vd } a a a∈δ − (v) a∈δ + (v) X (`) x(`) a =y `∈L (`) a∈δ + (vo ) (`) xa , y (`) ∈ {0, 1}. Ce programme d'optimisation est séparable en les ` : il n'y a pas de contraintes liant des variables de ` diérents. Calculer pour a∈A G(λ) revient donc à savoir résoudre les programmes de la forme suivante, avec g , κ, λa et Qa vo , vd deux sommets xés de G. X min −gy + λa κxa X X a∈A xa v ∈ V \ {vo , vd } xa = s.t. des constantes réelles positives, et a∈δ + (v) X a∈δ − (v) xa = y a∈δ + (vo ) xa , y ∈ {0, 1}. Ce programme se résoute de la manière suivante : on calcule le plus court chemin dans a un coût λa κ. Si son coût est < g , alors la solution optimale est donnée par xa et on a y = 1. Sinon, la solution optimale est y = xa = 0 pour tout a ∈ A. G avec sur tout arc ce plus court chemin pour les Le calcul du plus court chemin peut être fait par Dijkstra, ou mieux par la programmation dynamique, le graphe étant acircuitique. 8. D'après la question précédente, on sait calculer ecacement les surgradients et maximiser G(λ). G(λ). D'après le cours, on sait alors en calculer On sait donc calculer des bornes inférieures à notre problème et on peut faire un branch-and-bound utilisant les bornes de la relaxation lagrangienne plutôt que celle de la relaxation continue. 4