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



Podobné dokumenty
ČVUT FEL X36PAA - Problémy a algoritmy. 4. úloha - Experimentální hodnocení algoritmů pro řešení 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

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

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

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

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

Dynamické programování

Algoritmizace prostorových úloh

Dynamické programování

Experimentální hodnocení kvality algoritmů

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

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

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

Metody lineární optimalizace Simplexová metoda. Distribuční úlohy

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

Optimalizace & soft omezení: algoritmy

1 Úvod do celočíselné lineární optimalizace

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

Úvod do programování 10. hodina

Třídy složitosti P a NP, NP-úplnost

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

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

Časová a prostorová složitost algoritmů

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

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Časová složitost / Time complexity

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

Aproximativní algoritmy UIN009 Efektivní algoritmy 1

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

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

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

10. Složitost a výkon

13. Lineární programování

Návrh Designu: Radek Mařík

Dynamické programování UIN009 Efektivní algoritmy 1

ALGORITMY A DATOVÉ STRUKTURY

5. Dynamické programování

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

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

4EK213 LINEÁRNÍ MODELY

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

Neuronové časové řady (ANN-TS)

Čísla, reprezentace, zjednodušené výpočty

4EK213 Lineární modely. 12. Dopravní problém výchozí řešení

Operační výzkum. Síťová analýza. Metoda CPM.

Parametrické programování

Algoritmy I, složitost

