Tato stránka vyžaduje podporu CSS stylů

4. domácí úloha z předmětu PAA

Experimentální hodnocení algoritmů pro řešení problému batohu

Oto Válek

FEL ČVUT, letní semestr 2001/2002, cvičení St 12:45

1. Specifikace úlohy

Problém batohu je řešen hrubou sílou s detekcí přetížení (1), heuristikou cena/váha (2), metodou větví a hranic (3), dynamickým programováním (4) a heuristikou podle poměru cena/váha s testem nejdražší věci (5). Bližší popis metod viz řešení 1.úlohy a 3.úlohy Sledována byla výpočetní náročnost a chyba řešení podle zadání.
Čítač kroků řešení byl zvyšován na vhodném místě v hlavní rekurzivní funkci algoritmu. U heuristik vybírajících nejvyšší poměr cena/váha byl navíc umístěn do cyklu příslušné funkce, aby se projevila O(n) složitost pro každý navštívený stav. U metody hrubé síly, dyn. programování a metody větví a hranic však počet kroků zhruba odpovídá počtu navštívených stavů stavového prostoru.
Čas byl měřen funkcí ftime() ze std. C knihovny v prostředí WinNT. Byl použit kompilátor z MS VC 5.0 s defaultním nastavením a procesor Intel Pentium 100 Mhz.

2. Testovací instance

Pro generování instancí byl použit zkompilovaný připravený generátor. Defaultní hodnoty parametrů byly zvoleny podle WWW formuláře:
 -n  20 Velikost instance [10,15,20,25,30]
 -N  50 Počet instancí 
 -W 100 Maximální váha věci
 -C 250 Maximální cena věci [50,150,250,350,450]
 -m 0.6 Poměr sumární váhy ke kapacitě batohu [0.2,0.4,0.6,0.8,1]
 -d   0 Charakter granularity (-1 více malých, 1 více velkých) [-1,0,1]
 -k   1 Exponent závislosti granularity
 -I   0 Základní ID
Sledována byla závislost na vybraných parametrech, které nabývají následujích hodnot (ostatní parametry na defaultních hodnotách) :
 -n [10,15,20,25,30]     Velikost instance
 -C [50,150,250,350,450] Maximální cena věci
 -m [0.2,0.4,0.6,0.8,1]  Poměr sumární váhy ke kapacitě batohu
 -d [-1,0,1]             Charakter granularity (-1 více malých, 1 více velkých)
Každé hodnotě parametru odpovídá vygenerovaných 50 instancí, v úvahu je brán aritmetický průměr.

3. Naměřené výsledky

Měřen byl reálný čas, počet kroků řešení, a relativní chyba proti nejlepší nalezené ceně, kterou zde představuje výsledek metody dynamického programování. U metody hrubé síly byl test ukončen pro n=20.

Čas řešení [ms]
Hrubá
síla
Heuristika
cena/váha
Větve
a hranice
Dynamické
programování
Cena/váha
+ nejdražší
Závislost na max. ceně věci C
C=50 5912,70,245,9608,20,6
C=1506003,00,441,3598,40,8
C=2505360,70,441,1596,90,6
C=3505533,61,240,1600,20,6
C=4505615,51,036,7597,10,8
Závislost na granularitě instance d
d=-1 (více malých)5507,50,635,9629,40,8
d=0 (rovnoměrně)5319,90,837,8626,11,0
d=1 (více velkých)5413,41,034,4630,00,8
Závislost na poměru sumární váhy ke kapacitě batohu m
m=0.2167,60,646,1157,80,4
m=0.42345,00,2112,8409,20,0
m=0.65523,01,636,7626,70,6
m=0.86229,80,25,0802,11,0
m=16292,41,20,6876,10,8
Závislost na počtu věcí n
n=105,00,00,848,10,2
n=15192,70,26,2241,20,0
n=205382,10,044,5609,90,8
n=250,6279,41193,51,0
n=300,82241,22141,21,4

Kroků řešení
Hrubá
síla
Heuristika
cena/váha
Větve
a hranice
Dynamické
programování
Cena/váha
+ nejdražší
Závislost na max. ceně věci C
C=5091818730766445873327
C=15091818730359325873323
C=25091818730259035873322
C=35091818730757505873327
C=45091818730751835873327
Závislost na granularitě instance d
d=-1 (více malých)92135330549415958325
d=0 (rovnoměrně)92045430351425927323
d=1 (více velkých)92135330549415958325
Závislost na poměru sumární váhy ke kapacitě batohu m
m=0.22662417165451943191
m=0.4374711239161764244259
m=0.692045430351425927323
m=0.810460003684126910388
m=11048575420207153440
Závislost na počtu věcí n
n=10875849157394
n=15287331768552663191
n=2091818730259035873322
n=254663749510230491
n=3067031991115657700

