Vous êtes sur la page 1sur 2

Le problème du sac-à-dos

Définition :
Considérons n objets, notés i = 1; :::; n, apportant chacun un bénéfice ci mais possédant un
poids ai. On veut ranger ces objets dans un _sac_ que l'on veut au maximum
de poids b. Le problème de sac-à-dos (knapsack) consiste à choisir les objets à prendre
parmi les n objets de manière à avoir un bénéfice maximal et respecter la contrainte du
poids à ne pas dépasser. Chaque objet i, i 2 f1; :::; ng, doit être sélectionné au moins
pi fois et au plus qi fois.
Ce problème se rencontre bien entendu dès que l'on part en randonnée en voulant
emmener le plus possible d'objets utiles (nourriture, boissons,...). Mais ce problème est
plus fréquemment utilisé pour remplir les camions de transport, les avions ou bateaux
de fret et même pour gérer la mémoire d'un microprocesseur.
La formulation PLNE du problème de sac-à-dos est très simple. On utilise pour
chaque objet i appartient 1; :::; n, une variable entière xi correspondant au nombre de fois
où l'objet i est choisi. Le problème du sac-à-dos est donc équivalent au programme en
nombres entiers suivant.
Max
Xn
i=1
cixi
Xn
i=1
aixi _ b; (3.1)
pi _ xi _ qi; pour i = 1; :::; n;
xi 2 IN; pour i = 1; :::; n:
La contrainte (3.1) est dite contrainte de sac-à-dos. Elle est l'unique contrainte de
ce problème qui est pourtant NP-complet.

Interné théorique :
Le problème du sac à dos est classé comme NP-difficile, ce qui signifie qu'il est difficile
à résoudre exactement en temps polynomial pour des instances de grande taille. Cela
le place dans la classe des problèmes d'optimisation combinatoire difficiles, ce qui a
suscité un intérêt considérable de la part des chercheurs en informatique théorique.
En raison de la complexité du problème du sac à dos, il est souvent nécessaire de
recourir à des algorithmes d'approximation pour obtenir des solutions proches de
l'optimalité. L'étude de ces algorithmes permet de développer des techniques
heuristiques et des stratégies d'approximation efficaces pour résoudre le problème du
sac à dos dans des limites de temps raisonnables. Le problème du sac à dos peut être
résolu de manière exacte à l'aide de techniques de programmation dynamique.
L'analyse et la conception d'algorithmes de programmation dynamique pour le
problème du sac à dos ont des implications plus larges dans la résolution de
problèmes similaires en optimisation combinatoire. ce probleme admet de
nombreuses variantes et extensions, telles que le sac à dos multidimensionnel, le sac
à dos multiple, le sac à dos fractionnaire, etc. L'étude de ces variations permet de
mieux comprendre les limitations et les propriétés structurelles du problème, ainsi
que d'explorer de nouvelles applications et généralisations.
En résumé, l'intérêt théorique du problème du sac à dos réside dans sa complexité
computationnelle, l'étude des algorithmes d'approximation, la programmation
dynamique, les extensions et les variantes du problème, ainsi que ses nombreuses
applications pratiques.

Vous aimerez peut-être aussi