2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013



Podobné dokumenty
3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Řešení problému batohu dynamickým programováním, metodou větví a hranic a aproximativním algoritmem

ČVUT FEL X36PAA - Problémy a algoritmy. 4. úloha - Experimentální hodnocení algoritmů pro řešení problému batohu

MI-PAA. úkol č.3. Řešení problému batohu dynamickým programováním, metodou větví a hranic a aproximativním algoritmem

Experimentální hodnocení kvality algoritmů

Seznámení se se zvolenou pokročilou iterativní metodou na problému batohu

ČVUT FEL X36PAA - Problémy a algoritmy. 5. úloha - Seznámení se se zvolenou pokročilou iterativní metodou na problému batohu

VEKTORY. Obrázek 1: Jediný vektor. Souřadnice vektoru jsou jeho průměty do souřadných os x a y u dvojrozměrného vektoru, AB = B A

Dynamické programování

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

Dynamické programování

Obr. P1.1 Zadání úlohy v MS Excel

Aproximativní algoritmy UIN009 Efektivní algoritmy 1

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

Časová a prostorová složitost algoritmů

Prohledávání do šířky = algoritmus vlny

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Da D to t v o é v ty t py IB111: Datové typy

Řešení problému vážené splnitelnosti booleovské formule pokročilou iterativní metodou

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Binární soubory (datové, typované)

Přílohy. Příloha 1. Obr. P1.1 Zadání úlohy v MS Excel

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Kontingenční tabulky v MS Excel 2010

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

5 Rekurze a zásobník. Rekurzivní volání metody

Úvod do informatiky. Miroslav Kolařík

12. Globální metody MI-PAA

matice([[1,1,0,0,0],[1,1,1,0,0],[0,1,1,0,0],[0,0,0,1,1],[0,0,0,1,1]],1). matice([[1,1,1],[1,1,0],[1,0,1]],2).

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

ÚLOHY S POLYGONEM. Polygon řetězec úseček, poslední bod je totožný s prvním. 6 bodů: X1, Y1 až X6,Y6 Y1=X6, Y1=Y6 STANOVENÍ PLOCHY JEDNOHO POLYGONU

4EK213 LINEÁRNÍ MODELY

Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování. študenti MFF 15. augusta 2008

Úloha - rozpoznávání číslic

Text úlohy. Která barva nepatří do základních barev prostoru RGB? Vyberte jednu z nabízených možností: a. Černá b. Červená c. Modrá d.

Implementace LL(1) překladů

Návod na import měřených dat ("zápisníku") GROMA

Funkce a lineární funkce pro studijní obory

Operační výzkum. Vícekriteriální hodnocení variant. Grafická metoda. Metoda váženého součtu.

Algoritmizace prostorových úloh

Lekce 01 Úvod do algoritmizace

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

II. Úlohy na vložené cykly a podprogramy

TGH10 - Maximální toky

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

Základy algoritmizace a programování

Hammingovy kódy. dekódování H.kódů. konstrukce. šifrování. Fanova rovina charakteristický vektor. princip generující a prověrková matice

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Algoritmus pro hledání nejkratší cesty orientovaným grafem

UNIVERZITA PARDUBICE. 4.4 Aproximace křivek a vyhlazování křivek

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

CVIČNÝ TEST 41. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 7 III. Klíč 15 IV. Záznamový list 17

EVI 8 - Autovraky Přehled plnění cílů opětovného použití

Funkce - pro třídu 1EB

propustný směr maximální proud I F MAX [ma] 75 < 1... při I F = 10mA > při I R = 1µA 60 < 0,4... při I F = 10mA > 60...

Stromové struktury v relační databázi

10. Složitost a výkon

Předmět: Algoritmizace praktické aplikace

Projektč.3dopředmětuIZP. Maticové operace

3. Optimalizace pomocí nástroje Řešitel

Struktury a dynamická paměť

( ) ( ) ( ) ( ) Skalární součin II. Předpoklady: 7207

Státnice odborné č. 20

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Dokumentace programu piskvorek

Lineární regrese. Komentované řešení pomocí MS Excel