Relativní zhoršení proti nejlepší možné ceně
Hrubá
síla
Heuristika
cena/váha
Větve
a hranice
Dynamické
programování
Cena/váha
+ nejdražší
Závislost na max. ceně věci C
C=500,00%1,30%0,00%0,00%1,30%
C=1500,00%1,53%0,00%0,00%1,53%
C=2500,00%1,57%0,00%0,00%1,57%
C=3500,00%1,29%0,00%0,00%1,29%
C=4500,00%1,35%0,00%0,00%1,35%
Závislost na granularitě instance d
d=-1 (více malých)0,00%1,23%0,00%0,00%1,23%
d=0 (rovnoměrně)0,00%1,42%0,00%0,00%1,42%
d=1 (více velkých)0,00%1,23%0,00%0,00%1,23%
Závislost na poměru sumární váhy ke kapacitě batohu m
m=0.20,00%3,59%0,00%0,00%3,59%
m=0.40,00%3,20%0,00%0,00%3,20%
m=0.60,00%1,42%0,00%0,00%1,42%
m=0.80,00%0,50%0,00%0,00%0,50%
m=10,00%0,00%0,00%0,00%0,00%
Závislost na počtu věcí n
n=100,00%2,60%0,00%0,00%2,60%
n=150,00%1,72%0,00%0,00%1,72%
n=200,00%1,57%0,00%0,00%1,57%
n=251,22%0,00%0,00%1,22%
n=301,16%0,00%0,00%1,16%

4. Srovnání algoritmů

Následuje srovnání algoritmů podle výpočetní náročnosti a chyby řešení. Každé měřené kombinaci parametrů generátoru odpovídá jeden bod v ploše - průměr z 50 instancí. Čas je vynesen v logaritmickém měřítku.
podle výpočetní náročnosti
podle chyby řešení

5. Závěr

Závislost na max. ceně věci C

Změna maximální ceny věci činnost algoritmů v podstatě neovlivňuje. S vyššími hodnotami cen se jen zvyšuje jakási "inflace" v úloze - i výsledná max. cena je vyšší. Růst ceny (a tím především relativní zjemňování intervalu) prospívá jen v malé míře metodě větví a hranic, jelikož ořezání podle optimalizačního kritéria nastává dříve.
Chyba heuristických metod nabývá nevýrazného maxima pro C=250, pro což jsem nenalezl vhodné vysvětlení.

Závislost na granularitě instance d

Překvapivé zjištění je, v žádném případě nehraje roli, zda převažují věci malé nebo velké, podstatný je jen rozdíl mezi rovnoměrným a nerovnoměrným rozložením vah věcí.
Ve výpočetní náročnosti výraznější rozdíly nejsou, heuristika se doupuší na nerovnoměrně rozložených vahách věci menší chyby.

Závislost na poměru sumární váhy ke kapacitě batohu m

Tento parametr má na průběh algoritmů velmi podstatný vliv. Menší hodnoty parametru (tj. "hodně věcí na výběr a malý batoh") vyhovují hrubé síle a dynamickému programování. U těchto metod se dříve prosadí kontrola přetížení batohu, která stavový prostor ořeže více právě v případě, kdy je věcí o hodně více, než se jich do batohu vejde.
Metodě větví a hranic naopak vyhovuje případ, kdy se do batohu vejde většina věcí. Vzhledem k tomu, že moje implementace v každém kroku nejprve věc přidává je velmi brzy nastavena ořezávací hodnota opt. kritéria blízko max. ceny a většina stavového prostoru se pak neprohledává.
Heuristika cena/váha má s rostoucí hodnotou parametru "stále méně na výběr" a tedy "stále méně co zkazit" a tak relativní chyba klesá.

Závislost na počtu věcí n

Tato závislost je už podrobněji rozebrána ve 3. úloze. Výpočetní náročnost hrubé síly je exponenciální. Totéž lze říci i o metodě větví a hranic, i přes značné snížení počtu kroků. Přesto je v mé implementaci výhodnější než dynamické programování pro instance menší než cca 22-33 věcí.
Metoda dynamického programování se ukázala nejvýhodnější pro vyšší n. S rostoucím n se počet kroků blíží lineární závislosti.
Chyba heuristiky cena/váha s rostoucím počtem věcí klesá. Ubývá totiž zastoupení "výjimek", které kazí zjednodušený pohled heuristiky na problém.

6. Soubory

4hodnoceni.zip - ZIP archiv zdrojových souborů v C++, zadaných a naměřených hodnot, generátoru instancí, tohoto dokumentu a Excel. tabulky s analýzou dat.