Problema containerizării este o problemă combinatorie NP -hard . Sarcina este de a împacheta obiecte cu o formă predefinită într-un număr finit de containere cu o formă predefinită, astfel încât numărul de containere utilizate să fie cel mai mic sau numărul sau volumul de obiecte (acel pachet) să fie cel mai mare.
Există multe variante ale acestei probleme ( ambalare bidimensională , ambalare liniară , ambalare în funcție de greutate , ambalare în funcție de valoare etc.) care pot fi aplicate în diferite domenii, cum ar fi umplerea optimă a containerelor, încărcarea camioanelor cu o limită de greutate, crearea copii redundante pe suporturi amovibile etc. Deoarece problema este NP-hard , utilizarea unui algoritm de enumerare exactă este posibilă numai pentru dimensiuni mici. De obicei, pentru rezolvarea problemei se folosesc algoritmi polinomii aproximativi euristici .
Să fie un set de containere de dimensiune și un set de obiecte de dimensiune . Este necesar să găsiți un număr întreg de containere și o partiție a setului în subseturi astfel încât pentru toți . O soluție se numește optimă dacă este minimă. Minimul este notat în continuare cu OPT .
Problema containerizării poate fi formulată ca o problemă de programare cu numere întregi după cum urmează:
Minimizați | ||
sub restricții | ||
unde , dacă containerul este utilizat și , dacă articolul este plasat în container . [unu]
Cei mai simpli algoritmi de împachetare polinomială sunt Best Fit Decreasing - BFD (Best Fit Descending) și First Fit Decreasing - FFD (First Fit Descending). Articolele sunt sortate în mărime necrescătoare și ambalate succesiv fie într-un container în care, după ambalare, rămâne cel mai mic volum liber - BFD, fie în primul container în care este plasat - FFD. S-a dovedit că acești algoritmi folosesc cel mult
containere [2] .
Cu toate acestea, există și algoritmi polinomi asimptotic ε-optimi pentru problema de împachetare.
Problema de a determina dacă OPT este doi sau trei este NP-hard. Prin urmare, pentru orice ε > 0, este dificil să împachetați articole în containere (3/2 − ε)OPT . (Dacă există un astfel de algoritm polinomial, atunci în timp polinomial este posibil să se determine dacă n numere nenegative se împart în două mulțimi cu aceeași sumă de elemente. Cu toate acestea, se știe că această problemă este NP-hard.) Prin urmare, dacă P nu coincide cu NP, atunci pentru problema de ambalare nu există un algoritm (PTAS)de Schemă de timp polinomială aproximativă . Pe de altă parte, pentru orice ε >0, se poate găsi o soluție cu cel mult (1 + ε)OPT + 1 containere în timp polinomial. Astfel de algoritmi aparțin PTAS-ului asimptotic. [3] Dar, deoarece ambele constante depind în mod arbitrar de ε în estimarea complexității acestei clase de algoritmi, astfel de algoritmi, spre deosebire de FFD și BFD, pot fi practic inutile.
Pentru o anumită clasă de distribuții de probabilitate a dimensiunilor articolelor împachetate, inclusiv funcțiile de distribuție convexe în sus și în jos, există un algoritm practic de împachetare polinomială care este optim asimptotic aproape sigur pe măsură ce numărul de articole crește la nesfârșit. Pentru distribuțiile care nu sunt incluse în această clasă, pot fi construiți algoritmi optimi asimptotic polinomi individuali. [patru]
Sarcini de ambalare | |
---|---|
Cercuri de ambalare |
|
Ambalare cu baloane |
|
Alte pachete | |
Puzzle |
Probleme NP-complete | |
---|---|
Problema de maximizare a stivuirii (ambalării) |
|
teoria grafurilor teoria multimelor | |
Probleme algoritmice | |
Jocuri de logică și puzzle-uri | |