====== Úloha 4 - Experimentální hodnocení kvality algoritmů ======
* MI-PAA, ZS 2011/12
* Autor: **Jaroslav Fibichr (fibicjar)**
**Zadání**
* Prozkoumejte citlivost metod řešení problému batohu na parametry instancí generovaných generátorem náhodných instancí. Máte-li podezření na další závislosti, modifikujte zdrojový tvar generátoru.
* Na základě zjištění navrhněte a proveďte experimentální vyhodnocení kvality řešení a výpočetní náročnosti
* Pozorujte zejména závislosti výpočetního času (B&B, DP, heuristika) a rel. chyby (heuristika) na:
* maximální váze věcí
* maximální ceně věcí
* poměru kapacity batohu k sumární váze
* granularitě (pozor - zde si uvědomte smysl exponentu granularity)
* Doporučuje se zafixovat všechny parametry na konstantní hodnotu a vždy plynule měnit jeden parametr
===== Řešení =====
Podle zadání jsem změřil a vyhodnotil kvalitu řešení a výpočetní náročnost algoritmů řešících problém batohu, které jsem naimplementoval v předchozích úlohách:
* Jednoduchá heuristika (předtřídění podle cena/váha)
* Metoda větví a řezů (Branch and Bound, B&B)
* Dynamické programování
* FPTAS, s parametrem 2
Vstupní data byla vygenerována poskytnutým nástrojem **knapgen**. Podle zvolené závislosti, kterou chceme pozorovat, jsem fixoval jednotlivé parametry. Následující tabulka shrnuje fixované/generované parametry:
^ parametr ^ testované parametry ^ fixované ^
| maximální váha | W | n, N, m, C, k, d |
| maximální cena | C | n, N, m, W, k, d |
| poměr kapacity batohu k sumární váze | m | n, N, C, W, k, d |
| granularita | k, d | n, N, m, W, C |
==== Maximální váha věcí ====
Pro vygenerování byl použit následující batch skript:
FOR %%i IN (25 40 60 80 100 150 200 250 300 400 500) DO (
knapgen.exe -n 22 -N 30 -m 0.5 -W %%i -C 100 -k 1 -d 0 >> i1/maxW_%%i.dat
)
=== Výpočetní čas ===
Z výsledků měřění lze sledovat jednoznačné tendence:
* Heuristika, BF, B&B - výpočetní čas není závislý na maximální váze (W). To je patrně způsobeno tím, že změnou W se nemění počet prošlých stavů, pouze se mění "jemnost" hodnot vah.
* DP, FPTAS - zde s rostoucím W lze pozorovat i růst času. To lze přisoudit faktu, že algoritmy jsou implementovány ve verzi s dekompozicí podle kapacity. Tím se tabulka pro podproblémy se zjemňující celkovou váhou zvětšuje a tím se zvyšuje i počet stavů pro průchod.
{{:school:fit:miric:jaramipaa:r1_time.png|}}
=== Kvalita řešení ===
Na kvalitu heuristiky nemělo zvyšování W žádný vliv. Pro všechny instance byl průměr chyby pod 1%.
Naopak, na kvalitě výsledků algoritmu FPTAS se projevilo, že zanedbává poslední bity. Tyto dva bity se se zvyšujícím se W stávají méně důležité pro konečný výsledek. Pro W = 200 a více je již relativní chyba menší než 1%.
{{:school:fit:miric:jaramipaa:r1_err.png|}}
==== Maximální cena věcí ====
Pro vygenerování byl použit následující batch skript:
FOR %%i IN (25 40 60 80 100 150 200 250 300 400 500) DO (
knapgen.exe -n 22 -N 30 -m 0.5 -W 100 -C %%i -k 1 -d 0 >> i2/maxC_%%i.dat
)
=== Výpočetní čas ===
Z hodnot i grafu můžeme pozorovat, že maximální cena pozorovatelným způsobem neovlivňuje dobu výpočtu algoritmu. Rozdíl oproti předchozímu případu (tedy závislost na W) pro DP a FPTAS je zřejmý - dekompozice je provedena podle kapacity. Změna max. ceny tedy neovlivňuje výpočetní čas žádného z algoritmů.
{{:school:fit:miric:jaramipaa:r2_time.png|}}
=== Kvalita řešení ===
Na kvalitu heuristiky nemělo zvyšování W žádný vliv. Pro všechny instance byl průměr chyby pod 1%.
Naopak, na kvalitě výsledků algoritmu FPTAS se projevilo, že zanedbává poslední bity. Tyto dva bity se se zvyšujícím se W stávají méně důležité pro konečný výsledek. Pro W = 200 a více je již relativní chyba menší než 1%.
{{:school:fit:miric:jaramipaa:r2_err.png|}}
==== Poměr kapacity batohu k sumární váze ====
Pro vygenerování byl použit následující batch skript:
FOR %%i IN (0.05 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95) DO (
knapgen.exe -n 22 -N 30 -m %%i -W 100 -C 150 -k 1 -d 0 >> i3/m_%%i.dat
)
=== Výpočetní čas ===
Z měřění lze opět pozorovat rostoucí trend výpočetního času v závislosti na poměru kapacita/celková váha. Jediná pozorovatelná výjimka se objevuje u metody Branch and Bound. Zde od cca m = 0.5 nastává mírný sestupný trend patrně způsobený ořezáváním stavového prostoru zdola.
{{:school:fit:miric:jaramipaa:r3_time.png|}}
=== Kvalita řešení ===
Obě heuristiky mají se zvyšujícím se poměrem kapacity a sumární váhy sestupnou tendenci relativní chyby.
{{:school:fit:miric:jaramipaa:r3_err.png|}}
==== Granularita ====
Pro vygenerování byl použit následující batch skript:
FOR %%i IN (0.1 0.3 0.5 0.75 1 2.5 5 8) DO (
knapgen.exe -n 22 -N 30 -m 0.5 -W 100 -C 150 -k %%i -d 0 >> i4/gr0_%%i.dat
knapgen.exe -n 22 -N 30 -m 0.5 -W 100 -C 150 -k %%i -d -1 >> i4/gr-1_%%i.dat
knapgen.exe -n 22 -N 30 -m 0.5 -W 100 -C 150 -k %%i -d 1 >> i4/gr1_%%i.dat
)
Granularitu ovlivňují především 2 parametry:
* **-d** * -1..více malých věcí, 1..více velkých věcí, 0..rovnováha
* Při volbě parametru d=0 se granularita neměnila, parametr //-k//
* Při volbě parametru d=1 a d=-1 se granularita měnila symetricky (tedy velikosti vah věcí měli stejnou vzdálenost od 0, resp. maximální w)
* **-k** - exponent //k// ve vzorci //p = 1 / wk// pro pravděpodobnost výskytu věci s váhou //w// (při převaze malých věcí)
=== Výpočetní čas ===
Se změnou granularity se pohybovaly pouze časy DP a FPTAS.
Měly mírnou vzestupnou tendenci pro d=1 (a sestupnou pro d=-1). Výpočetní čas ostatních algoritmů změna granularity neovlivnila.
{{:school:fit:miric:jaramipaa:r4_time_pos.png|}}
{{:school:fit:miric:jaramipaa:r4_time_neg.png|}}
=== Relativní chyba ===
Z měření vyplynulo, že jednoduchá heuristika cena/váha není na změny parametrů citlivá, u FPTAS tomu tak je. Se zvyšováním exponentu k pro d=1 se zvyšovala hmotnost věcí a relativní chyba se zmenšovala. To je opět dáno tím, že pro větší čísla již nejsou poslední dva bity tolik důležité. Při jejich zanedbání se nesníží přesnost řešení.
{{:school:fit:miric:jaramipaa:r4_err_pos.png|}}
{{:school:fit:miric:jaramipaa:r4_err_neg.png|}}
===== Závěr =====
Provedl jsem sadu měření pro posouzení citlivosti naprogramovaných přístupů k jednotlivým parametrům vstupních dat. Výsledky vcelku potvrzovaly očekávání.
Pozn.:
Ačkoliv se dalo očekávat, že výsledky z měření kvality jednoduché heuristiky (podle poměru cena/váha) by mohly být více ovlivněny v prvních třech testech, není tomu tak. Patrně je to způsobeno tím, že byly zvoleny dostatečně vysoké ostatní (fixované) parametry a zárověň je v Javě dostatečně vysoká přesnost reprezentace čísel s plovoucí desetinnou čárkou typu double. Tím byla dosažena vysoká jemnost při dělení cena/váha a další ovlivnění nedostatenou jemností nemohly být pozorovány.