Université Abou Bakr Belkaid
Faculté des Sciences
Département d’informatique
Algorithmique Avancée et Complexité
Chap6: Les méthodes de résolution exactes
RSD-GL 1
2014-2015
1
3)L’algorithme glouton(Résolution approchée)
• On appelle glouton un algorithme qui considère des objets
dans un certain ordre, décide de les retenir dans la solution
en tenant compte uniquement des contraintes et qui ne
revient pas sur cette décision par la suite.
• Pour ce qui concerne le sac à dos l’idée est de classer les objets
par ordre d’interêts décroissants, l’intérêt étant le quotient du
gain par le poids.
l'algorithme glouton ne fournit pas toujours la solution
optimale
C’est une méthode rapide et donne une solution optimale
Au problème de sac à dos fractionné.
2
L’algorithme glouton(Résolution approchée)
Exemple: Sac à dos
Objets 1 2 3 4
Poids 2 5 4 3
Bénéfices 5 8 7 6
Benif/poids 2.5 1.6 1.8 2
J'ai un sac à dos de capacité maximale k (poids). J'ai n objets de
poids et de valeurs diverses.
Je souhaite remplir le sac de façon à cumuler un maximum de
valeurs.
Quel est le bénéfice maximum que je peux avoir?
Dans cet exemple K=10
Et On cherche B_max?
1)Methode minimisant le poids 5+6+7=18
2)Methode maximisant le benifices 8+7=15
3) Maximisation Benifices/poids 5+7+6=18 3
Formulation du problème
Objets 1 2 3 4
Poids 2 5 4 3
Bénéfices 5 8 7 6
Max Z= 5x1+8x2+7x3+6x4
2X1+5x2+4x3+3x4 ≤ 10
Xi{0,1}, i=1..4
4
Sac à dos -programmation dynamique
Objets 1 2 3 4
Poids 2 5 4 3
Bénéfices 5 8 7 6
0 1 2 3 4 5 6 7 8 9 10
i j
Objet 1 0 0 5 5 5 5 5 5 5 5 5
Objet 2 0 0 5 5 5 8 8 13 13 13 13
Objet 3 0 0 5 5 7 8 8 13 14 15 15
Objet 4 0 0 5 6 7 11 11 13 14 15 19
Résultats: objets(4,2,1)
bénifice=6+8+5=19
5
Sac à dos -programmation dynamique
• On note B(k, p) le bénéfice maximal réalisable avec des objets
1, 2, . . . , k et le poids maximal p
pour k = 1:
0 si p < p1
B(1,p)=
a1 si p > p1
Pour k > 1
B(k − 1, p) si p < pk
B(k,p)=
max(B(k − 1, p),B(k − 1, p − poidsObjet[k]) + valeurObjet[k] )
Si p >= poidsObjet[k]
Complexité T(n) = Ө(k*p) 6
Sac à dos -programmation dynamique
Algorithme pour Récupérer la liste d'objets (sac à dos)
TANT QUE M[i][j] = M[i][j-1]
Début
j=j-1
Fin
TANT QUE j > 0
début
TANT QUE i > 0 ET M[i][j] = M[i-1][j]
début
i=i-1
fin
j = j - PoidsObjet[i]
Ajoute-objet ( Objet[i] )
i=i-1
fin
7
Programmation Dynamique
Plus court chemin
•
Algorithme de Floyd-Warshal
L'algorithme de Floyd-Warshall prend en entrée un graphe orienté et valué (V, E),
sous la forme d'une matrice d'adjacence donnant le poids d'un arc lorsqu'il existe
et la valeur ∞ sinon. Le poids d'un chemin entre deux sommets est la somme des
poids sur les arcs constituant ce chemin.
Ce problème n'ayant aucune signification métrique.
8
Programmation Dynamique
Algorithme de Floyd-Warshal
9
Programmation Dynamique
Algorithme de Floyd-Warshal
• Floyd-Warshall(W)
• D(0)W
• Pour k1 à n faire
Pour i1 à n faire
pour j1 à n faire
Di(,kj) min( Di(,kj1) , Di(,kk1) Dk( k, j1) )
Renvoyer D
10
La méthode séparation et
évaluation (Branch and Bound)
• Le branch-and-bound est basé sur trois axes
principaux :
– L’évaluation: permet de réduire l’espace de recherche en éliminant
quelques sous ensembles qui ne contiennent pas la solution optimale.
– La séparation: consiste à diviser le problème en sous-problèmes, en
résolvant tous les sous-problèmes et en gardant la meilleure solution
trouvée.
– La stratégie de parcours:
– largeur d’abord
– profondeur d’abord
– meilleur d’abord
11
La méthode séparation et
évaluation (Branch and Bound)
12
Algorithme de Djikstra
13