1. Creuser une rivière artificielle à moindre coût 3 pts 2. Utilisation

publicité
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
Téléchargement