Vous êtes sur la page 1sur 3

M1 Année 2020 – 2021

Descartes
Algorithmes approchés & online – optimisation
(Correction)

Exercice 1 : Bin packing


Dans le problème du “bin packing”, nous avons n objets de poids (l’unité de poids est omise dans ce qui
suit) a1 , a2 , · · · , an avec pour tout i ∈ {1, 2, · · · , n} 0 < ai ≤ 1. Nous devons mettre ces objets dans
des paquets (sacs) pouvant supporter au plus un poids 1. Il s’agît alors d’écrire un algorithme capable de
ranger les objets (donnés en entrée) en utilisant le moins de paquets possibles.
A titre d’exemple, si en entrée nous avons :

[0.3, 0.2, 0.2, 0.2, 0.2, 0.4, 0.5]

l’algorithme optimal devrait ranger les objets en 2 paquets

[0.3, 0.2, 0.5] puis [0.2, 0.2, 0.2, 0.4]

Un algorithme d’approximation consiste à d’abord trier les ai en ordre décroissant puis de manière
gloutonne à mettre les objets dans le premier paquet disponible tant que celui-ci peut recevoir un objet.
1
1. Montrer que si pour tout i, ai > 3 alors l’algorithme glouton consistant à trier puis ranger est optimal.
.
– Avec cette hypothèse (ai > 1/3), chaque objet de poids supérieur à 2/3 occupe un paquet (un objet — un
paquet). Quelque soit l’algorithme utilisé, on peut donc les enlever.
– On peut donc supposer que tous les objets ont un poids dans l’intervalle ]1/3, 2/3[. On peut aussi observer
qu’un paquet peut contenir au mieux deux objets. Donc au mieux, on mettra deux objets de poids dans
l’intervalle ]1/3, 1/2[ dans un même paquet et c’est ce que fait l’algorithme.
– Voyons sur un exemple.

[0.88, 0.94, 0.42, 0.94, 0.75, 0.40, 0.52, 0.70, 0.97, 0.98, 0.44,
0.98, 0.97, 0.68, 0.87, 0.43, 0.61, 0.94, 0.86, 0.97, 0.77, 0.36,
0.90, 0.96, 0.79, 0.84, 0.83, 0.59, 0.77, 0.45, 0.80, 0.35, 0.52,
0.36, 0.40, 0.88, 0.80, 0.54, 0.97, 0.36]

Tri décroissant :

[.98, .98, .97, .97, .97, .97, .96, .94, .94, .94, .90, .88, .88,
.87, .86, .84, .83, .80, .80, .79, .77, .77, .75, .70, .68, .61,
.59, .54, .52, .52, .45, .44, .43, .42, .40, .40, .36, .36, .36, .35]

On peut enlever ceux qui vont occuper un paquet (poids > 2/3), il reste

[.61, .59, .54, .52, .52, .45, .44, .43, .42, .40, .40, .36, .36, .36, .35]

L’évolution des paquets est alors p1 := [.61], p2 := [.59], p3 := [.54] p4 := [.52], p5 := [.52]. Puis p3 :=
[.54, .45] (de poids 0.99). Puis p4 := [.52, .44] et p5 := [0.52, .43]. Quand .42 arrive, on ne peut que le
mettre tout seul dans p6 := [.42]. Le premier .40 est mis dans p2 qui devient p2 := [.59, .40]. Le second est
mis dans p6 := [.42, .40]. Quand le premier .36 arrive, on le met dans le premier paquet : p1 := [.61, .36].
Les paquets p1 , p2 , p3 , p5 , p5 , p6 sont donc remplis à plus de 2/3 = 0.66 . . .. On aura donc à ouvrir deux
paquets pour le reste p7 := [.36, .36] et p8 := [.35]. On remarque que seul un paquet seul (ici p8 ) est rempli
à moins de 2/3.
2. Maintenant on suppose qu’il existe i tel que 0 < ai < 1/3. Montrer qu’au plus un paquet n’est pas
rempli à plus de 2/3.
.

1
M1 Année 2020 – 2021

– On utilise l’algorithme. On peut voir le tableau comme scindé en deux, les éléments strictement plus grands
que 1/3 et les autres.
– Précédemment, on a vu que la première partie du tableau traité avec l’algorithme va remplir tous les paquets
à plus de 2/3 (sauf au plus un). Pour la seconde partie du tableau, les objets de poids < 1/3 peuvent être
regroupés (au moins 3 par paquets) Chaque paquet constitué est de poids > 2/3 sauf 1 (sinon on pourra
encore mettre un objet).
3. Montrer que c’est un algorithme d’approximation polynomial dont la solution offerte S (S := nombre
de paquets) vérifie
3
SOpt ≤ S ≤ 1 + SOpt
2
où SOpt est la solution optimale (nombre minimum de paquets).
.
– Le tri se fait en temps polynomial O(n log n) (si n est le nombre des objets).
– Après les rangements des paquets vont se faire en au plus O(n2 ) itérations.
– Comme S est une solution et SOpt la plus petite solution pour un problème d’optimisation difficile, nous
avons
SOpt ≤ S .
– Tous les paquets sont remplis à plus de deux tiers sauf au plus 1 (même pour la solution optimale), nous
avons donc (en notant par m le nombre de paquets d’un algorithme quelconque)

SOpt est donnée par un rangement (a1 + · · · ) (· · · + · · · ) · · · (· · · + · · · ) .


| {z } | {z } | {z }
1er paquet 2nd paquet m-ième paquet

En considérant le poids des paquets (chaque paquet pèse au moins 2/3) :


2
SOpt ≥ m.
3

4. Si le raisonnement précédent est basé sur 1/3, est-ce-que la même démarche fonctionne si on prend
1/4 (au lieu et en place de 1/3) ?
.
– On espère que le même raisonnement va conduire à
4
SOpt ≤ S ≤ 1 + SOpt .
|{z} 3
problème ?

Si on revient à l’exemple

[.61, .59, .54, .52, .52, .45, .44, .43, .42, .40, .40, .36, .36, .36, .35]

auquel on rajoute un nombre indéfini de 0.24 < 1/4 = 0.25 :

[.61, .59, .54, .52, .52, .45, .44, .43, .42, .40, .40, .36, .36, .36, .35, .24, .24, · · · , .24 ]
| {z }
un grand nombre

Il est clair qu’on a aussi un nombre indéfini de paquets avec [0.24, 0.24, 0.24] (de poids 0.72 < 3/4) qui ne
sont pas remplis à plus de 3/4.
Donc, on n’a plus l’assertion “tous les paquets sont remplis à 3/4 sauf 1” ! (On aura toujours l’assertion
équivalente pour 2/3.)
– D’autre part, le cours nous dicte qu’il y a une limite à l’approximabilité sauf si P = N P . Autrement dit,
on aura toujours
S − SOpt 2
≥ 1 − > ε > 0.
S 3
(sauf si P = N P .)

2
M1 Année 2020 – 2021

Exercice 2 : Von Neumann et correction de biais du random online


Dans cet exercice, on veut simuler un tirage aléatoire Pile ou Face de manière équiprobable avec une
pièce biaisée P.
1. Montrer comment simuler une pièce non biaisée avec la pièce biaisée.
. P F et F P sont équiprobables

2. Montrer alors comment simuler un dé à K faces si on ne dispose que de la pièce P.


. exemple K = 15 il suffit de “virer” une des 16 réalisations pppppf, pf p, ..., f f f avec p = P F , f = F P

3. Dans le cas où on a besoin de générer plusieurs bits aléatoires montrer qu’on peut “optimiser” en
“recyclant des bits”.

Exercice 3 : MAX-SAT & FPT


Dans le problème MAXSAT paramétré par k, nous avons une formule CNF F construite sur n variables
et contenant m clauses (chaque clause pouvant être de taille ≥ 2). Le problème de décision est de savoir
si nous pouvons satisfaire au moins k clauses.
m
1. Montrer que si k ≤ 2 alors la réponse est toujours oui.
. Considérons une affectation arbitraire des n variables. Si une clause n’est pas satisfaite, il suffit d’inverser
l’affectation des variables de cette clause pour la satisfaire. Donc si moins de k clauses sont SAT, nous avons
au moins m − k clauses UNSAT. m − k ≥ m − m 2
= m 2
En inversant les variables dans ces m − k clauses
UNSAT, nous obtenons m − k clauses SAT (au moins dont m/2).

On suppose maintenant k > m S que k est une


2 . On dit qu’une clause de longueur strictement plus petite
clause courte (dans le cas contraire, c’est une clause longue). On divise la formule en F` Fc où F` sont
les clauses longues (et Fc les courtes). On note ν = |F` |.
2. Montrer que si k ≤ ν alors la réponse au problème de décision est toujours oui.
. Sans perte de généralité F` = {C1 , C2 , · · · , Cν }. On lance le glouton suivant : on considère la clause Ci
en commençant pas C1 . On prend un littéral non encore affecté à vrai dans Ci puis on valide Ci en affectant
ce littéral à vrai. A l’itération i, au plus i − 1 variables ont été affectées et sur des clauses longues on peut
toujours faire cela k fois (dessin).

3. Montrer que pour k > ν alors k clauses de la formule F peuvent être SAT si et seulement si au moins
k − ν clauses de Fc peuvent être SAT.
.
“retour” Supposons que k − ν clauses de Fc peuvent être SAT. On va satisfaire ν clauses de F` car pour
satisfaire les k − ν clauses de Fc on fixe au plus k − ν variables et le glouton permet de satisfaire ν clauses
longues.
“aller” S’il n’est pas possible de satisfaire au moins k − ν clauses de Fc alors satisfaire l’ens. de toutes les
clauses longues ne suffira pas à satisfaire au moins k clauses.
4. Déduire alors que MAXSAT ∈ FPT.
. |Fc | = m − ν ≤ m < 2k. Chaque clause courte a au plus k littéraux. Le nombre de variables impliquées dans
2
les clauses courtes est < 2k2 . On peut donc décider si k − ν clauses de Fc peuvent être SAT en 2O(k ) n.

Vous aimerez peut-être aussi