0% ont trouvé ce document utile (0 vote)
133 vues9 pages

Introduction à la Programmation Dynamique

Ce document introduit la notion de programmation dynamique. Il présente ses principes clés comme le principe d'optimalité et donne des exemples comme la suite de Fibonacci. Le document décrit également l'algorithme de Floyd-Warshall et l'application de la programmation dynamique au problème du sac à dos.

Transféré par

Hadyl Chokri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
133 vues9 pages

Introduction à la Programmation Dynamique

Ce document introduit la notion de programmation dynamique. Il présente ses principes clés comme le principe d'optimalité et donne des exemples comme la suite de Fibonacci. Le document décrit également l'algorithme de Floyd-Warshall et l'application de la programmation dynamique au problème du sac à dos.

Transféré par

Hadyl Chokri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction

Notion de Programmation Dynamique Certaine

Houda Derbel

FSEGN

Décembre 2020

Houda Derbel Optimisation Décembre 2020 1/9


Introduction

Introduction

La PD est fondée sur le principe d’optimalité : toute partie d’un


chemin (sous-chemin) optimal est elle même optimal (Dém par
absurde)

Le terme programmation à l’époque (Bellman 1952) signifiait


planification et ordonnancement :”Une solution d’un problème dépend
des solutions précédentes obtenues des sous-problèmes”

Résoudre le problème d’un ordre donné en fonction de ses solutions


d’un ordre donné (relation de récurrence)
La programmation dynamique est une méthode dont les calculs se
font de bas en haut

Houda Derbel Optimisation Décembre 2020 2/9


Introduction

Illustration: Suite de Fibonacci


(
F (0) = 1, F (1) = 1
F (n) = F (n − 1) + F (n − 2)

1 Algorithme1:
int function Fibo(int n){
If (n ≤ 1)
return 1;
else return (Fibo(n − 1)+Fibo(n − 2))
}
En suupprimant la récursivité, cet algo. aura une forme typique de la
programmation dynamique:
2 Algorithme2:
int function Fib(int n){
F [1] = 1; F [2] = 1;
For (i = 2; i <= n; i + +)
F [i] = F [i − 1] + F [i − 2];
return (F [i]);
}
Houda Derbel Optimisation Décembre 2020 3/9
Introduction

Etapes de la PD

1 obtention de l’équation récursive : qui lie la solution d’un


problème à celle de sousproblèmes
2 initialisation de la table: conditions initiales de l’équation obtenue à
l’étape 1.
3 Remplissage de la table: résoudre les sous-problèmes de taille de
plus en plus grandes
4 Lecture de la solution: On fait un travail inverse en lisant dans la
table en partant de la solution finale et en faisant le chemin inverse
des calculs effectués en à l’étape 3.

Houda Derbel Optimisation Décembre 2020 4/9


Introduction

Définition
Dans un graphe orienté sans circuit le niveau d’un sommet xi est 0 s’il n’a
pas de prédecesseurs sinon son niveau est la longueur du plus long chemin
ayant xi comme extrêmité finale.
S’il existe un circuit on ne peut plus ordonnancer le graphe.

Ordonanncer un graphe = classer ses sommets par niveau.


Donner une représentation graphique telque les sommets soient de
niveaux croissants.
Si nous avons à construire une autoroute entre les villes A et K .
ayant un coût min.
-L’idée est de retenir à chaque fois les sous-chemins optimaux de
l’étape précedente.
-Les sommets intermidiaires seront classés par groupe de niveau.

vk+1 (ik+1 ) = optk [vk+1 (ik , ik+1 ) + vk∗ (ik )]
vk∗ (ik ): valeur optimal des chemins entre A et les sommets dans le
niveau k
Houda Derbel Optimisation Décembre 2020 5/9
Introduction

Algo. de Floyd-Warshall (W) basé sur la récursion


précédente et le paradigme de la PD

Soit W = (wij )1≤i,j≤n la matrice des poids.


(k)
Soit dij le plus court chemin de i à j n’ayant des sommets
intermédiaires que dans {1, 2, ..., k}
(k)
Définissons d’une manière récursive dij :
(
(k) wij , si k=0
dij = (k−1) (k−1) (k−1)
min(dij , dik + dkj ), sinon

(k)
Soit D (m) = (dij )i,j

Houda Derbel Optimisation Décembre 2020 6/9


Introduction

Algorithme de Floyd

Algorithm 1: Floyd (W )
Result: D (n)
initialization: D 0 ← W ;
for k : 1 → n do
for i : 1 → n do
for j : 1 → n do
(k) (k−1) (k−1) (k−1)
dij ← min(dij , dik + dkj )
end
end
end
Application en classe

Houda Derbel Optimisation Décembre 2020 7/9


Introduction

Résolution du problème de sac à dos par la PD


Rappelons la définition du problème de sac à dos:
Etant donné n objets, chacun a un poids wi et gain vi et un sac de
capacité maximale W . Le problème consiste à choisir un ensemble d’objets
de façon à maximiser le gain total sans dépasser la capacité W du sac.
n
X
max vi xi
i
(P
n
i=1 wi xi≤W
s.c
xi ∈ {0, 1}, i = 1, ..., n

La programmation dynamique peut être développée en divisant le


problème en deux sous-problème comme suit :
Pij désigne le gain maximum généré par le choix des i premiers objets
dont la somme des poids ne dépasse pas j, alors résoudre le problème
revient à trouver la valeur de PnW
. Houda Derbel Optimisation Décembre 2020 8/9
Introduction

En calculant Pij , la séquence d’objets peut être divisée en deux : les


(i − 1) premiers objets et l’objet i. L’objet i est soit choisi soit ignoré
dans Pij
si l’objet i est choisi alors Pij = Pi−1,j−wi + vi
Sinon, on doit trouver la solution optimale parmi les (i − 1) premiers
objets, soit Pi−1,j
les relations récursives sont définies comme suit:

0, si i = 0 ou j=0

Pij = Pi−1,j j < wi , i > 0

max{Pi−1,j , Pi−1,j−wi + vi }

.

Houda Derbel Optimisation Décembre 2020 9/9

Vous aimerez peut-être aussi