Problém batohu Zdeněk Hanzálek hanzalek@fel.cvut.cz ČVUT FEL Katedra řídicí techniky 5. dubna 2011 Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 1/ 15
1 Obsah přednášky 2 Úvod Formulace problému Relaxace na nedělitelnost předmětů 3 Řešení a algoritmy Řešení 4 Závěr Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 2/ 15
Formulace problému Problém batohu(knapsack problem) Instance:Nezápornáceláčíslan,c 1,...,c n,w 1,...,w n,w,kdenje početpředmětů,c 1,...,c n jsoucenypředmětů,w 1,...,w n jsou hmotnosti předmětů a W je nosnost batohu. Cíl:NaléztpodmnožinuS {1,...,n}takovou,že j S w j Wa j S c jjemaximální. Jde o jeden z nejjednodušších NP-obtížný problém. Též se někdy nazývá 0/1 Knapsack problem. Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 3/ 15
Relaxace na nedělitelnost předmětů Fractional Knapsack problem Instance:Nezápornáceláčíslan,c 1,...,c n,w 1,...,w n,w,kdenje početpředmětů,c 1,...,c n jsoucenypředmětů,w 1,...,w n jsou hmotnosti předmětů a W je maximální hmotnost batohu. Cíl:Naléztracionálníčíslax 1,...,x j,...,x n taková,že0 x j 1a n j=1 x j w j Wa n j=1 x j c j jemaximální. díkymožnostidělitpředměty(reálnéproměnnéx j )jetentoproblém řešitelný v polynomiálním čase Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 4/ 15
Řešení Fractional Knapsack problému- Dantzing[1957] pokudplatí n j=1 w j >W(opačnýpřípadjetriviální) setřiď a přeindexuj předměty podle relativní ceny, neboli aby platilo c 1 w 1 c 2 w 2... cn w n v setříděné sekvenci { nalezni index prvku, který se do batohu nevejde, nebolih :=min j {1,...,n} : } j i=1 w i >W prooptimálnířešeníjeoddělenatačásth-téhoprvku,kterásedo batohu vejde: x j :=1proj =1,...,h 1 x h := W h 1 i=1 wi w h x j :=0proj =h +1,...,n třídění prvků zabere O(nlogn) času, výpočet h se provede jednoduchým průchodem v O(n), takže tento postup vyřeší Fractional Knapsack problém v O(nlogn) existuje i algoritmus([1] str. 440), který dokáže tento problém vyřešit v O(n) převodem na Weighted Median problem Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 5/ 15
2-aproximační algoritmus pro Knapsack r-aproximační algoritmus pro maximalizaci Algoritmus A pro problém s maximalizací kriteriální funkce J se nazývá r-aproximačnípokudexistuječíslor 1takové,žeJ A (I) 1 r J (I)pro všechny instance I daného problému. Věta Nechťn,c 1,...,c n,w 1,...,w n,w,hjsounezápornáceláčísla,prokterá platí: w j Wproj =1,...,n n i=1 w i >W c 1 w 1 c 2 h =min w 2... cn w { n j {1,...,n} : j i=1 w i >W Potomvýběrlepšíhozedvouřešení {1,...,h 1}a{h}je2-aproximační algoritmus pro Knapsack problém s časovou náročností O(n). } Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 6/ 15
2-aproximační algoritmus pro Knapsack Důkaz: V libovolné instanci Knapsack problému mohou být vyřazeny prvky jejichž hmotnost je větší než nosnost batohu. Pokudje n i=1 w i W,potomcelámnožinapředmětůtvoří optimální řešení. Jelikož h i=1 c ijehornímezoptima,taklepšízedvouřešení {1,...,h 1}a{h}dosahujevícenežpolovinyoptima. Poznámka k aproximačním algoritmům: Aproximační algoritmy dávají garanci, že i v nejhorším případě bude hodnota kriteriální funkce nalezeného řešení v určité proporci k optimu. Četnost výskytu tohoto nejhoršího případu aproximační algoritmus nestuduje. Někdy namísto výkonnostního poměru r(asymptotic performance ratio) uvádíme poměrnou odchylku od optima ǫ, přitom platí r =1 + ǫ. Uvádět absolutní chybu nemá smysl. Proč? Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 7/ 15
Dynamické programování(celočíselné ceny) pro Knapsack Vstup:Cenyc 1,...,c n Z + 0,váhyw 1,...,w n,w R + 0. Výstup:S {1,...,n}taková,že j S w j Wa j S c jjemaximální. NechťCjelibovolnáhornímezoptima,např.C = n j=1 c j; x0 0 :=0;x0 k := prok=1,...,c; forj:=1tondo fork:=0tocdo s j k :=0;xj k :=xj 1 k ; fork:=c j tocdo ifx j 1 k c j +w j min{w,x j 1 k }then s j k :=1;xj k :=xj 1 k c j +w j ; end end end i :=max{k {0,...,C} :xk n < };S:= ; forj:=ndownto1do ifs j i =1thenS:=S {j};i:=i c j ; end Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 8/ 15
Dynamické programování(celočíselné ceny) pro Knapsack Pseudopolynomiální algoritmus s časovou náročností O(nC). Proměnnáx j k představujeminimálníhmotnostoceněk,jakoulze dosáhnoutvýběrempředmětůzmnožiny {1,...,j} (*)Předmětjjedándovýběruzpředmětů1,...,j,pokudprodanou cenu k dosáhne tento výběr nižší nebo stejné hmotnosti než výběr zpředmětů1,...,j 1.Algoritmuspočítátytohodnotysvyužitím rekurentní rovnice: x j k = x j 1 k c j +w j pokudpředmětjbyldándovýběru; x j 1 k pokud předmět j nebyl dán do výběru. Doproměnnés j k zapisujeme,kterýztěchtodvoupřípadůnastal. Použije se pro rekonstrukci výběru. Příklad řešený na tabuli(celočíselné ceny): n =4,w = (21,35,52,17),c = (10,20,30,10),W =100 Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 9/ 15
Dynamické programování pro Knapsack Dynamické programování obecně pseudopolynomiální algoritmus stavový prostor je konstruován díky celočíselným vstupům stavový prostor není strom, jsou v něm diamanty (též se nazývá overlaping structures, neboli v tomto místě st.prostoru si ze dvou možných řešení ponecháme pouze to výhodnější- viz(*)) tím nedochází k exponenciálnímu růstu jeho velikosti Pokud jsou váhy celočíselné, můžeme problém řešit pomocí dynamického programování, kde pro danou váhu vybereme řešení s větší cenou(*). Příklad(celočíselné váhy) na tabuli pomocí nejkratších cest a pomocí dynamického programování. Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 10/ 15
Redukce složitosti zaokrouhlením vstupních dat Časová náročnost algoritmu Dynamického programování pro Knapsack je závislánac. Myšlenka Vydělímevšechnycenyc 1,...,c n číslem2azaokrouhlímejedolů. To zrychlí algoritmus, ale může to vést na suboptimální řešení. Takto můžeme volit mezi mírou rychlosti a optimality. Zavedením cj c j := proj=1,...,n t se časová náročnost algoritmu Dynamického programování pro Knapsack sníží t-krát. Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 11/ 15
Aproximační schéma pro Knapsack Vstup:Nezáp.celáčíslan,c 1,...,c n,w 1,...,w n,w.číslo ǫ >0. Výstup:PodmnožinaS {1,...,n}taková,že j S w j Wa j S c j 1 1+ǫ j S c jprovšechnys {1,...,n}splňující j S w j W. 1 proveď 2-aproximační algoritmus pro Knapsack; řešeníoznačs 1 oceněc(s 1 ) = j S 1 c j ; 2 t :=max{1, ǫc(s 1) n }; c j := c j t proj=1,...,n; 3 proveď algoritmus Dynamického programování pro Knapsack na instanci (n, c 1,..., c n,w 1,...,w n,w)shornímezíc := 2c(S 1) t ; řešeníoznačs 2 oceněc(s 2 ) = j S 2 c j ; 4 ifc(s 1 ) >c(s 2 )thens :=S 1 elses :=S 2 Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 12/ 15
Aproximační schéma pro Knapsack Důkaztoho,ževolbaděliteletvkroku2(t :=max{1, ǫc(s 1) n })vede na(1 + ǫ)-aproximační algoritmus lze nalézt v[1]. ČasovánáročnostjeO(nC) =O(n c(s 1) t ) =O(n c(s 1)n ǫc(s 1 ) ) =O(n2 1 ǫ ). Knapsack je jeden z mála problémů pro něž existuje aproximační algoritmus s libovolně malou poměrnou odchylkou od optima ǫ. Pro určitémalé ǫ = n c(s 1 ) jet=1ajdevpodstatěoalgoritmus Dynamického programování pro Knapsack s horní mezí z 2-aproximační algoritmus pro Knapsack. Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 13/ 15
Knapsack- Shnutí Jeden z nejjednodušších NP-obtížných problémů Základ pro řadu dalších optimalizačních problémů(bin packing, container loading, 1-D, 2-D, 3-D cutting problem) Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 14/ 15
Literatura B.H.KorteandJensVygen. Combinatorial Optimization: Theory and Algorithms. Springer, fourth edition, 2008. Z. Hanzálek (ČVUT FEL) Problém batohu 5. dubna 2011 15/ 15