Le sac à dos standard 0/1 exige que le poids de chaque élément soit indépendant des autres. Alors DP est un algorithme efficace vers la solution. Mais maintenant j'ai rencontré un problème similaire mais avec des extensions de ce problème, à savoir
le poids des nouveaux éléments dépend des éléments précédents déjà présents dans le système. le sac à dos.
Par exemple nous avons 5 articles a
, b
, c
, d
y e
avec poids w_a
, ..., w_e
. point b
y c
ont une dépendance de poids.
Lorsque b
est déjà dans le sac à dos, le poids de l'élément c
sera plus petit que w_c
car il peut partager un espace avec b
c'est-à-dire weight(b&c) < w_b + w_c
. Symétriquement, lorsque c
est déjà dans le sac à dos, le poids de b
sera plus petit que w_b
.
Cette incertitude entraîne l'échec de l'algorithme DP original, puisqu'il dépend de l'exactitude des itérations précédentes qui peuvent ne pas être correctes maintenant. J'ai lu quelques articles sur le knapsack mais ils ont soit des dépendances soumises à profit ( problème de sac à dos quadratique ), ou ont un poids variable qui suit une distribution aléatoire ( problème de sac à dos stochastique ). J'ai également pris connaissance de la question précédente Variation de Knapsack 1/0 avec bords pondérés mais il n'y a qu'une réponse très générique disponible, et aucune réponse sur le nom de ce sac à dos.
Une solution existante :
J'ai également lu une solution approximative dans un document sur les optimisations des SGBD, où elles group the related items as one combined item for knapsack
. Si l'on utilise cette technique dans notre exemple, les articles du sac à dos seront les suivants a
, bc
, d
, e
Il n'y a donc plus de dépendance entre deux de ces quatre éléments. Cependant, il est facile de construire un exemple qui n'obtient pas un résultat optimal, comme dans le cas où an item with "small weight and benefit" is grouped with another item with "large weight and benefit"
. Dans cet exemple, le "petit" élément ne devrait pas être sélectionné en solution, mais est sélectionné avec le "grand" élément.
Question :
Existe-t-il des techniques de résolution efficaces permettant d'obtenir un résultat optimal, ou au moins une certaine garantie d'erreur ? Ou est-ce que je prends la mauvaise direction pour modéliser ce problème ?