[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici

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

Digitální učební materiál

Optimalizace obecný úvod. [proč optimalizovat?] Formalizace problému. [existují podobné problémy?]

Úvod do informatiky. Miroslav Kolařík

[1] LU rozklad A = L U

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

Static Load Balancing Applied to Time Dependent Mechanical Problems

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

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Systematická tvorba jízdního řádu 2. cvičení

NPRG030 Programování I, 2018/19 1 / :03:07

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

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

Paralelní výpočty ve finančnictví

jednoduchá heuristika asymetrické okolí stavový prostor, kde nelze zabloudit připustit zhoršují cí tahy Pokročilé heuristiky

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

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

Numerická stabilita algoritmů

1 Definice problému a popis sekvenčního algoritmu

Základy umělé inteligence

Základy algoritmizace, návrh algoritmu

4EK201 Matematické modelování. 2. Lineární programování

Rekurzivní algoritmy

Stromy. Jan Hnilica Počítačové modelování 14

vzorek vzorek

Paměti cache. Cache může být realizována softwarově nebo hardwarově.

PŘÍJMENÍ a JMÉNO: Login studenta: DATUM:

4. Trojúhelníkový rozklad p. 1/20

Problém batohu. Zdeněk Hanzálek ČVUT FEL Katedra řídicí techniky. 5. dubna 2011

Dynamic programming. Historie. Dynamické programování je obsaženo v těchto programech: Příklad: chceme optimálně přiložit dvě sekvence

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Cvičení 5 - Průchod stromem a grafem

Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

Zobrazte si svazy a uspořádané množiny! Jan Outrata

6 Simplexová metoda: Principy

11MAMY LS 2017/2018. Úvod do Matlabu. 21. února Skupina 01. reseni2.m a tak dále + M souborem zadané funkce z příkladu 3 + souborem skupina.

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

PŘIJÍMACÍ TEST z informatiky a matematiky pro navazující magisterské studium Fakulta informatiky a managementu Univerzity Hradec Králové

11. Tabu prohledávání

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

Tato tematika je zpracována v Záznamy přednášek: str

13. Třídící algoritmy a násobení matic

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

12. Globální metody MI-PAA

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

Digitální učební materiál

Transkript:

ČVUT FEL X36PAA - Problémy a algoritmy 3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem Jméno: Marek Handl Datum: 1. 1. 2009 Cvičení: Pondělí 9:00 Zadání Naprogramujte řešení 0/1 problému batohu metodou větví a hranic (B&B) tak, aby omezujícím faktorem byla hodnota optimalizačního kritéria. Tj. použijte ořezávání shora (překročení kapacity batohu) i zdola (stávající řešení nemůže být lepší než nejlepší dosud nalezené) Naprogramujte řešení 0/1 problému batohu nebo alespoň 0/1 exaktního problému batohu bez cen metodou dynamického programování. Naprogramujte řešení 0/1 problému batohu heuristikou podle poměru cena/hmotnost s testem nejcennější věci. Zpráva by měla obsahovat: * Popis implementovaných metod * Srovnání výpočetních časů hrubé síly, B&B a dynamického programování (grafy vítány) * Srovnání vylepšené heuristiky s původní * Zhodnocení naměřených výsledků Metoda Branch & Bound Metoda využívá ořezávání výpočetního stromu, tak aby se dále nezkoumaly stavy, které nemohou vést k lepšímu řešení než je doposud nalezené. Ořezává se shora zahazují se stavy, kde je překročena hmotnost batohu. Ořezává se zdola zahazují se stavy, které nemohou vést ke zlepšení doposud známého řešení. Pro dolní ořezávání je nutné v každém stavu určit teoretické maximum, kterého je z tohoto stavu možno dosáhnout. V případě batohu je teoretickým maximem součet všech cen věcí, které mohou být do batohu ještě přidány, sečteno s cenou věcí, které v batohu již jsou. Aby mělo ořezávání zdola účinné, je nutné co nejdříve nalézt nějaké řešení. Z tohoto důvodu se používá hladový algoritmus. Popis řešení Rekurzivní volání metody solve. V každém kroku se řeší jedna konkrétní věc a provedou se 2 rekurzivní volání. První volání reprezentuje stav, kdy se konkrétní věc do batohu přidala. Volání se provede pouze v případě, že se věc do batohu hmotnostně vejde. Druhé volání reprezentuje stav, kdy věc přidána do batohu nebyla. Vždy se počítá teoretické dosažitelné maximum jako součet cen věcí, které ještě nebyly zkoumány. Pokud je toto maximum nižší než doposud nalezené řešení, volání se neprovede. Vždy se pamatuje nejlepší doposud nalezené řešení (objekt třídy Knapsack obsahující informaci, které věci byly do batohu přidány). Asymptotická složitost je stejná jako u hrubé síly, tedy ϴ(2^n). Metoda Dynamické programování Dynamické programování je vhodné pro situace, kdy řešení problému lze sestavit z řešení menších podproblémů. V případě rekurzivního přístupu by se některé podproblémy vypočítávaly opakovaně. Dynamické programování zaznamenává již vypočtené podvýsledky, a tak zabrání opakovaným výpočtům. Popis řešení

Alokuje se paměť pro tabulku výsledků (metoda gettable) s rozměry počet věcí (sloupce) a součet cen všech věcí (řádky). Přidáme nultý řádek a nultý sloupec. Nultý řádek vyplníme nulami, zbytek hodnotou MAXINT (reprezentuje nekonečno). Nechť i je číslo řádku, j číslo sloupce. Hodnota na pozici (i,j) reprezentuje hmotnost věcí v batohu s cenou přesně i a při použití pouze prvních j věcí. Vyplní se tabulka výsledků (metoda filltable). Každé pole se vyplňuje pouze jednou, využijí se k tomu dva vnořené for cykly. Hodnota na pozici (i,j) se vypočte jako minimum z hodnot (i,j-1) a (ihodnota_jté_věci, j-1)+hmotnost_jté_věci. Nalezne se řešení (metoda findresult). Prochází se všechny řádky od konce, dokud se v posledním sloupci nenalezne hodnota menší nebo rovna nosnosti batohu. To je výchozí bod pro řešení, které určuje počáteční hodnotu i. Pak se postupně snižuje j, dokud se nedosáhne nuly. Pokud je hodnota (i,j- 1) rovna hodnotě (i,j), pak j-tá věc není součástí řešení a jen se sníží j. V opačném případě je j-tá věc součástí řešení a sníží se j a zároveň se sníží i o cenu j-té věci. Vypočítává se každé pole tabulky jen jednou, tedy složitost je ϴ(n * součet_všech_cen). Vypsání řešení z tabulky lze provést v čase menším než čas výpočtu tabulky, je celková asymptotická složitost ϴ(n * součet_všech_cen). Metoda Heuristika podle poměru cena/hmotnost s testem nejcennější věci Metoda využívá k nalezení jednoho řešení stejnou heuristiku jako v úloze 1. Nalezne se také řešení obsahující pouze jednu nejcennější věc s přípustnou hmotností. Z těchto dvou řešení se vezme to lepší. Oproti heuristice bez testu (viz. Úloha 1), která má složitost ϴ(n*ln n), se zde navíc vykoná jen jeden průchod všech věcí, aby se našla ta nejcenější, což se provede v lineárním čase. Asymptotická složitost se nemění a zůstává na ϴ(n*ln n). Srovnání hrubé síly, B&B a dynamického programování čas # věcí Hrubá síla B&B Dynamické 4 neměřitelné neměřitelné neměřitelné 0,0003 0,0001 0,0002 15 0,012 0,0006 0,0005 20 0,361 0,0056 0,0005 22 1,392 0,021 0,0009 25 11,53 0,16 0,0009 27 50 0,64 0,0012 30 402 5 0,0016 32 1749 21 0,0016 35 13991 174 0,0016 37 55964 696 0,0017 40 447708 5568 0,0026 Tabulka 1: porovnání výpočetních časů metodou hrubé síly, Branch&Bound a dynamického programování Poznámka: šedé hodnoty nebyly naměřeny, ale dopočítány na základě předchozích naměřených výsledků a znalosti složitosti algoritmů

Čas (s) 500000 450000 400000 350000 300000 250000 200000 150000 0000 50000 0-50000 15 20 25 30 35 40 Počet věcí Hrubá síla Branch & Bound Dynamické prog. Graf 1: výpočetní časy metod hrubá síla, Branch&Bound a dynamické programování 00000 0000 000 00 Čas (s) 0 1 0,1 15 20 25 30 35 40 0,01 0,001 0,0001 Počet věcí Hrubá síla Branch & Bound Dynamické prog. Graf 2: výpočetní časy metod hrubá síla, Branch&Bound a dynamické programování v logaritmickém měřítku

Zhodnocení Metoda Branch & Bound sice podává výsledky rychleji, ale toto zrychlení není asymptotické. Asymptotická složitost výpočtu je stejná jako u hrubé síly. Dynamické programování využívá faktu, že v našem případě máme věci s hmotnostmi z oboru přirozených čísel, tím je omezen rozsah a počet možných hmotností batohu při různém zaplnění věcmi. V obecném případě by tento počet ale byl exponenciálně závislý na n. Pro testovací instance byl tento vztah přibližně lineární. Srovnání heuristik bez testu a s testem Průměrná chyba Maximální chyba # věcí Bez testu S testem Porovnání Bez testu S testem Porovnání 4 2,17% 1,33% -38,71% 36,36% 24,75% -31,93% 1,29% 1,% -14,73% 11,48% 11,48% 0,00% 15 0,48% 0,31% -35,42% 8,54% 2,77% -67,56% 20 0,60% 0,43% -28,33% 8,43% 4,08% -51,60% 22 0,69% 0,54% -21,74% 7,23% 3,02% -58,23% 25 0,50% 0,42% -16,00% 3,68% 2,59% -29,62% 27 0,50% 0,29% -42,00%,60% 1,85% -82,55% 30 0,51% 0,40% -21,57% 5,51% 1,75% -68,24% 32 0,34% 0,27% -20,59% 3,34% 2,28% -31,74% 35 0,28% 0,19% -32,14% 4,61% 1,82% -60,52% 37 0,34% 0,18% -47,06% 8,20% 1,18% -85,61% 40 0,20% 0,15% -25,00% 2,34% 0,95% -59,40% průměr 0,66% 0,47% -28,61% 9,19% 4,88% -52,25% Tabulka 2: porovnání chyb heuristik podle poměru cena/hmotnost s testem a bez testu nejcennější věci Poznámka: definice chyb viz. Úloha 1. Sloupec porovnání ukazuje o kolik procent poklesla chyba vzhledem k řešení bez testu. Zhodnocení Test nejcennější věci je výpočetně velmi snadný lineárně závislý na n. Časově se tedy téměř neprojeví, ale výsledky dává znatelně lepší. Vylepšené řešení na testovacích instancích přineslo v průměru na průměrné chybě zlepšení 28,6% a na maximální chybě 52,2%. Výpočetní sestava Výpočty byly prováděny v prostředí Windows Vista Business 32bit na stroji s procesorem Intel Core 2 Duo T7700 2,4 GHz a 3GB paměti. Podpůrné programy Programy byly napsány v jazyce C++, kompilovány ve Visual C++ 2005. Zdrojové kódy knapsack.cpp - hrubá síla, viz. Úloha 1 knapsack_bb.cpp - branch & bound knapsack_dynamic.cpp - dynamické programování knapsack_mostvalued.cpp - heuristika s testem nejcennější věci knapsackcompare.cpp - pomocný program pro porovnání heuristických řešení a hrubé síly knapsack, knapsack_bb, knapsack_dynamic, knapsack_mostvalued: Použití: program.exe input_file [output_file1 [output_file2] Formát input_file: každá instance na jednom řádku, na řádku jen celá čísla v tomto formátu

ID n M váha cena váha cena... Formát output_file: každá instance na jednom řádku, na řádku jen celá čísla ID n cena řešení 0/1 0/1... Program zpracovává input_file, řešení zaznamenává do output_file a na standardní výstup vypíše časy výpočtu, maximální a průměrnou relativní chybu heuristiky. knapsackcompare.cpp: Použití: knapsackcompare.exe input_optimal input_heuristic Formáty vstupních souborů viz výše. Program vypíše na standardní výstup průměrnou a relativní chybu heuristiky.