Méthodes exactes en optimisation combinatoire

Un autre algorithme de programmation dynamique pour le problème de sac-à-dos

Dans cette partie, nous allons décrire une autre construction possible de la programmation dynamique en prenant toujours comme exemple le problème de sac-à-dos.

Cette construction se base sur la création itérative d'un espace d'états représentant les solutions partielles générées à chaque niveau de la récurrence.

ExempleInstance du problème

Pour illustrer la technique en question, on s'appuie sur la même instance du problème dont les paramètres sont le suivants :

Pour rappel, notre problème peut être formulé comme suit :

Maximiser 11x₁+8x₂+5x₃

tel que :

7x₁+6x₂+4x₃≤10

xi∈{0,1} ∀ 1≤i≤3

MéthodePrincipe

Le principe de la deuxième approche consiste à construire à chaque itération i=0,1,2,...,N un ensemble Ei contenant des états [u,v] associés à des solutions partielles faisant intervenir les i premiers objets en sachant que :

- u est l'utilité totale associée à l'état,

- v est le volume utilisé associé à l'état.

Les relations de récurrence, nécessaires pour calculer les états à chaque itération, se basent sur le principe suivant.

FondamentalRègle d'évolution

Soit [u,v] un état de l'ensemble E(i-1) généré à l'itération i-1 (i=1,2,...,N). A partir de cet état, deux états peuvent être créés dans l'ensemble E(i) à l'itération suivante selon les conditions suivantes :

  • [u + wi, v + vi] si v + vi ≤Vmax (ceci implique que l'objet i a été pris dans le sac)

  • [u, v] (cela implique que l'objet i n'a pas été pris dans le sac).

MéthodeAlgorithme

  • E(0)={[0,0]}

  • Pour i=1,2,3,...,N

    • Initialiser E(i)={}.

    • Créer pour chaque [u,v] de E(i-1) deux états [u + wi, v + vi] si v + vi ≤Vmax et [u,v] et les insérer dans E(i).

    • Supprimer E(i-1).

    • Pour chaque valeur v, garder au maximum un état [u,v] dans E(i) avec u maximal.

  • Retourner max [u,v] dans E(n) {u}

Calcul et résultats

Le détail du calcul est résumé dans le tableau suivant :

Ensembles d'états E(i)

i

E(i)

0

{[0,0]}

1

{[0,0] ; [11,7]}

2

{[0,0] ; [8,6] ; [11,7]}

3

{[0,0] ; [5,4] ; [8,6] ; [13,10] ;[11,7]}

Le valeur maximale est obtenue pour l'état [13,10] dans E(3), ce qui confirme que l'utilité optimale est égale à 13.

Fondamental

La complexité de l'algorithme de programmation dynamique est de O(N.Vmax). En effet, on peut remarquer que le nombre d'états générés à chaque itération est borné par (Vmax+1). De plus, nous avons (N+1) itérations à réaliser. Ceci conduit également à une complexité de O(N.Vmax).

SimulationVisualiser l'espace d'états

L'ensemble d'états à chaque itération est calculé et représenté dans l'animation suivante. Afin d'assurer une meilleure compréhension de l'algorithme proposé, nous recommandons au lecteur de visualiser le fichier PPS suivant. La grille représente l'espace d'états et les coordonnées des points s'affichant à chaque itération représentent les valeurs des états associés. Il est important de noter que la grille est dimensionnée pour que tout état réalisable puisse être représenté (Vmax est la borne supérieure pour la variable v et (w1+w2+w3) est une borne supérieure pour la variable u).

Cette animation facilitera donc de saisir étape par étape l'exécution progressive de l'algorithme.

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Ce support pédagogique a été élaboré par Imed Kacem (courriel : imed.kacem@univ-lorraine.fr). Licence : Domaine PublicRéalisé avec Scenari (nouvelle fenêtre)