Bonjour,
Je dois programmer un algorithme qui répond au problème suivant :
J'ai n colis qui contiennent tous le même article, mais avec des quantités éventuellement différentes pour les tailles (5 tailles dans l'exemple, 25 en pratique).
C1 : T1C1 T2C1 T3C1 T4C1 T5C1
C2 : T1C2 T2C2 T3C2 T4C2 T5C2
...
Cn : T1Cn T2Cn T3Cn T4Cn T5Cn (TiCj >= 0)
J'ai des articles en vrac en quantités : V1 V2 V3 V4 V5 (Vi >= 0)
J'ai une commande pour cet article avec les quantités Q1 Q2 Q3 Q4 Q5 pour les tailles. (Qi >= 0)
Le problème :
- Déterminer quels colis doivent être choisis pour répondre à la commande, de manière que :
* le nombre maximum d'articles soient issus des colis
* le nombre minimum de colis soient utilisés (facultatif)
* Pour chaque taille, si la somme issue des colis est inférieure à la somme demandée, il faut pouvoir compléter avec la quantité de vrac.
Dans le cas contraire, l'algorithme doit rendre KO.
Il faut donc pour chaque taille : Qi = somme(TiCj) + Ri avec les j tels que 1 <= j <= n et 0 <= Ri <= Vi
Pour l'instant, la seule piste que j'ai est proche d'un algorithme de programmation dynamique pour le problème du sac-à-dos.
http://www.unit.eu/cours/EnsROtice/m...Module_20.html
Je crée une liste d'états en partant d'un état de quantité vide, et j'itère sur les colis.
Pour chaque colis, je crée pour chaque état un nouvel état si les quantités du colis courant + celles de l'état ne dépassent pas les quantités commandées Qi.
Chaque état contient la somme des quantités des colis.
Ce qui m'amène à 2 puissance n états pour n colis, au pire (d'où explosion potentielle au niveau mémoire et/ou temps).
Je ne vois que 3 tests qui limitent le nombre d'états : dépassement des quantités, insuffisance des quantités restantes dans les colis non encore traités, existence d'un état avec les mêmes quantités.
Connaîtriez-vous une autre approche ?
Je vous remercie pour votre aide,
Joyel
Partager