résout un problème du sac à dos 0-1 multiple
[earn,ind] = knapsack(profit,weight,capa,[bck])
vecteur ligne d'entiers
vecteur ligne d'entiers
vecteur ligne d'entiers
entier
entier
vecteur ligne d'entiers
Le problème du sac à dos multiple est défini mathématiquement comme suit:
Etants donnés n objets (n >= 2) et m sacs à dos (m >= 1)
Maximiser le "profit global"
E=profit*sum(X,1)
sous les contraintes:
X*weight <= capa
sum(X,1) <= 1 ; i=1,...,n
X(j,i)= 0 or 1
Où
est le vecteur des "profits" associés à chaque objet. Les élements de ce vecteur doivent être des entiers positifs.
est le vecteur des "poids". Les élements de ce vecteur doivent être des entiers positifs.
est le vecteur des "capacités de chacun des sacs à dos. Les élements de ce vecteur doivent être des entiers positifs.
est une matrice m
par n
à valeurs dans {0,1}.
[earn,ind] = knapsack(profit,weight,capa)
résoud le problème ci-dessus. Il retourne dans
La valeur du critère E
pour la
solution "optimale" si elle a pu être calculée. Sinon,
earn
est affecté à une valeur
négative:
signifie qu'un sac à dos ne peut contenir aucun objet.
signifie qu'un objet ne peut entrer dans aucun sac à dos.
signifie qu'un sac à dos contient tous les objets.
Le vecteur entiers des localisations optimales:
ind(i)
donne le numéro du sac à dos
où a été positionné l'objet
i
, si l'objet fait partie de la solution,
sinon ind(i)
est égal à 0. La
matrice X
peut être calculée à
partir de ind
par
est un entier optionnel qui donne le
nombre maximum de "backtrackings" qui peuvent être
éffectués si l'on recherche une solution heuristique. Si la solution exacte et requise alors
bck
doit être omis ou assigné à une valeur négative.