Semestrální práce 2 znakový strom

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Grafové algoritmy. Programovací techniky

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu (reg. č. CZ.1.07/2.2.00/28.

xrays optimalizační nástroj

Grafové algoritmy. Programovací techniky

Fz =a z + a z +...+a z +a z =

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

P ílohy. P íloha 1. ešení úlohy lineárního programování v MS Excel

Úvod do teorie grafů

KALKULÁTORY EXP LOCAL SIN

3. Prohledávání grafů

KOMPLEXNÍ ČÍSLA INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ

Rekurze. Jan Hnilica Počítačové modelování 12

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

Mgr. Markéta Trnečková, Ph.D. Palacký University, Olomouc

4. Úvod do paralelismu, metody paralelizace

Fergusnova kubika, která je definována pomocí bodu P1, vektoru P1P2, bodu P3 a vektoru P3P4

5. Lokální, vázané a globální extrémy

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Optimalizace. Obsah přednášky. DÚ LP - Okružní problém. Lineární optimalizace. DÚ LP - Okružní problém. DÚ LP - Okružní problém

4EK213 Lineární modely. 4. Simplexová metoda - závěr

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

Strana 5768 Sbírka zákonů č. 437 / 2011 Částka 151

VÍCEKRITERIÁLNÍ ROZHODOVANÍ

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

NP-úplnost problému SAT

Návrh Designu: Radek Mařík

Vyhodnocení 2D rychlostního pole metodou PIV programem Matlab (zpracoval Jan Kolínský, dle programu ing. Jana Novotného)

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

2. Numerické výpočty. 1. Numerická derivace funkce

Transkript:

2. úkol MI-PAA Jan Jůna (junajan) 3.11.2013 Specifikaci úlohy Problém batohu je jedním z nejjednodušších NP-těžkých problémů. V literatuře najdeme množství jeho variant, které mají obecně různé nároky na algoritmus řešení. Je dáno: celé číslo n (počet věcí) celé číslo M (kapacita batohu) konečná množina V = {v 1, v 2,,v n } (hmotnosti věcí) konečná množina C = {c 1, c 2,,c n } (ceny věcí) V našem řešení se omezíme na verzi 0/1 problém batohu, tedy zkonstruujeme takovou množinu X={x 1, x 2,,x n }, kde každé x i je 0 nebo 1, tak, aby platilo: v 1 x 1 + v 2 x 2 + + v n x n < = M (aby batoh nebyl přetížen). a výraz c 1 x 1 + c 2 x 2 + + c n x n nabýval maximální hodnoty pro všechny takové množiny (cena věcí v batohu byla maximální). Více viz. https://edux.fit.cvut.cz/courses/mi-paa/tutorials/batoh Rozbor variant řešení Oproti prvnímu úkolu, kdy byl stejný problém řešený metodami hrubé síly a jednoduché heuristiky podle poměru ceny a váhy, jsme řešili problém 3mi novými způsoby: Metodou větví a hranic (B&B), která je velmi podobná k řešení hrubé síly s tím rozdílem, že se při procházení stavového prostoru bere ohled na aktuální váhu věcí v batohu. Pokud tato váha přesáhne maximální možnou váhu, je výpočet ukončen a předán zpět do předchozí větve rekurze. Dalším kritériem je ořezávání stavového prostoru podle nejlepší dosažené ceny. Do rekurze se předává nejlepší dosažená cena, nad kterou již výpočet dalších větví rekurze nemá cenu a opět se ukončuje a vrací zpět. Dynamické programování neboli dekompozice podle kapacity nebo podle ceny je další z možných řešení daného problému. Popis řešení dekompozice podle ceny je popsán například zde: http://www.algoritmy.net/article/5521/batoh FPTAS algoritmus tj. s použitím modifikovaného dynamického programování s dekompozicí podle ceny. Rozdílem mezi předchozí verzí je pak zvolení maximální chyby, která může dojít

při výpočtu a následného upravení pole vstupních dat. Popis kostry algoritmu Implementace všech popsaných algoritmů byla provedena v programovacím jazyce Python verze 3.2. Společné funkce algoritmů byly uloženy do souboru common.py, který je importován níže popsaných algoritmů. Algoritmus pro výpočet metodou větví a hranic Algoritmus (bb.py) nejprve načte podle parametrů název souboru se vstupními daty a případně i počet opakování, kolikrát se má výpočet provést. Poté jsou načtena vstupní data, ty jsou rozpársována a serializována pro další použití. Další zpracování přejímá funkce processproblem která vytvoří počáteční instanci výsledku, do které se dále bude doplňovat nejlepší řešení a nulový vektor o velikosti vstupních dat. Rekurzivní funkce iterateproblem přejímá vstupní data a vektor, tvořený z jedniček a nul. Zařazení prvku do batohu pak určuje jednička na stejné pozici, jakou má prvek ve vstupních datech. Funkce vždy ověří, zda vnoření již nepřekročuje velikost vstupních dat. Pokud ne, otestuje zda současná konfigurace vektoru nepřesahuje maximální velikost baťohu. V takovém případě vrací aktuální nejlepší současnou konfiguraci. Poté ověří, zda konfigurace vstupního vektoru nemá lepší cenu než současná nejlepší, pokud ano, uloží ji a pokračuje na další vnořování. V předávaných datech je také informace o nejlepší dosažené ceně. Tato hodnota hraje velkou roli ve zpracovávání rekurze, kdy se při rekurzivním postupu ve stavovém prostoru vždy vezmou všechny prvky zbývající k prozkoumání, spočítá se jejich cena a pokud je tato cena + aktuálně dosažená menší jak zatím nejlepší dosažená, je zbytečné tuto větev stavového prostoru procházet, protože nám nemůže poskytnout nové nejlepší řešení. Pokud rekurze projde všechny permutace problému ve vstupním vektoru se změnily všechny konfigurační bity vrátí se nejlepší naměřený výsledek uložený v proměnné BEST_PART. Pomocí druhého nepovinného parametru programu se dá určit počet opakování výpočtu problému na jednu instanci. Tento počet se dá použít především u krátkých výpočtů, u kterých by byl problém s měřením času. Instance je tak spočítána vícekrát a naměřený čas je podělen počtem opakování Na stdout se vytiskne se výsledek a do stderr se vloží ID záznamu, čas celého opakovaného řešení instance, počet opakování a čas řešení instance (celkový čas na instanci / počet opakování). Poté se přejde k další instanci problému. Algoritmus pro výpočet dynamickým programováním Algoritmus pro výpočet zadanou heuristikou (dynamic.py) začíná stejně jako v prvním případě a to načtením vstupních dat, jejich rozparsováním. Oproti prvnímu případu však prochází zadanýmá vstupní data a sestavuje 2D pole, jehož jedna strana uvádí dosaženou cenu věcí v baťohu, druhá je pak Xtá prozkoumaná položka. Hodnota v 2D poli pak určuje dosaženou váhu zvolených předmětů. Krok algoritmu je tedy následující: Mohou nastat dvě situace dojde proto k rozdělení řešení a algoritmus bude postupovat po obou větvích. První možností je, že algoritmus do batohu přidá danou položku a přejde na souřadnici [y+1;x+cena předmětu], kde x je dosavadní součet cen položek

obsažených v batohu a nastaví hodnotu pole na z + váha předmětu (z je dosavadní součet vah všech předmětů obsažených v batohu). Druhou možností je, že předmět do batohu nebude přidán algoritmus přejde na souřadnici [y+1;x], kde hodnotu pole stanoví opět jako součet vah všech obsažených předmětů (protože nebyl přidán žádný předmět, tak hodnotu pouze opíše ze zdrojového pole). Stejným způsobem algoritmus postupuje pro všechny dosažené buňky v následujícím řádku, dokud nejsou zpracovány všechny předměty (vyplněny všechny řádky). Řešením je pak taková buňka, jejíž hodnota (váha věcí) je maximální možná tak, aby nepřekročila maximální váhu baťohu a zároveň Ynová souřadnice (cena) je největší možná. Zpětnou podobu vektoru pak dostaneme zpětným průchodem spočítané tabulky tak, že vždy odečítáme cenu předmětu (dostaneme novou Ynovou souřadnici) a váhu předmětu (nová váha hodnota buňky) a dekrementujeme Ynovou souřadnici o 1. Pokud je v tabulce na Ynové souřadnici o 1 menší stejná váha jako je váha aktuální zpracované buňky, znamená to, že v konečném řešení prvek není, tudíž dekrementujeme Ynovou souřadnici a pokračujeme dál. Popis problému a jeho řešení pomocí dynamického programování je popsán a graficky znázorněn například zde: http://www.algoritmy.net/article/5521/batoh Algoritmus FPTAS Algoritmus (fptas.py) je velmi podobný řešení pomocí dynamického programování s dekompozicí podle ceny. Rozdílem je pak akorát prvotní předzpracování pole, kdy se ceny předmětů zmenší o nějaký faktor K, který je spočítán jako zvolená maximální procentuelní chyba * největší cena / počet předmětů. Algoritmus s dekompozicí podle ceny poté spočítá maximálni možnou cenu v baťohu, o které můžeme říct, že nabývá hodnot se zvolenou maximáln procentuelní odchylkou. Naměřené výsledky Algoritmus byl testován na počítači s procesorem Intel Core i5-2540msandy Bridge. Algoritmus pro výpočet metodou větví a hranic Pro měření prvního algoritmu byly použity vstupní data o velikosti 4,10,15,20,22,25, 25 a 27 prvků. Časová složitost algoritmu na těchto datech je zobrazena v grafu níže.

Data jsou také zobrazena v následující tabulce: 4 10 15 20 22 25 27 Čas běhu [s] 0,000148 0,00322 0,021567 0,556 2,361 3,8208 10,496842 Podle grafu je vidět, že čas na výpočet těchto dat rostě exponenciálně vzhledem k velikosti vstupní množiny.

Algoritmus pro výpočet dynamickým programováním Výpočet byl opět otestován na vstupních datech o velikosti 4 až 25 vstupních prvků. Data jsou také zobrazena v následující tabulce: 4 10 15 20 22 25 Čas běhu [s] 0,000032 0,003126 0,16488 5,6542 21,013 181,96

FTPAS algoritmus Vývoj časové složitosti FTPAS algoritmu na datech od 4 do 25 položek: Data jsou zobrazena také v následující tabulce: 4 10 15 20 22 25 Čas běhu [s] 0,000027 0,00162 0,09232 4,5244 16,6288 151,823 Pro řešení algoritmem FPTAS je nutné vzít v úvahu také možnou chybu, při které může při výpočtu dojít. Algoritmus pracuje s hodnotou epsilon u nás nastavenou na 10%, která říka, jaká může být maximální odchylka od nejlepšího výsledku. Relativní chyba se pro maximalizační problémy počítá jako rozdíl ceny optima a ceny přibližného řešení podělený opět cenou přibližného řešení. Tedy: ε = ( C(OPT)-C(APX) ) / C(OPT) kde C(OPT) je cena optima a C(APX) je cena přibližného řešení Naměřené odchylky jsou uvedeny v následujcí tabulce: Počet prvků Průměrná odchylka Maximální odchylka 4 4,140399 5,456522 10 1,346641 1,579882

15 0,607584 0,707458 20 0,213884 0,283460 22 0,115084 0,164322 25 0,012954 0,022695 Maximální naměřená odchylka je velikostí rovna hodnotě 5,456522. Pro spočítání odchylky byl vytvořen script countdiv.py. Průměr časové složitosti je počítán pomocí scriptu counttime.py Srovnání časové složitosti algoritmů Pro představu je přiložen i graf se srovnáním výše zmíněných 3 algoritmů spolu s bruteforce algoritmem z minulého úkolu. Závěr Z naměřených hodnot u jednotlivých instancí řešených pomocí B&B algoritmu vyplývá, že je řešení závislé na pozici problému v řešeném stavovém prostoru. Pokud nalezneme nejlepší možné řešení hned na začátku prohledávání, je stavový prostor velmi rychle ořezán a řešení je tak zrychleno až několika násobně. Pokud nejlepší řešení leží až na konci stavového prostoru (nejhořší případ), má

řešení složitost stejnou jako řešení pomocí brute force algoritmu. Všechny zde uvedené algoritmy jsou velmi závislé na velikosti vstupních dat, jejich časová složitost je tak v nejhorším případě exponenciální. FPTAS algoritmus také počítá s jistou potencionální chybou. Rychlost zpracování ovšem vychází o trochu lépe, jak jeho předchůdce dynamické programování. Zdroje Popis problému baťohu: https://edux.fit.cvut.cz/courses/mi-paa/tutorials/batoh Dynamické programování: http://www.algoritmy.net/article/5521/batoh Zdrojové kódy: http://honza.dreamware.cz/batoh2.zip