CORRIGÉ DU CONTRÔLE DE RECHERCHE OPÉRATIONNELLE 1

Transcription

CORRIGÉ DU CONTRÔLE DE RECHERCHE OPÉRATIONNELLE 1
CORRIGÉ DU CONTRÔLE DE RECHERCHE OPÉRATIONNELLE
1. Question 1 pt
Les enchères sous plis cachetés pour lesquelles l'acheteur a toujours intérêt à proposer le prix auquel il
évalue le bien mis en vente sont les enchère de Vickrey.
2. Positionnement d'entrepôts, forward logistique et reverse logistique 7 pts
Nous proposons dans la suite une modélisation, toute en sachant que plusieurs autres sont possibles.
1) Notons xij (resp. yij ) la part de la demande du client j desservie par l'entrepôt forward (resp. reverse) i.
Notons ui (resp. vi ) la variable binaire codant l'ouverture d'un entrepôt forward (resp. reverse) i.
Un programme linéaire possible est alors
P
P
min
(f u + ri vi + j∈J cij hj (xij + αj yij ))
Pi∈I i i
s.c. Pi∈I xij = hj
j∈J
y
=
α
h
j
∈J
ij
j
j
Pi∈I
x
≤
b
u
i
∈
I
ij
i
i
Pj∈J
y
≤
e
v
i
∈
I
ij
i
i
j∈J
ui , vi ∈ {0, 1}
i ∈ I, j ∈ J,
xij , yij ∈ R+
i ∈ I, j ∈ J.
Ce programme linéaire est décomposable en deux sous-problèmes indépendants : l'un avec les xij et ui et
l'autre avec les yij et vi .
2) En ajoutant la variable zi qui indique la possibilité de fusionner les deux entrepôts lorsqu'il sont tous
deux ouverts en i, on peut modéliser un gain à la mutualisation de la manière suivante :
P
P
min
(f u + ri vi − si zi + j∈J cij hj (xij + αj yij ))
Pi∈I i i
s.c. Pi∈I xij = hj
j∈J
j∈J
i∈I yij = αj hj
zi ≤ ui
i∈I
zP
i∈I
i ≤ vi
xij ≤ bi ui
i∈I
j∈J
P
i∈I
j∈J yij ≤ ei vi
ui , vi ∈ {0, 1}
i ∈ I, j ∈ J,
xij , yij ∈ R+
i ∈ I, j ∈ J.
En eet, si ui et vi sont tous deux égaux à 1, puisqu'on cherche à minimiser la fonction objectif, zi sera
automatiquement mis à 1. Sinon, zi vaut 0, comme souhaité.
3) Même remarque que dans le cours : une fois les ui et vi xés, toutes les autres variables (zi , xij , yij )
sont automatiquement xées, puisqu'on cherche à minimiser la fonction objectif. Les xij et yij sont alors le
résultat d'un problème de transport sur le graphe biparti complet avec I et J les deux classes de couleur.
Par conséquent, une façon compacte de coder les solutions consistent à ne considérer que les couples
(u, v) ∈ {0, 1}2|I| . La valeur d'une solution (u, v) s'obtient en mettant zi = 1 dès que ui = vi = 1 et à
résoudre le problème de transport.
On dit que deux solutions (u, v) et (u0 , v 0 ) sont voisines si
u = u0
0
on passe de v à v par une opération drop, add ou swap dénies en cours,
Date
: 10 février 2010.
1
ou
on passe de u à u0 par une opération drop, add ou swap dénies en cours,
v = v0
Avec une telle dénion de voisinage, l'espace des solutions est clairement connexe, ce qui assure qu'une
recherche locale potentiellement pourra atteindre la meilleure solution.
Remarque : on peut également faire les opérations simultanément sur u et v , mais alors il faut démontrer,
ce qui n'est pas immédiat, que l'espace des solutions est bien connexe...
4) Cela ne change rien, car les hj , αj hj , bi , ei étant entier, le problème de transport a forcément une solution
entière.
3. Déchargement et chargement d'une flotte de camions 6 pts
Si on voit les entrepôts D et C comme des machines, les camions comme des tâches, et le déchargement
et le chargement comme des opérations, on est exactement dans le cas d'un problème de ow-shop à 2
machines, 15 tâches et minimisation du makespan, ce qui se résout en temps polynomial (et même à la main)
par l'algorithme de Johnson. Les durées des opérations sont données par le temps qu'il faut pour décharger
ou charger les boîtes.
Ici la solution est de 91 minutes. On terminera donc au plus tôt à 7h31.
4. Intervalles disjoints et locations rentables 3 pts
1) On considère le graphe orienté D dont l'ensemble des sommets V est la collection d'intervalles C (on
identie alors V et C ) et dans lequel on a un arc (I, J) si l'extrémité supérieure de I est strictement inférieure
à l'extrémité inférieure de J . C'est un graphe acircuitique, et les sommets des chemins élémentaires sont
précisement les sous-ensembles d'intervalles deux à deux disjoints. En mettant comme poids sur tout arc
(I, J) la quantité w(I), et en ajoutant un dernier sommet X et tous les arcs (I, X) avec I ∈ C que l'on
pondère avec w(I), chercher le sous-ensemble d'intervalles de C deux à deux disjoints de poids maximal
revient à chercher le plus long chemin de D pour la pondération w, ce qui se fait par un algorithme de
programmation dynamique (le graphe étant acircuitique). Pour se ramener totalement au cas du cours, on
peut également ajouter un sommet Y et tous les arcs (Y, I) avec I ∈ C que l'on pondère avec 0, et chercher
le chemin de Y à X de plus grand poids.
2) Une demande de location se modélise par un intervalle de la droite réelle dont les extrémités sont les
debut et n de la location, pondéré par la gain qui serait obtenue en satisfaisant cette demande. Maximiser
le gain revient alors à chercher le sous-ensemble d'intervalles disjoints (les locations ne pouvant se recouvrir)
de plus grand poids.
5. Affectation d'employés à des tâches 8 pts
1) L'ordre dans lequel les tâches sont eectuées n'a pas d'importance, pusique le temps total n'est que la
somme des temps de chaque tâche, et que ce temps ne dépend pas de la position de la tâche mais de l'employé
qui y est aecté. Ce qui compte, c'est qu'il n'y a jamais deux employés qui travaillent simultanément. Si
l'on modélise le problème par un graphe biparti complet dont les sommets sont d'une part les employés et
d'autre part les tâches, et dont les arêtes sont pondérées par les tij , on cherche un couplage parfait (puisque
le nombre d'employés est égal au nombre de tâches) de plus petit poids. Si on note xij la variable binaire
codant l'aectation de l'employé Ei à la tâche Tj , les contraintes du programme linéaire de l'énoncé codent
exactement les couplages parfaits. Parmi tous ces couplages, on cherche celui de plus petit poids, c'est ce qui
est donné par la fonction objectif.
2) La modélisation la plus directe consiste à poser b(Ei ) = 1 et b(Tj ) = 1 pour tout i et j . C'est donc un
problème de b-ot de poids minimal, qui se résout en temps polynomial par l'algorithme de Goldberg et
Tarjan. Comme les b(·) sont entiers, il existe une solution optimale entière. De plus, cet algorithme trouve
une solution optimale entière.
Puisqu'il existe une solution optimale entière, on peut également trouver une valeur optimale en temps
polynomial par tout algorithme polynomial de résolution de la programmation linéaire le seul
2
problème ici étant de construire une solution entière à partir d'une solution potentiellement fractionnaire. Il
serait possible de construire un post-traitement.
Enn, il existe un algorithme polynomial dédié, l'algorithme hongrois, dont la vaocation consiste précisément à chercher les couplages parfaits de plus petit poids, dans les graphes bipartis.
Pn Pn
3) i=1 j=1 rij xij ≤ S .
Pn Pn
4) a) En eectuant les transformations proposées par l'énoncé, et en notant que i=1 j=1 xij = n pour
toute solution réalisable, on obtient le programme suivant
n
X
min
ci xii
i=1
n
X
s.c.
xij = 1
pour tout j ∈ {1, . . . , n}
xij = 1
pour tout i ∈ {1, . . . , n}
i=1
n
X
(1)
j=1
n
X
vi xii ≥ B
i=1
xij ∈ {0, 1}
pour tout i, j ∈ {1, . . . , n}.
Or si on savait résoudre en temps polynomial (1), on saurait résoudre le problème de décision proposé
dans l'énoncé
Pn en temps polynomial. En eet, on regarde d'abord si le problème de décision a une solution y
telle que i=1
Pnyi ∈ {n − 1, n}, ce qui se fait en temps linéaire, puisqu'il n'y a que n + 1 vecteurs binaires
satisfaisant i=1 yi ∈ {n − 1, n}.
S'il n'y a pas de telle solution, on résout (1) avec les B , vi et ci donnés dans l'input du problème de
décision. Si l'on trouve une solution optimale à (1) ≤ C , la réponse est `oui' au problème de décision en
posant yi := xii pour tout i. Sinon, c'est que la réponse est `non' car sinon on aurait pu construire une
solution optimale de (1) ≤ C en posant xii := yi , xij := 0, et en xant certains xij à 1, avec i 6= j , de
manière à bien coder un couplage parfait. Ces dernières arêtes étant de coût nul, cela ne changerait pas la
valeur de la fonction objectif.
b) En eet, si le problème de décision de la question précédente se résolvait en temps polynomial,
Pn on saurait
résoudre le problème du sac-à-dos par dichotomie : C est la capacité ; on pose d'abord B := i=1 vi ; puis
si la réponse est `non', on pose B := B/2 ; etc.
5) La borne obtenue par relaxation linéaire est
min
n X
n
X
tij xij
i=1 j=1
s.c.
n
X
xij = 1
pour tout j ∈ {1, . . . , n}
xij = 1
pour tout i ∈ {1, . . . , n}
i=1
n
X
j=1
Pn
i=1
Pn
j=1 rij xij
≤S
pour tout i, j ∈ {1, . . . , n}.
0 ≤ xij ≤ 1
3
Elle se calcule en temps polynomial car c'est un programme linéaire en variables continues.
6) Dans le cas où l'on veut calculer une borne par relaxation lagrangienne, on cherchera à maximiser une
certain fonction concave G(λ), λ ≥ 0, dénie par :
G(λ)
= −λS+
min
n X
n
X
(tij + λrij )xij
i=1 j=1
s.c.
n
X
xij = 1
pour tout j ∈ {1, . . . , n}
xij = 1
pour tout i ∈ {1, . . . , n}
i=1
n
X
j=1
xij ∈ {0, 1}
pour tout i, j ∈ {1, . . . , n}.
Pour la calcul de la valeur d'une borne inférieure, on s'intéresse donc à la famille de programmes linéaires
en nombres entiers suivante, paramétrée par λ :
min
n
n X
X
(tij + λrij )xij
i=1 j=1
s.c.
n
X
xij = 1
pour tout j ∈ {1, . . . , n}
xij = 1
pour tout i ∈ {1, . . . , n}
i=1
n
X
j=1
xij ∈ {0, 1}
pour tout i, j ∈ {1, . . . , n}.
Ils se résolvent en temps polynomial car c'est exactement à nouveau un problème de couplage parfait de
poids min, et on se ramène à la question 2). Pour trouver le λ maximisant G(λ), il existe plusieurs méthodes,
la plus connue étant la méthode du sur-gradient.
4