36 PAA - Problémy a algoritmy

Úloha 3: Problém batohu

Jan Dohnal (dohnaj1@fel.cvut.cz)



Zadání a specifikace problému


Řešení problému

Metoda větví a hranic

Jedná se o rekurzivní metodu, která je založena na procházení kombinací umístění věcí do batohu tak, že batoh nesmí být přetížen. V každém koncovém stavu dojde ke srovnání ceny aktuálního řešení s dosud nejlepším řešením (hranice). Neprocházejí se stavy, ve kterých už není možné zlepšit cenu batohu (ořezávání). Metoda by měla poskytovat výrazně nižší složitost než hrubá síla.

Dynamické programování

V této metodě se vypočítá maximální cena naplněného batohu. Začíná se s prázdným batohem. V každém kroku se ptáme, jaká je cena batohu s vloženým předmětem a bez něho, poté vybereme tu lepší variantu. Dále postupujeme rekurzivně až k nejmenším problémům triviálního charakteru. Hlavní myšlenkou této metody je to, že si budeme pamatovat stavy, které jsme navštívili. Tyto stavy budeme ukládat do pole o rozměrech N krát M.

Heuristika podle poměru cena/hmotnost s testem nejcennější věci

Nejdříve seřadíme předměty podle poměru cena/váha a to v klesajícím pořadí. Provádíme test nejcennější věci: porovnáváme batoh s předmětem s nejvyšší cenou, který ještě můžeme do batohu vložit. Tuto věc pak do batohu přidáme. Složitost závisí na použitím řazení.



Naměřené hodnoty


nprůměrný počet prohledávaných instancí
větve a hranicedynamickytest nejcennější věci
4 11 22 3
10 181 623 7
15 361 265514
20 6822 551915
22 26562 648618
25 74718 906518
27 954171161722
30 4515641510823
32 7556981825124
35 20356682259826
37 22860862637328
40255256953124130

Tabulka 1: Prohledávané instance




Závěr

Z naměřených výsledků vyplývá, že metoda větví a hranic dává solidní výsledky v porovnání s hrubou silou, je však závislá na struktuře konkrétní instance, kdy se může čas řešení prodloužit.

Metoda dynamického programování umožňuje velmi rychle najít řešení. Nevýhodou je vyšší paměťová náročnost, je však použitelná jen pro některé problémy.

Při zvolení vhodného algoritmu řazení dává třetí metoda s použitím heuristiky dobré výsledky.



Příloha

Ke stažení je k dispozici zabalená celá úloha, nebo jen zdrojový kód vytvořený v programovacím jazyku C: