UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE

Transkript

UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE
UNICORN COLLEGE
Katedra informačních technologií
BAKALÁŘSKÁ PRÁCE
Automatické plánování
Autor BP: Yan Zaytsev
Vedoucí BP: Ing. David Hartman Ph. D.
2013 Praha
2
ZADÁNÍ
3
Čestné prohlášení
Prohlašuji, že jsem svou bakalářskou práci na téma Automatické plánování vypracoval
samostatně pod vedením vedoucího bakalářské práce a s použitím odborné literatury a
dalších informačních zdrojů, které jsou v práci citovány a jsou také uvedeny v seznamu
literatury a použitých zdrojů.
Jako autor této bakalářské práce dále prohlašuji, že v souvislosti s jejím vytvořením
jsem neporušil autorská práva třetích osob a jsem si plně vědom následků porušení
ustanovení § 11 a následujícího autorského zákona č. 121/2000 Sb.
V Praze dne ….........................
…......................................
Yan Zaytsev
4
Poděkování
Děkuji vedoucímu bakalářské práce Ing. Davidu Hartmanovi Ph.D. za účinnou
metodickou, pedagogickou a odbornou pomoc a za další cenné rady při zpracování této
bakalářské práce.
5
Automatické plánování
Automated planning
6
Abstrakt
Předmětem této bakalářské práce je provedení analýzy problematiky automatického
plánování, navržení a implementování knihovny a aplikace pro řešení zadaní
automatického plánování harmonogramu předmětů na univerzitě.
Práce je rozdělena do kapitol dle jednotlivých kroků v procesu analýzy a tvorby
aplikace.
Práce začíná úvodem do problematiky, kterou budeme řešit. V další kapitole
popisujeme úkol, který řešíme v bakalářské práci. Úvod do problematiky obsahuje
informace o problematice automatického plánování a také příklady, kde jej v současné
době uplatnit.
Další kapitola popisuje hlavní přístupy k problematice, způsoby řešení, náročnost,
výhody a nevýhody jednotlivých přístupu. Detailněji pak popisuje vybraný algoritmus.
Další kapitola řeší návrh knihovny a aplikace pro plánování harmonogramu. Popisuje
rozdělení systému na logické části a požadavky pro každou část.
Poslední kapitola řeší vývoj a specifikace knihovny a aplikace. Obsahuje detailní
dokumentaci pro všechny třídy knihovny. Popisuje rovněž příklady použití knihovny.
Klíčová slova: automatické plánovaní, weak-commitment search, timetabling,
automatické generovaní harmonogramu, plánovací algoritmus.
7
Abstract
The subject of this thesis is to analyze the automated planning problem, design and
implement a library and automated scheduling solution for university.
The thesis is divided into chapters according to the steps in the process of application
development.
The work begins with an introduction to the problem that we are dealing with. The
next chapter describes the task that we are dealing with in the thesis. Introduction
contains information about automated planning problem and use it nowadays.
Next chapter describes the main approaches to the problems, possible solutions, the
complexity, the advantages and disadvantages of each approach and separately describes
the selected algorithm.
The third chapter contains information about the algorithmic requirements for
application. Describes entities, which are represented in our task.
Next chapter is about the automated planning library and automated scheduling
system. It divides system into logical parts and it contains information about requirements
for each part.
The final chapter is about the development and specification of library and automated
scheduling application. It contains detailed documentation for all classes and objects of
library. It also describes all conditions of algorithm working and it contains library using
examples.
Keywords: automated planning, weak-commitment search, automated timetabling,
automated scheduling , planning algorithm.
8
Obsah
1.Úvod.................................................................................................................................10
1.1 Popis jednotlivých kapitol..............................................................................................10
1.2 Konvence použité v této práci.......................................................................................11
2.Teoretický popis problému automatického plánování.....................................................12
2.1 Statické plánování..........................................................................................................14
2.2 Dynamické plánování.....................................................................................................14
2.3 Omezující podmínky......................................................................................................14
3.Popis specifického plánovacího problému pro Unicorn College......................................15
3.1 O Unicorn College..........................................................................................................15
3.2 Problematika automatického plánovaní harmonogramu.............................................15
4.Popis existujících způsobu řešení problematiky...............................................................17
4.1 Barvení grafu.................................................................................................................17
4.2 Genetické algoritmy.......................................................................................................18
4.3 Logické programování....................................................................................................19
4.4 Constraint satisfaction problem....................................................................................19
4.4.1 Backtracking................................................................................................................20
4.4.2 Asynchronous backtracking.........................................................................................20
4.4.3 Weak-commitment search...........................................................................................22
4.4.4 Asynchronous weak-commitment search....................................................................24
4.4.5 Příklad běhu asynchronous weak-commitment search...............................................25
4.4.6 Srovnání rychlosti algoritmů........................................................................................27
5.Návrh aplikace řešící problém plánování harmonogramu pro Unicorn College..............28
5.1 Detailní popis použitého algoritmu...............................................................................28
5.1.1 Algoritmus...................................................................................................................30
5.1.2 Optimalizace algoritmu................................................................................................31
5.2 Návrh knihovny pro řešení problematiky automatického plánovaní............................33
5.2.1 Use-case diagram.........................................................................................................33
5.2.2 Domain model.............................................................................................................35
5.2.3 Popis jednotlivých částí systému..................................................................................37
5.3 Návrh aplikace plánovaní..............................................................................................42
5.3.2 Datová vrstva...............................................................................................................43
5.3.3 GUI...............................................................................................................................46
6.Implementace navržené aplikace.....................................................................................47
6.1 Implementace knihovny................................................................................................47
6.1.1 Implementace prostředí Solver....................................................................................48
6.1.2 Implementace prostředí Agent....................................................................................60
6.2 Implementace aplikace plánování.................................................................................67
6.2.1 Datová a business vrstva..............................................................................................67
6.2.2 GUI – Práce s daty........................................................................................................68
6.2.3 GUI – Plánování harmonogramu..................................................................................77
6.2.4 Min-conflict search algoritmy a výsledky plánování....................................................79
7.Závěr.................................................................................................................................81
8.Conclusion........................................................................................................................82
9
9.Seznam použitých zdrojů..................................................................................................83
10.Seznam obrázků.............................................................................................................85
11.Seznam tabulek..............................................................................................................86
12.Seznam příloh.................................................................................................................88
13.Příloha A: obsah přiloženého CD....................................................................................89
10
1. Úvod
Cílem této práce je analyzovat problematiku automatického plánování. Zabývat se
budeme rovněž detailní analýzou konkretního zadání z oblasti automatického plánování
harmonogramu předmětů na vysoké škole s různými omezeními dat.
Automatické plánování řeší problematiku vytvoření správné sekvence činností a akcí,
aby se systém mohl dostat ke stanovenému cíli pomocí změn parametrů dat se
stanovenými omezeními. Problematika automatického plánování se týká oblasti umělé
inteligence a je v současnosti velmi aktuální. Úloha automatického plánování je komplexní
a musí být vyvinuta a optimalizována v multidimenzionálním prostoru. 1
Tato práce se zabývá analýzou problematiky automatického plánovaní harmonogramu
předmětů, implementace knihovny a aplikace, která řeší tuto problematiku. Tento typ
řešení je o něco jednoduší než úkol automatického plánovaní. Na rozdíl od plánovaní
harmonogramu, kde máme fixní seznam událostí2, pro které musíme definovat parametry,
jako jsou čas a místnost, řešení problematiky universálního automatického plánovaní se
zabývá i tím, jaké vůbec události potřebujeme k dosažení cíle.
1.1 Popis jednotlivých kapitol
Text je rozdělen do kapitol dle jednotlivých kroků v procesu analýzy problematiky
automatického plánování a vývoje knihovny.
Kapitola „Teoretický popis problému automatického plánování“ obsahuje informace o
problematice automatického plánování včetně toho, kde ho lze využít v současně době.
Kapitola „Popis specifického plánovacího problému pro Unicorn College“ obsahuje
informace o funkčních požadavcích pro aplikaci.
Kapitola „Popis existujících způsobu řešení problematiky“ popisuje hlavní přístupy k
problematice, způsoby řešení, náročnost, výhody a nevýhody jednotlivých přístupu.
1
2
Ghallab, Malik; Nau, Dana S.; Traverso, Paolo (2004), Automated Planning: Theory and Practice, Morgan
Kaufmann, ISBN 1-55860-856-7
Pod pojmem událost v této práci rozumíme především přednášku či seminář. Pojem lze také rozšířit na
test, zkoušku atd.
11
Kapitola „Návrh aplikace řešící problém plánování harmonogramu pro Unicorn
College“ řeší návrh knihovny a aplikace pro plánování harmonogramu. Popisuje rozdělení
systémů na logické častí a požadavky pro každou část.
Kapitola „Implementace navržené aplikace“ řeší vývoj a specifikaci knihovny a
aplikace. Obsahuje detailní dokumentaci pro všechny třídy knihovny. Popisuje kromě toho
všechny podmínky práce a příklady použití knihovny. Součástí této kapitoly je analýza
výsledků práce plánovací aplikace.
1.2 Konvence použité v této práci
Obzvláště v příkladech se budou vyskytovat ukázky částí kódů nebo návrhové
diagramy. Pro odlišení byly použity různé typografické konvence:
1. Neproporcionální písmo − všechny ukázky zdrojových kódů.
2. Tučné písmo – zvýrazňuje důležité informace nebo klíčové pojmy.
3. Kurzíva – označuje nějakou dodatečnou informaci.
12
2. Teoretický popis problému automatického plánování
V popisu budou použity následující termíny:
•
Událost – v automatickém plánovaní základní jednotka vstupních dat. Lze ji chápat tak, že událost je
něco, co se může stát v čase a obsahuje nějaké další parametry.
•
Omezující podmínky – omezení pravidel spojení dat ve výsledku získaném v průběhu řešení
plánovacího úkolu.
•
Úkol – úloha, kterou musíme vyřešit; konkrétně popsané zadání.
•
Kontext úkolu – okolí, ve kterém se nachází úkol. Je to míra znalostí o spojení, struktuře a formě
dat, se kterými pracujeme. Když je kontext neznámý (úkol je nezávislý na kontextu) – pracujeme s
abstraktními jednotkami a neznáme specifická pravidla jejich spojení. Když je kontext známý (úkol
je závislý na kontextu) – máme informaci o všech typech a formách dat. Víme, jaké typy omezujících
podmínek můžou existovat ve vstupních datech.
Úkolem automatického plánování je vytvoření sekvence událostí a akcí, které
transformují vstupní udaje systému do cílového stavu.3 Automatické plánovaní lze,
například, použít v následujících úlohách: plánování harmonogramu událostí s omezujícími
podmínkami4, minimalizování nákladů na operaci ve vesmíru5, zlepšení efektivity
samostatných a dálkově ovládaných robotů6.
Řešení problematiky automatického plánování je možné rozdělit do dvou skupin:
nezávislé na kontextu úkolu a závislé na kontextu. Řešení prvního typu jsou pomalejší ale
univerzální. Řešení druhého typu jsou praktičtější a specializují se na zadaní s předem
definovanou datovou strukturou.
Samotné automatické plánování lze rozdělit podle přístupu k řešení. Nejpopulárnější a
nejpoužívanější jsou satisfiability (SAT) problem, constraint satisfaction problem (CSP),
large logical formula, integer programming (IP) problem 7 a grafové algoritmy.
3
4
5
6
7
Menkes, H..: INTEGER PROGRAMMING APPROACHES FOR AUTOMATED PLANNING [online]. Arizona ,
2008. Dissertation. ARIZONA STATE UNIVERSITY, page 1
Tato uloha bude popsana v další části práce
S. Chien and G. Rabideau, 2000, ASPEN - Automated Planning and Scheduling for Space Mission
Operations
Ezequiel Q. Ángel G.-Olaya D. Borrajo F., 2011, “Control of Autonomous Mobile Robots with Automated
Planning“, „JOURNAL OF PHYSICAL AGENTS“, vol. 5, no. 1, january
Menkes, H..: INTEGER PROGRAMMING APPROACHES FOR AUTOMATED PLANNING [online]. Arizona ,
2008. Dissertation. ARIZONA STATE UNIVERSITY, page 18
13
SAT – odpovídá na otázku, zda existuje řešení logického vzorce.8 Tento přístup je
obtížné aplikovat na problematiku automatického plánování harmonogramu, protože
transformace vstupních dat a jejich omezení do logických vzorců je velice náročnou
operací.
CSP – velmi univerzální přístup pro řešení problémů. Definice přístupu je následující: V
zadání máme seznam parametrů, pro něž musíme definovat hodnoty, které splňují
všechna omezení.9 Tato bakalářská práce popisuje CSP přístup a jeho použití pro řešení
problematiky automatického plánování harmonogramu. Pro CSP řešení existují velice
efektivní algoritmy. Tato práce vysvětluje a porovnává CSP algoritmy.
Large logical formula má stejné vlastností jako SAT, ale používá jiné metody pro řešení.
IP – zadání a řešení jsou pouze v celých číslech10. Hlavní podmínkou použítí tohoto
přístupu je, že problém musí být transformovatelný do IP, což někdy není možné, protože
podmínky často nelze převést do integer formy. Základní algoritmy pro řešení tohoto typu
jsou algoritmy pro řešení soustav lineárních rovnic. Přidávat nové omezující podmínky a
nové typy dat je složité.
Grafové algoritmy (barvení grafu) – široce používaný přístup pro řešení dané
problematiky. Podmínka použití je stejná jako v IP – problém musí být transformovatelný
do formy grafu. Detailnější popis přístupu naleznete v kapitole Popis existujících způsobu
řešení problematiky
8
Rodriguez, C.; Villagra, M.; Baran, B. (2007). "Asynchronous team algorithms for Boolean Satisfiability".
2007 2nd Bio-Inspired Models of Network, Information and Computing Systems.
doi:10.1109/BIMNICS.2007.4610083
9 Müller T.: Constraint-based Timetabling. Prague, 2005. Ph.D. Thesis. Charles University in Prague Faculty
of Mathematics and Physics
10 Menkes, H..: INTEGER PROGRAMMING APPROACHES FOR AUTOMATED PLANNING [online]. Arizona ,
2008. Dissertation. ARIZONA STATE UNIVERSITY
14
2.1 Statické plánování
Názvem „statické plánování“ míním systém, v němž jsou všechny údaje jednoznačně
definované a v budoucnu se nezmění. V našem případě (plánovaní harmonogramu) to
znamená, že algoritmus bude pracovat jen jednou. Když dojde ke změně základních dat, je
nutné adaptovat veškerá data pro nové podmínky a znovu spustit algoritmus. Každé
spuštění ovšem bude lokální a nebude používat data z předchozího vypočtu.
2.2 Dynamické plánování
V dynamickém systému algoritmus naplánuje výsledek jednou, a pokud dojde ke
změně základního či stávajícího stavu systému, algoritmus vše propočítá a vytvoří nové
řešení. Pro výpočet používá data z předchozích iterací. V takovém systému lze ručně
nastavit určité parametry, změnit omezující podmínky atd. Algoritmus ověří všechny
změny a provede adaptaci řešení pro tato data.
2.3 Omezující podmínky
Tato práce se bude zabývat řešením problematiky automatického plánování s různými
způsoby omezení dat. Automatické plánování má vždy určitá omezení a pravidla pro
výsledná data. V některých případech jsou omezení jednoduchá (omezuje se počet, pořadí
akcí nebo událostí), jiná jsou náročná, jako jsou například vztahy mezi událostmi,
nejednoznačná omezení a priority.
15
3. Popis specifického plánovacího problému pro Unicorn College
3.1 O Unicorn College
Unicorn College je vysoká škola v Praze, která nabízí vzdělání v oblasti informačních a
komunikačních technologií, ekonomie a managementu.
Ve zprávě akreditační komise z roku 2010 se můžeme dočíst následující: „UC je velmi
dobře materiálně vybavenou soukromou vysokou školou, která deklaruje těžiště svého
vzdělávání do oblasti profesního bakaláře. Značný důraz klade na propojení vzdělávací a
tvůrčí činnosti s praxí (výraznou podporu má v tomto ohledu ve firmě Unicorn). UC dbá na
transparentnost procesů, včetně procesu přijímacího řízení (tj. na jasné dodržování nároku
na kvalitu). Na velmi dobré úrovni je systém elektronických opor studia, což umocňuje
transparentnost celého vzdělávacího procesu. Tyto skutečnosti považuje sama vysoká
škola za své silné stránky spolu se zdůrazně-ním, že absolventi školy zůstávají v oboru.“ 11
3.2 Problematika automatického plánovaní harmonogramu
Jedním z cílů této bakalářské práce je implementace aplikace s ohledem na
charakteristiky rozvrhu Unicorn College. Cílová aplikace by navíc mela umožňovat
dynamické přeplánování.
V této kapitole popíšeme funkční požadavky pro budoucí aplikaci, podle těchto
požadavků budeme porovnávat jednotlivé způsoby řešení problematiky automatického
plánovaní a zvolíme jeden z přístupů pro implementaci.
Problém automatického plánování harmonogramu se týká následujících dat: událostí
(přednášek a seminářů), studentů, vyučujících, místností.
•
Každý student je účastníkem definovaného seznamu událostí (protože si je zapsal).
•
Každý vyučující může přednášet definovaný seznam předmětů.
•
Vyučující má preferenci na pracovní dobu (lze časové omezit úřední hodiny práce)
11 GERŠLOVÁ a kol. Zpráva Akreditační komise o hodnocení Unicorn College s.r.o. Praha [online] vyd.
listopad 2010 dostupné z URL:
http://www.akreditacnikomise.cz/attachments/article/252/CZ_hodnoceni_unicorn_college_2010.pdf
16
•
Škola má definovaný seznam místností, které je možné používat pro výuku. Je dána
rovněž kapacita místností a jejich vybavenost počítači.
•
Algoritmus musí definovat čas začátku pro každou událost. Událost obsahuje další
parametry: dobu trvání, seznam vyučujících, kteří mohou učit tento předmět,
seznam učeben, kde může probíhat výuka.
•
Algoritmus musí definovat seznam účastníků dané události (studenti jsou fixně
definováni, musíme definovat i vyučující).
•
Každá událost obsahuje seznam událostí na které je závislá (seminář musí byt
později než odpovídající přednáška).
•
Lze časově omezit celou výuku školy.
•
Během výuky lze přidat nové časové omezení pro výuku nebo vyučujícího a
algoritmus musí předělat výsledek podle nových podmínek.
17
4. Popis existujících způsobu řešení problematiky
Tato bakalářská práce se zabývá implementací řešení problematiky automatického
plánovaní pro harmonogram předmětů na univerzitě. Následující algoritmy a přístupy
budou řešit právě tuto problematiku. Existuje rovněž možnost rozšíření pro řešení
univerzálních úkolů automatického plánovaní.
De Werra12, A. Schaerf13, Edmund Kieran Burke a Sanja Petrovic14 ve svých pracech
popisují různé přístupy pro řešení problematiky automatického plánovaní harmonogramu.
4.1 Barvení grafu
Prvním z jmenovaných přístupů je transformace úkolu na úkol barvení grafu. Tato
metoda je poměrně efektivní, ale má své nevýhody. Jak bylo popsáno v úvodu do
problematiky, hlavní podmínkou použití barvení grafu je, že úkol musí být
transformovatelný na graf. Datová struktura zadání by měla být předem definována,
protože v případě použití této metody je obtížné adaptovat existující implementaci na
novou strukturu dat a nové typy omezujících podmínek. Některá omezení dat je těžké
adaptovat pro graf – například preferenci učitelů v rámci pracovní doby nebo časovou
návaznost lekcí a seminářů. Barvení grafu je často používaným přístupem pro řešení úkolů,
které mají jednoduché omezení (návaznost událostí a místností, událostí a studentů) nebo
malý počet událostí. Algoritmus není vhodný pro dynamické přizpůsobení systému ke
změně parametrů.
Struktura transformovaných dat bude sledující: každý vrchol grafu reprezentuje
jednotlivou událost harmonogramu. Barva vrcholu reprezentuje čas (začátku) události.
Hrany pak mohou být několika typů. První typ hran – studentská hrana reprezentující
studenta, který si zapsal předměty (události). Spojení dvou vrcholů touto hranou
znamená, že existuje student, který si zapsal související předměty, a události nemohou mít
konflikt v čase. Když obarvíme graf v běžném stavu, ve výsledku budeme mít seznamy
12 de Werra, D., 1985. „An introduction to timetabling“, European Journal of Operational Research,
Elsevier, vol. 19(2), pages 151-162, February.
13 Schaerf A., 1999, „A Survey of Automated Timetabling“, ARTIFICIAL INTELLIGENCE REVIEW, vol. 13(2),
pages 87-127
14 Burke, Edmund Kieran & Petrovic, Sanja, 2002. "Recent research directions in automated timetabling,"
European Journal of Operational Research, Elsevier, vol. 140(2), pages 266-280, July.
18
událostí, které nemohou probíhat ve stejném čase. Jestliže událost může probíhat jen v
jediné místnosti, musíme vytvořit jednotlivé hrany mezi vrcholy pro případ, že související
události musejí probíhat ve stejné místností. Stejný princip je možné použít i pro vyučující.
Když je definováno, že událost může probíhat v několika učebnách nebo tento
předmět může učit několik vyučujících, musíme přidat speciální typ hran – dynamické
hrany. Dynamická hrana může být definována jednostranně pro každý spojitý vrchol. Pod
pojmem „jednostranně“ rozumíme, že stejná hrana může být pro první vrchol dynamická a
pro související vrchol obyčejná, statická. Každý vrchol, který má dynamické hrany, během
barvení může zvolit, kterou z těchto hran použije pro ověření barvy. Vrchol musí zvolit
vždy jednu z dynamických hran stejného typu. Typ dynamické hrany je druhem
souvisejícího parametru (viz příklad níž). Když je určitá dynamická hrana vybrána jen
jedním vrcholem, pak hrana ztratí svůj význam, svou „moc“.
Příklad dynamické hrany: události A a B můžou probíhat v učebnách U1 a U2.
Vytvoříme následující graf: existují vrcholy VA a VB, které reprezentují události; existují
dvě dynamické hrany DU1 a DU2, které reprezentují učebny. V kvalitním výsledku barvení
grafu by musely dostat následující vztahy: U1 – barva 0 a použitá hrana DU1 (která ztratí
svou moc), U2 – barva 0 a použitá hrana DU2 (která ztratí svou moc).
Tento přístup nebudeme používat z důvodu obtížné adaptace časových podmínek,
možností budoucího rozšíření (nové typy podmínek) a složitého dynamického
přeplánovávání změněných dat.
4.2 Genetické algoritmy
A. Schaerf, E. Burke, S. Petrovic popisují přístup pomocí genetických algoritmů. Tato
metoda je efektivní pro řešení nastoleného problému, dává dobré výsledky s malým
počtem jednoduchých podmínek. Genetické algoritmy jsou algoritmy pro minimalizaci či
maximalizaci (fitness15) funkce. Z toho důvodu výsledkem genetického algoritmu bude
harmonogram, který má vysoké hodnocení pouze z pohledu fitness funkce. Vysoké
hodnocení přitom není známkou toho, že harmonogram neobsahuje žádné konflikty mezi
15 Fitness funkce – analytická funkce, která popisuje běžný stav dat a vrátí „hodnoceni“ stavu – číslo
které reprezentuje data
19
událostmi. Mohou například existovat události, které probíhají ve stejném čase a zapsal si
je nějaký stejný student. Fitness funkce musí jen zmenšit/zvetšit hodnocení stavu vůči
tomuto konfliktu, nemůže ale odstranit celý stav z iterace algoritmu. Genetické algoritmy
jsou dobře použitelné pro zadaní, která obsahují prioritní omezení dobře
transformovatelná do fitness funkce. Tato metoda se pohodlně používá pro úkoly s
efektivní alokací zdroje. Použití genetického algoritmu vyžaduje jemné doladění, aby se
nevyskytovaly nežádoucí výsledky, což je někdy velmi obtížné. Základní algoritmus také
není přípraven na dynamické přeplánování a z tohoto důvodu ho nebudeme používat pro
implementaci aplikace.
4.3 Logické programování
Jedním z přístupů pro řešení daného úkolu, o kterém se zmiňuje práce Schaerfa A., je
použití logického programování. Tento přístup je efektivní s malým množstvím dat a
poskytuje dobré výsledky. Pokud ovšem počet dat a podmínek stoupá, rychlost algoritmů
prudce klesá. Důvodem je skutečnost, že algoritmy zpracování programu v logickém
programování jsou univerzální. Chcete-li zvýšit rychlost, musíte vytvořit specializovaný
algoritmus, který je závislý na kontextu řešení problému v daně doméně.
4.4 Constraint satisfaction problem
Všichni zmínění autoři popisují způsob řešení problematiky automatického plánovaní
pomocí CSP. Jde o univerzální typ řešení, při němž je nutné definovat pro určitou sadu
parametrů hodnoty, které splňují všechna omezení a podmínky. CSP umožňuje
přidávat/vytvářet omezení libovolného typu (pro zadávaná data), s prioritními omezeními
ale má nízkou efektivitu práce. CSP algoritmy buď nabídnou řešení, které plně splní úkol,
nebo zjistí, že dokonalé řešení neexistuje, a nabídne aspoň částečné. Tato bakalářská práce
bude používat tento přístup pro implementaci aplikace.
CSP řešení se skládá ze tří částí: V, D, C.16
V – skupina všech parametrů systému. V rámci našeho úkolu máme tři druhy
parametrů: událost – čas (musíme definovat čas začátku), událost – místnost (musíme
16 Müller T.: Constraint-based Timetabling. Prague, 2005. Ph.D. Thesis. Charles University in Prague
Faculty of Mathematics and Physics, page 4
20
definovat místnost, kde bude probíhat samotná událost) a událost – vyučující (musíme
definovat vyučujícího, který bude účastníkem dané události). V rámci rozšíření úkolu lze
též přidat parametry jako „student – skupina předmětu“(musíme definovat skupinu, ve
které student bude studovat jednotlivý předmět). Pro naplnění skupiny V musíme pro
každou událost vytvořit 3 parametry(podle druhu parametru, které byli popsané) a přidat
jej do V.
D – skupina všech domén parametru v (doména D(v) je skupina všech hodnot, které
mohou byt definovány pro parametr v). V případě harmonogramu například D(událostčas) obsahuje všechny časové intervaly, kdy může probíhat výuka.
P – množství všech omezení a podmínek v systému. Podmínky mohou být různého
typu. V harmonogramu jde o podmínky, které omezuje čas nebo podmínka, že ve stejnou
dobu nemohou probíhat události ve stejné místností.
Řešením CSP problému je definování všech parametrů ze skupiny V, některých hodnot
ze skupiny Dv, které budou splňovat všechna omezení P.
Existují různé algoritmy pro řešení CSP problému. Dál popíšeme základní algoritmy.
4.4.1 Backtracking
Není okamžitě zřejmé, že backtracking algoritmus je součástí CSP přístupu. Je to
nejjednodušší algoritmus. Tento algoritmus postupně prochází všechny parametry ze
skupiny V, snaží se postupně použít všechny hodnoty ze skupiny D a ověřuje stav podle
omezujících podmínek P. Vždy poskytuje řešení úkolu nebo odpověď, že řešení neexistuje.
Tento algoritmus má vysokou výpočetní náročnost, která závisí na množství parametrů,
množství jejich možných hodnot a množství omezujících podmínek.
4.4.2 Asynchronous backtracking
Algoritmus17 přináší novou strukturu dat: všechny parametry ze skupiny V jsou
přiřazeny k novému prvku „agent“. Agent obsahuje dvě vlastnosti – parametr v a jeho
hodnotu ze skupiny D(v).
17 Makoto Yokoo, 1995, „Asynchronous Weak-commitment Search for Solving Distributed Constraint
Satisfaction Problems“, International Conference on Principles and Practice of Constraint Programming,
pages 88-102
21
Během zpracování algoritmu se každý agent nachází ve zvláštním okolí 18 a na začátku
nezná žádné jiné parametry ze skupiny V. Agent má také spojení se všemi agenty nebo se
speciálním mezisystémem, pomocí kterého může komunikovat s ostatními agenty. Každý
agent pracuje samostatně. V začáteční konfigurace, máme systém, ve kterém se nacházejí
všechny agenti, které mohou mezi sebou komunikovat(viz niž.). Znalostí každého agenta o
ostatních parametru ze skupiny V jsou prázdné a budou naplnění během práce algoritmu.
Začínáme tím, že algoritmus spustí operace definovaní hodnoty pro každého agenta.
Agent se snaží definovat pro svůj parametr hodnotu, která bude splňovat všechny
podmínky P. Když agent mění hodnotu, odesílá notifikace (notifikace má název „ok?“) do
všech jiných agentů. Zpracování různých notifikací je v tomto algoritmu důležité během
obdržení notifikace: agent mění své okolí a znalosti o jiných parametrech ze skupiny V a
jejich hodnotách. Po obdržení notifikace „ok?“ ostatní agenti ověřují své hodnoty a
omezení P, mění svou hodnotu stejným způsobem jako první agent, odesílají další
notifikace a také ukládají změněné či nové znalosti o parametrech do svého okolí. Když
agent nemůže vybrat správnou hodnotu pro svůj parametr, odesílá notifikaci chyby
(notifikace má název „nogood“). Když agent obdrží notifikaci „nogood“, musí označit stav
systému(běžné znalosti o parametrech) který uchovává ve svém okolí jako chybný
(„nogood“) a vrátit svou předchozí hodnotu. Seznam chybných stavů je v tomto algoritmu
důležitý. Všechní nogood stavy se přidávají jako omezující podmínka do skupiny P(nogood
stavy jsou ve speciálním seznamu „nogood list“), abych do teto situace nedošlo později.
Tento algoritmus pracuje výrazně rychleji než backtracking algoritmus, ale má také své
nevýhody. Během práce algoritmus neposkytuje žádné částečné řešení a musíme čekat, až
se celé zpracovaní dokončí. Algoritmus také přináší nové požadavky na paralelní
zpracování jednotlivých agentů, paměť (okolí jednotlivého agentu) a komunikační
schopnost mezi agenty. Ve své práci19 ale Roie Zivan a Amnon Meisel píšou, že rychlost
algoritmu ABT (Asynchronous Backtracking) lze zlepšit, když všechny agenty budou čekat
na všechny notifikace v běžné iteraci. Iterace – jedno zpracovávaní všech aktuálních
18 Okolí agenta – izolované prostředí, které uchovává informace o ostatní agenti a parametry. Taky
uchovává informace o všech podmínkách P a hodnotách ze skupiny D(V). Během práce algoritmu, agent
modifikuje své okolí: doplňuje nové informace či mění existující. Okolí reprezentuje stav „systému“ pro
každého agenta zvlášť.
19 Roie Zivan and Amnon Meisels, 2006 ,„Message delay and Asynchronous DisCSP search“
22
notifikací v jednotlivých agentech.
4.4.3 Weak-commitment search
Weak-commitment search je dalším vylepšením backtracking algoritmu. Algoritmus
používá jednotku „agent“ podobně jako Asynchronous Backtracking. Vlastnosti algoritmu
jsou: poskytování částečného řešení v jakémkoli momentu, používání min-conflict
ordering algoritmu.
Min-conflict ordering(search) algoritmus – speciální algoritmus, který vyhledává
hodnotu ze skupiny D(v) pro parametr v ze skupiny V, která vyvolává minimální množství
konfliktů s ostatními parametry ve skupině V podle omezujících podmínek P.
Algoritmus během práce vždy poskytuje částečné řešení. Hlavní myšlenkou algoritmu
je definovat hodnotu(ze skupiny D(v)) parametru (ze skupiny V) agenta a přidat ho do
částečného řešení. Detailní popis algoritmu můžete najít v kapitole „Detailní popis
použitého algoritmu“
Pro zvýšení rychlosti práce algoritmus používá min-conflict search pro hledání takové
hodnoty agenta, která má nejméně konfliktů s běžným stavem systému. Min-conflict
search algoritmus je velice důležitý a přímo ovlivňuje rychlost weak-commitment search
algoritmu.
Ilustrace 1: Weak-commetment search algortihm
Zdroj: Makoto Yokoo 21
23
Algoritmus je následující:
Máme dvě skupiny agentů20 - „left group of solution“(levá skupina řešení) a „partial
solution“ (částečné řešení). Algoritmus se v jedné iteraci snaží vzít agenta z levé skupiny,
definovat jeho hodnotu, která bude splňovat všechny podmínky P v rámci částečného
řešení a bude mít nejméně konfliktu s agenty levé skupiny. Na začátku zpracování se
všechny agenty nacházejí v levé skupině.
Když algoritmus takovou hodnotu definovat nemůže, přidává běžné částečné řešení
jako chybné(chybný stav) do „nogood listu“(které je součástí podmínek P) a přesouvá
všechny agenty do levé skupiny a začíná novou iteraci.
Tato bakalářská práce popisuje implementaci tohoto algoritmu pro řešení
problematiky automatického plánování harmonogramu předmětů. Weak-commitment
search vykazuje vysokou efektivitu a rychlost na příkladu řešení klasických zadaní: barvení
grafu, n-queens, 3SAT. Algoritmus je universální a je použitelný pro velké množství úkolů.
Jediný komponent algoritmu, který není universální a lze ho specifikovat pro konkretní
systém, je min-conflict search algoritmus.
Algoritmus podporuje dynamické přeplánování. Pro dynamické přeplánování musíme
přidat běžný stav do „nogood listu“ nebo přidat nové podmínky a přesunout všechny
agenty do levé skupiny. Dál pak jednoduše spustíme algoritmus, pokud změna byla malá,
neměla velký vliv na celý stav a pravděpodobnost, že velké množství agentů nezmění své
hodnoty, je vysoká. Když chceme kromě toho zafixovat nějakou hodnotu agentu, v minconflict search algoritmu budeme vracet vždy stejnout hodnotu nebo prázdnou hodnotu
(když existují konflikty s částečným řešením) a algoritmus se bude snažit vyřešit tento stav.
20 Dohromady jejich sjednocení je celé V (resp. Množina agentů odpovídající V)
24
4.4.4 Asynchronous weak-commitment search
Tento algoritmus je sjednocením asynchronous backtracking algoritmu a weakcommitment search algoritmu. Přidává novou vlastnost agenta – prioritu.21 Dál bude
popsán algoritmus stanovení priority.
Ilustrace 2: Procedures for receiving messages (AWC)
Zdroj: Makoto Yokoo 21
Původní hodnota priority je 0. V případě, že algoritmus nemůže definovat korektní
hodnotu agenta a spustí operaci přidání částečného řešení do „nogood listu“, zvýší prioritu
tohoto agenta(nová priorita se rovná maximální priorita v okolí agenta + 1). V algoritmu se
všechny genti snaží definovat svou hodnotu paralelně. Algoritmus vyhledává novou
21 Makoto Yokoo, 1995, „Asynchronous Weak-commitment Search for Solving Distributed Constraint
Satisfaction Problems“, International Conference on Principles and Practice of Constraint Programming,
pages 88-102
25
hodnotu pomocí min-conflict search algoritmu a pro minimalizaci konfliktů uvažuje jen
agenty, které mají vyšší prioritu. Když agent nemůže definovat svou hodnotu vůči
agentům, které mají nižší prioritu, běžný agent mění jejich hodnoty, aby nevyvolávaly
konflikty podle omezujících podmínek, a odesílá notifikace.
V našem případě by šlo použít i AWC, kdyby s tím nebylo několik problémů. Teoreticky
je algoritmus rychlejší než synchronní WC, ale jen v ideálním vícevláknovém prostředí.
Emulace tohoto prostředí, samozřejmě, zpomalí běh aplikace, což znamená, že aplikace
nebude tak rychlá jako WC. Z tohoto důvodu budu ve své práci používat synchronní WC s
prioritními agenty.
4.4.5 Příklad běhu asynchronous weak-commitment search
Na další ilustrace 3 můžete znázornit běh AWC algoritmu na příkladů úlohy N
dam(n=4)22.
Ilustrace 3: Příklad běhu AWC algoritmu
Zdroj: Makoto Yokoo 21
Vytvoříme 4 agenty, pro každou dámu. Přiřazeny parametr agenta je číslo řádku, kde se
nachází dáma(x1,x2,x3,x4). Číslo v závorce reprezentuje prioritu agenta. Počáteční
hodnota priority je 0. Počáteční hodnoty agentův jsou zobrazení na ilustrace (agent x1 = 1,
agent x2 = 4, agent x3 = 2, agent x4 = 4). Tato hodnota je generována náhodně, když
algoritmus spustil operace definovaní hodnoty agenta na začátku práce.
22 Problém osmi(v našem případě čtyř) dam je šachová úloha, respektive kombinatorický problém umístit
na šachovnici osm dam tak, aby se podle pravidel šachu navzájem neohrožovaly, tedy vybrat osm polí
tak, aby žádná dvě nebyla ve stejné řadě, sloupci, ani diagonální linii. Obecněji jde o to nalézt všechna
možná taková rozmístění nebo určit jejich počet.
26
Dal, agenty odesílají notifikace „ok?“ pro všechny ostatní agenty(„zpráva“,“odesílající
agent“,“hodnota“,“priorita“):
•
Agent x1 odesílá notifikace (ok?, „x1“, „0“, „0“)
•
Agent x2 odesilí notifikace („ok?“,“x2“,“4“,“0“)
•
Agent x3 odesilí notifikace („ok?“,“x3“,“2“,“0“)
•
Agent x4 odesilí notifikace („ok?“,“x4“,“4“,“0“)
V našem případě jen agent x4 není v konzistence s ostatní agenty, které mají stejnou
nebo vyšší prioritu. Agent x4 odesílá notifikace „nogood“ a zvětšuje své prioritu. Dal,
agent x4, pomocí min-conflict search algoritmu vyhledává novou hodnotu, která
minimalizuje množství konfliktu z ostatní agenty (nová hodnota je 3). Agent x4 definuje
své hodnotu jako 3 a odesílá notifikace („ok?“,“x4“,“3“,“1“) - ilustrace 3(b). Dal, agent x3 se
snaží změnit své hodnotu(běžná vyvolává konfliktu v omezujících podmínkách) ale to není
možná. Agent x3 taky zvětšuje své prioritu(nová priorita je 2(maximální priorita v okolí
agenta + 1)) a odesílá notifikace „nogood“. Dal, agent x3 vyhledává hodnotu která bych
minimalizovala konflikty vůči agentův x1 a x2 (protože mají menší prioritu) a odesíla
notifikace („ok?“,“x3“,“2“,“1“) - ilustrace 3(c). Dal, agent x1 mění definuje své hodnotu jako
2 a řešení je nalezeno (ilustrace 3(d)).
27
4.4.6 Srovnání rychlosti algoritmů
Pro srovnání rychlosti algoritmů lze použít následující tabulky z práce Makoto Yokoo23.
Symbol „-“ zmámená, že algoritmus neřešil úkol v odpovídající dobu.
Tabulka 4.1: Požadované množství cyklů pro n-queens problém
n
asynchronous
backtracking
min-conflict only
Asynchronous weak-commitment
10
105.4
102.6
41.5
50
662.7
623.0
59.1
100
931.4
851.3
50.8
1000
-
891.8
29.6
Zdroj: Makoto Yokoo23
Tabulka 4.2: Požadované množství cyklů pro problém barvení grafu
n
asynchronous
backtracking
min-conflict only
Asynchronous weak-commitment
60
917.4
937.8
59.4
90
-
994.5
70.1
120
-
-
106.4
Zdroj: Makoto Yokoo23
Tabulka 4.3: Požadované množství cyklů pro network resource allocation problém
asynchronous
backtracking
min-conflict only
Asynchronous weak-commitment
984.8
428.4
17.3
Zdroj: Makoto Yokoo23
23 Makoto Yokoo, 1995, „Asynchronous Weak-commitment Search for Solving Distributed Constraint
Satisfaction Problems“, International Conference on Principles and Practice of Constraint Programming,
pages 88-102
28
5. Návrh aplikace řešící problém plánování harmonogramu pro
Unicorn College
5.1 Detailní popis použitého algoritmu
Pro řešení běžného problému budeme používat Weak-Commitment Search algoritmus
s prioritními agenty (Ilustrace 4).
Tabulka 5.1: Použité pojmy v navrhu řešení
Pojem
Popis
Agent
Jednotka, která je vytvořená pro specifický parametr zadání a musí definovat
svou hodnotu. Agent A1 například obsahuje parametr „událost-čas“ a je
spojen s událostí „UA“, která je součástí předmětu „PA“.
Kontext
Jednotka algoritmu, která uchovává všechny agenty a nogood snímky.
Nogood
snímek
Angl. „snapshot“. Uchovává seznam agentů částečného řešení v moment, kdy
min. conflict algoritmus nemůže definovat hodnotu, aby se stejná situace
neopakovala později.
Leva část
řešení
Skupina agentů, které nemájí definovanou hodnotu nebo hodnota není
vhodná
Částeční
řešení
Skupina agentů, které mají definovanou hodnotu a nejsou v konfliktu s jinými
agenty v částečném řešení
WC
Weak-Commitment Search
Zdroj: Vlastní zpracování
Hlavní myšlenka algoritmu je definovat specifickou hodnotu pro každého agenta.
Podmínky definování hodnoty:
•
Hodnota agenta a samotný agent nemusejí být v konfliktu s jinými agenty v
částečném řešení.
•
Hodnota agenta a samotný agent musí mít nejméně konfliktů s levou častí řešení v
porovnání s jinými možnými hodnotami agenta.
•
Hodnota při definování nemusí vést ke stavu, který je zapsaný v jakémkoli nogood
snímku.
Všechny tyto podmínky musí být zapsány ve specifickém min. conflict search
algoritmu, který definuje hodnotu agenta.
29
Zdroj: Vlastní zpracování
30
5.1.1 Algoritmus
Algoritmus na začátku přesouvá všechny agenty do levé části řešení. Poté začne
„iterace přesouvání“. WC algoritmus musí vybrat takového agenta z levé části řešení, který
splňuje následující podmínky:
•
Všechny agenty, na nichž je závislý, musejí být v částečném řešení.
•
Musejí mít nejvyšší prioritu.
Když není možné vybrat agenta, ale přesto agenty v levé častí řešení existují, znamená,
to, že agenty mají cyklickou závilost a tuto situaci není možné řešit – řešení neexistuje.
Když není možné vybrat agenta, protože levá část řešení je prázdná, pak jsou všechny
agenty v částečném řešení – řešení nalezeno.
Když je možné vybrat agenta, pak definujeme, že tento agent je běžný, a postupujeme
dál.
Algoritmus používá min. conflict search vyhledávání hodnoty agenta. Pro každý
jednotlivý typ parametru (událost-čas, událost-místnost, událost-vyučující) bychom měli
mít zvláštní min-conflict search algoritmus. Tento algoritmus musí zjistit hodnotu agenta
podle definovaných podmínek. Podmínky jsou popsány v kapitole „Popis specifického
plánovacího problému pro Unicorn College“ a jsou následující: „celá výuka je časové
omezená, pracovní doba vyučujícího je omezena, studenti nemusejí mít zapsané události
ve stejný čas“ atd.
Když hodnota, která je vrácena min-conflict search algoritmem, není prázdna, pak
definujeme hodnotu agenta, přesuneme ho do částečného řešení a začneme další iteraci.
Když vrácená hodnota je prázdná a částečné řešení též, pak řešení neexistuje.
Když vrácená hodnota je prázdná a částečné řešení není prázdné, pak musíme vytvořit
nový nogood snímek a uložit ho do kontextu. Zvýšíme prioritu běžného agenta(maximální
priorita v kontextu +1) a přesuneme všechny agenty do levé častí řešení. Konec iterace
hledaní.
31
5.1.2 Optimalizace algoritmu
Pro algoritmus je možné použít několik optimalizací pro zrychlení.
1. Práce se skupinami agentů v kontextu24: levá část řešení a částečné řešení. Pro
zrychlení přesouvání agentů mezi skupinami je možné zadat nový parametr agenta
(„kontext-skupina“) a uchovávat všechny agenty v jednom poli.
2. Ověření, že nová hodnota neexistuje v žádném nogood snímku. Tato operace je
často používána pro hledaní nové hodnoty agenta. Nogood snímek je vytvořen
tehdy, když agent nemůže definovat svou hodnotu. Aby nedošlo k této situaci
opakovaně, musíme vyhledávat takovou hodnotu, která nepřivede běžný stav do
jednoho ze stavů, který se nachází v nogood listu. Optimalizace může být
provedena ve třech etapách.
◦ V první etapě (před spuštěním min. conflict algoritmu) vybíráme pouze ty
nogood snímky, které mají velikost částečného řešení +1. Plus jeden, protože
budeme přidávat novou hodnotu.
◦ Pro další etapu musíme přidat do agenta možnost počítat unikátní číslo. Toto
číslo identifikuje agenta, který je díky tomu závislý na následujících
jednotkách: hodnota agenta, typ parametru agenta a objekty zadaní, které
souvisí s tímto agentem. Máme například agenta, který reprezentuje
parameter „událost-místnost“(napr. identifikační číslo 1), je spojen s událostí
U1 (identifikační číslo 34) a má hodnotu M1 (identifikační číslo 57). Generátor
unikátního čísla by musel vratít číslo závislé na těchto datech, např.
((1*100)+34)*100+57 = 13457 a toto číslo bude používáno jako identifikátor
agenta. Pro každý nogood snímek a pro aktuální částečné řešení musíme sečíst
všechny unikátní čísla agentů a uložit jako novou charakteristiku seznamu
agentů (hash číslo). Dál, když ověřujeme novou hodnotu, sečteme hash číslo
částečného řešení a unikátní číslo agenta s novou hodnotou. Nové číslo
porovnáme s hash číslem všech nogood snímku. Když byl nalezen snímek, který
má stejné hash číslo, postupujeme do třetí etapy.
24
Jednotka algoritmu, která uchovává všechny agenty a nogood snímky
32
◦ V poslední etapě musíme porovnat vhodný nogood snímek s průběžným
částečným řešením (+ nová hodnota). Pro optimalizaci této etapy musíme
vytřídit agenty průběžného částečného řešení podle jejich unikátního čísla. V
takovém stavu srovnání nogood snímku a částečného řešení vyžaduje max. N
operací porovnání (počet agentů v nogood snímku).
3. Uchování agentů v kontextu struktury „sorted array/list“. Lze také řadit agenty
podle unikátního čísla, který potřebujeme pro předchozí optimalizace či priority
agenta. Když nebudeme používat první optimalizaci, je možné vytvořit dvě pole:
pro částečné řešení a pak řadit podle unikátního čísla, a pro levou čast řešení a
řadit podle priority agenta.
V navrhu řešení a jeho implementace budeme používat optimalizaci č. 2 a kombinaci
optimalizací 1 a 3, které porovnáme včetně jejich kombinací (tabulky 5.2 a 5.4).
Tabulka 5.2: Porovnání optimalizací (jeden seznam)
Jeden seznam
Vybrat agenta z
O(n)
levé častí řešení
Přesunout
agenta mezi
O(1)
skupinami
Změnit prioritu
O(1)
agenta
Seřadit
seznam(pro
O(nlogn)
nogood ověřeni)
Jeden seznam
uspořádaný podle
unikátních čísel agentů
O(n)
Jeden seznam uspořádaný
podle priority agentu
O(1) – závilost agenta zvýší
náročnost
O(n) – přesunout levou O(n) – přesunout z částečného
část do částečného řešení řešení do levé častí
O(1)
O(n)
O(1)
O(nlogn)
Zdroj: Vlastní zpracování
33
Tabulka 5.3: Porovnání optimalizace (dva seznamy)
Vybrat agenta z levé
časti řešení
Přesunout agenta
mezi skupinami
Změnit priority
agenta
Seřadit seznam (pro
nogood ověřeni)
Dva seznamy
Dva uspořádané seznamy
O(n)
O(1) – zavilost agenta zvýší náročnost
O(n)
O(n)
O(1)
O(n)
O(nlogn)
O(1)
Zdroj: Vlastní zpracování
Ze srovnávacích tabulek vyplývá, že nejlepší optimalizace je implementace jediného
listu agentů ve struktuře „sorted list“, který je řazen podle unikátního čísla agenta.
5.2 Návrh knihovny pro řešení problematiky automatického plánovaní
Knihovna pro řešení problému plánovaní pomocí Weak-Commitment Search algoritmu
musí být univerzální. Knihovna musí poskytovat možnost přidávat libovolné objekty a
nastavovat parametry pro řešení aktuálního stavu systému. Knihovna kromě toho musí
poskytovat metody pro kontrolu algoritmu během výpočtu. Název knihovny je MWCS
library (Modified Weak-Commitment Search).
5.2.1 Use-case diagram
Případy užití (use-case), které bude řešit knihovna, jsou zobrazeny na ilustraci 5. Jediný
aktér na diagramu je aplikace, která používá knihovnu. Popis jednotlivých use-case se
nachází v tabulce 5.4
34
Ilustrace 5: Use-case diagram - MWCS knihovna
Zdroj: Vlastní zpracování
Tabulka 5.4: Popis use-case knihovny MWCS
Kód
Use-case
Popis
UC01 Přidat informace o všech Knihovna musí poskytovat metody pro přidání agentů
objektech
pro jednotlivé objekty a parametry systému
UC02 Přidat min. conflict
search algoritmy
Knihovna musí poskytovat metody pro nastavení
specifického algoritmu pro vyhledání hodnoty, která by
mohla být v konzistenci se všemi existujícími omezeními
UC03 Přidat algoritmy pro
generování unikátních
čísel
Knihovna musí poskytovat metody pro přidání
jednotlivých algoritmů generování unikátních čísel pro
agenty
UC04 Spustit další iteraci
Aplikace musí mít možnost kontrolovat průběh výpočtu
UC05 Získat informaci o stavu
výpočtu
Aplikace musí mít možnost dostávat informace o stavu
výpočtu (stav běhu, agenty, nogood list)
Zdroj: Vlastní zpracování
35
5.2.2 Domain model
Na ilustraci 6 (ilustrace je rozdělená na jednotlivé části v dalších kapitolách) je
zobrazen domain model celé knihovny. MWCS knihovnu lze rozdělit na dvě části: Solver
prostředí a Agent prostředí. Solver prostředí řeší vypočítání a běh WC algoritmu. Agent
prostředí řeší práci s daty a specifickými min. conflict search algoritmy.
Ilustrace 6: MWCS domain model
Zdroj: Vlastní zpracování
Popis jednotlivých tříd se nachází v tabulce 5.5. V této tabulce jsou popsány hlavní
elementy knihovny a souvislost jednotlivých jednotek s use-case modelem. Implementace
jednotlivých tříd bude popsána v další části této práce.
Příklad použití knihovny lze vidět na sekvenčním diagramu (7). Na ilustraci je zobrazen
způsob použití a komunikace s knihovnou. Na této ilustraci je možné vidět také postup
použití jednotlivých metod a operací pro řešení problematiky automatického plánování.
Práci s knihovnou lze rozdělit na dvě častí: transformace objektového modelu ze systému a
rovněž spuštění a kontrola algoritmu. V prví části musí aplikace vytvořit agenty a
definovat jejich parametry a objekty související s agenty. Dál pak musí aplikace nastavit
algoritmus min. conflict search a také algoritmus generovaní unikátních čísel pro každý typ
parametru. V druhé častí musí aplikace kontrolovat běh algoritmu a měla by se stále
36
spouštět iterace, dokud se nedostane k jednomu z následujících výsledků: řešení existuje
či neexistuje.
Tabulka 5.5: MWCS domain model - popis
Třída
Use
case
Prostředí
Popis
Solver
UC04
UC05
Solver
Poskytuje metody pro kontrolu běhu
algoritmu
Context
UC01
UC05
Solver
Úložiště všech dat v systému
ContextNogoodSnapshot
Solver
Specifický kontejner pro uložení kopie
kontextu
AgentNogood
Solver
Specifický kontejner pro uložení kopie
agentu
Agent
UC01
Agent
Jednotka, která reprezentuje parametr,
pro který je nutné definovat hodnotu
Parameter
UC01
Agent
Popisuje parametr agenta; úložiště
souvisejících dat
ParameterType
UC03
UC02
Agent
Popisuje typ konkrétního parametru a
poskytuje přístup k min. conflict search a
algoritmu generovaní unikátního čísla
IMinConflictSearchAlg
UC03
UC02
Agent
Univerzální rozhraní pro min. conflict
search algoritmus
Zdroj: Vlastní zpracování
Během práce algoritmu má uživatelská aplikace přístup ke všem datům uvnitř
knihovny. Aby nedošlo k chybám, min. conflict search algoritmus nesmí měnit data, která
souvisejí s agenty v uživatelské aplikaci. Knihovna zpracovává události pro změnu hodnoty,
priority a stav agentu. Aplikace musí definovat delegáty pro tyto události. Měnit data v
objektovém modelu aplikace je možné jen v době spuštění delegátu.
V další kapitole se popisuje základní návrh knihovny: základní třídy a jejich atributy a
metody. V kapitole o implementaci knihovny se popisuje konkretní realizace jednotlivých
častí knihovny MWCS.
37
Ilustrace 7: Sekvenční diagram použíti knihovny
Zdroj: Vlastní zpracování
5.2.3 Popis jednotlivých částí systému
Třída MWCS::Solver – základní jednotka pro přístup k algoritmu a datům, která
poskytují funkčnost pro vytváření jednotlivých instancí algoritmu. Hlavní funkčnost –
kontrola běhu algoritmu.
Tabulka 5.6: Třída MWCS::Solver - Atributy
Atribut
Popis
iteration
Uchovává pořadové číslo běžně iterace
context
Běžný kontext algoritmu, který uchovává všechna data
result
Běžný stav běhu algoritmu
Zdroj: Vlastní zpracování
Tabulka 5.7: Třída MWCS::Solver - Metody
Metoda
Popis
Solver
Konstruktor
nextIteration
Spustit další iteraci algoritmu
Zdroj: Vlastní zpracování
38
Třída MWCS::Context – třída, která poskytuje metody pro kontrolu hodnoty na
nogood snímcích. Uchovává všechna data algoritmu.
Tabulka 5.8: Třída MWCS::Context - Atributy
Atribut
Popis
agents
Seznam všech agentů, které jsou používané v algoritmu
hash
Hash číslo, které je používané pro optimalizaci ověřeni hodnoty
podle nogood listu
leftSideAgentsCount
Číslo ukazuje na množství agentů, které se nacházejí v levé části
řešení a jejich hodnota není definovaná
rightSideAgentsCount
Číslo ukazuje na množství agentů, které se nacházejí v
částečném řešení a jejich hodnota je definovaná
nogood
Seznam, který uchovává všechny nogood snímky, které byly
vytvořeny během práce algoritmu
Zdroj: Vlastní zpracování
Tabulka 5.9: Třída MWCS::Context - Metody
Metoda
Popis
Context
Konstruktor
snapshotWithSize
Vrátí seznam nogood snímků. Množství agentů v každém
snímku se rovná definovanému číslu.
moveAgent
Změna stavu agenta
checkValueWithNogood Ověřit hodnotu agenta podle nogood listu
Zdroj: Vlastní zpracování
Třída MWCS::ContextNogoodSnapshot – uchovává seznam agentů a hash číslo
kontextu ve chvíli vzniku snímku.
Tabulka 5.10: Třída MWCS::ContextNogoodSnapshot - Atributy
Atribut
Popis
hash
Hash číslo kontextu
agents
Seznam agentů a jejich hodnot v částečném řešení v momentu
vytvoření snímku
Zdroj: Vlastní zpracování
39
Tabulka 5.11: Třída MWCS::ContextNogoodSnapshot - Metody
Metoda
Popis
ContextNogoodSnapshot
Konstruktor
Zdroj: Vlastní zpracování
Třída MWCS::AgentNogood – je speciální třída, která uchovává hodnotu a
souvisejícího agenta pro vytvoření nogood snímku.
Tabulka 5.12: Třída MWCS::AgentNogood - Atributy
Atribut
Popis
agent
Související agent
hash
Unikátní číslo agenta
value
Hodnota agenta
Zdroj: Vlastní zpracování
Tabulka 5.13: Třída MWCS::AgentNogood - Metody
Metoda
AgentNogood
Popis
Konstruktor
Zdroj: Vlastní zpracování
Třída MWCS::Agent::Agent – reprezentuje základní jednotku dat pro práci algoritmu.
Uchovává hodnotu agenta a související parametr.
Tabulka 5.14: Třída MWCS::Agent::Agent - Metody
Metoda
Popis
Agent
Konstruktor
hash
Vrátí unikátní číslo pro běžný stav agenta
onPriorityChanged
Spustit událost pro změnu priority agenta
onValueChanged
Spustit událost pro změnu hodnoty agenta
onSideChanged
Spustit událost prozměnu stavu agenta
Zdroj: Vlastní zpracování
40
Tabulka 5.15: Třída MWCS::Agent::Agent - Atributy
Atribut
Popis
id
Automaticky generovaný identifikátor agenta
priority
Priorita agenta v algoritmu
value
Aktuální hodnota agenta
dependencies
Seznam agentů, na nichž je závislý běžný agent
PriorityChanged
Obsluhování události změny priority agenta
ValueChanged
Obsluhování události změny hodnoty agenta
SideChanged
Obsluhování události změny stavu agenta
side
Aktuální stav agenta
parameter
Související parametr agenta
Zdroj: Vlastní zpracování
Třída MWCS::Agent::Parameter – reprezentuje jednotku uživatelských dat a definuje
typ agenta. Uchovává související uživatelská data.
Tabulka 5.16: Třída MWCS::Agent::Parameter - Atributy
Atribut
Popis
details
Uchovává související uživatelská data pro souvisejícího agenta
type
Jednotlivý typ parametru, který umožňuje přístup do specifických
algoritmů. Tento algoritmus potřebuje WC.
Zdroj: Vlastní zpracování
Tabulka 5.17: Třída MWCS::Agent::Parameter - Metody
Metoda
Parameter
Popis
Konstruktor
Zdroj: Vlastní zpracování
Třída MWCS::Agent::Events::AgentEventArgs – Třída, která uchovává souvisejícího
agenta pro zpracovaní události změny priority/hodnoty/stavu agenta.
Tabulka 5.18: Třída MWCS::Agent::Events::AgentEventArgs - Atributy
Atribut
agent
Popis
Související
Zdroj: Vlastní zpracování
41
Tabulka 5.19: Třída MWCS::Agent::Events::AgentEventArgs - Metody
Metoda
Popis
AgentEventArgs
Konstruktor
Zdroj: Vlastní zpracování
Třída MWCS::Agent::ParameterType – reprezentuje jednotlivý typ parametru agenta.
Uchovává specifické algoritmy pro práci s agentem a uživatelská data.
Tabulka 5.20: Třída MWCS::Agent::ParameterType - Atributy
Atribut
Popis
id
Automaticky generovaný identifikátor typu
name
Název typu parametru agentu
alg
Uchovává jednotlivý algoritmus pro hledání další hodnoty agenta
Zdroj: Vlastní zpracování
Tabulka 5.21: Třída MWCS::Agent:: ParameterType - Metody
Metoda
Popis
ParameterType Konstruktor
agentHash
Vrátí unikátní hash číslo, které je závislé na hodnotě agenta, související
uživatelská data a typ parametru
Zdroj: Vlastní zpracování
Rozhraní MWCS::Agent::IMinConflictSearchAlg – popisuje rozhraní pro implementaci
specifického algoritmu, který hledá hodnoty agenta.
Tabulka 5.22: Třída MWCS::Agent::IMinConflictSearchAlg - Metody
Metoda
nextValue
Popis
Vrátí novou hodnotu agenta, která je v konzistenci se všemi omezeními
dat a nogood listů.
Zdroj: Vlastní zpracování
42
Ilustrace 8: Datová vrstva aplikace
Zdroj: Vlastní zpracování
5.3 Návrh aplikace plánovaní
Požadavkem pro vývoj aplikace je naprogramovat plánovací systém, který vytvoří
harmonogram předmětů pro cely semestr na základě školních dat.
Aplikaci lze rozdělit na tří častí: Business25 vrstvu, GUI26 a Datovou vrstvu.
Datová vrstva se zabývá kontrolou všech dat v systému. GUI se zabývá reprezentací
všech dat uživatele.
5.3.1.1 Businnes vrstva
Tato vrstva bude řešit úlohu práce s daty a samotné plánovaní harmonogramu.
Obsahuje metody pro ukládání, načítání a změnu dat. Součást plánování obsahuje
nutné min-conflict search algoritmy a generátory unikátních čísel agentů.
25 Business vrstva se zabývá funkčními požadavky a prací s daty a datovou vrstvou.
26 GUI – Graphic User Interface se zabývá zobrazováním dat.
43
5.3.2 Datová vrstva
Na ilustraci 8 je zobrazena datová vrstva, kterou potřebujeme pro splnění požadavků
na aplikaci. Následuje popis jednotlivých elementů této vrstvy.
Datovou vrstvu lze rozdělit na dvě části: základní informace o škole a informace o
harmonogramu. Informace o harmonogramu přitom budou uchovávat také základní školní
data.
5.3.2.1 Základní informace o škole
Tato část vrstvy musí uchovávat další informace:
•
Všechny předměty školy
•
Všichni studenti školy
•
Všechny místnosti školy
•
Všichni vyučující školy
Událost obsahuje další časové omezení:
•
Seznám časových intervalů, kdy může/nemůže probíhat školní výuka
5.3.2.1.1 Předměty
Každý předmět uchovává další informace:
•
Název předmětu
Předmět je provázán s dalšími objekty:
•
Seznam studentů, kteří studují tento předmět
•
Seznam událostí, které v semestru jsou a lze je rozdělit podle typu: přednáška a
seminář.
5.3.2.1.2 Událost předmětu
Každá událost uchovává další informace:
•
Název události
•
Délka trvání události
44
Událost je spojena s dalšími objekty:
•
Seznam mistrností, kde událost může probíhat
•
Seznam vyučujících, kteří mohou vyučovat tento předmět
•
Seznam událostí, na nichž je běžná událost závislá
5.3.2.1.3 Student
Informace o každém studentovi obsahuje:
•
Jméno studenta
Student je spojen s dalšími objekty:
•
Seznam předmětů, které sleduje tento student
5.3.2.1.4 Vyučující
Každý vyučující uchovává další informace:
•
Jméno vyučujícího
•
Seznam časových intervalů, kdy může/nemůže pracovat vyučující
Vyučující je povázán s dalšími objekty:
•
Seznam předmětů, které vyučuje tento vyučující
5.3.2.1.5 Místnost
Každá místnost uchovává další informace:
•
Budova, kde se nachází běžná učebna
•
Název místnosti
•
Kapacita místnosti
Místnost je spojena s dalšími objekty:
•
Seznam událostí, které mohou probíhat v této místnosti
45
5.3.2.2 Informace o harmonogramu
Do události musíme přidat další informace:
•
Čas počátku události
•
Fixní čas začátku (doplňující informace pro případ, že bude nutné změnit a
naplánovat znovu/doplnit existující harmonogram)
•
Vyučující
•
Místnost
Do mistnosti musíme přidat další informace:
•
Uchovává seznam událostí, které budou probíhat v této místnosti.
Do yučujícího musíme přidat další informace:
•
Uchovává seznam událostí, které bude učit během semestru.
46
5.3.3 GUI
Aplikaci lze rozdělit na dvě časti: přehled a modifikace všech dat a proces plánovaní
harmonogramu a jeho výprava
První část musí poskytovat další možností:
•
CRUD27 předmětů, seznám předmětů
•
CRUD událostí
•
CRUD studentů, seznám studentů
•
CRUD vyučujících, seznám vyučujících
•
CRUD místností a budov, seznam místností a budov
•
CRUD časové omezení výuky školy
•
Ukládaní a načítaní informací
Druhá část aplikace musí poskytovat další možnosti:
•
Ukládaní a načítaní harmonogramu
•
Spuštění a kontrola průběhu plánování
•
Modifikace částečně naplánovaného harmonogramu
27 CRUD – (angl. Create Read Update Delete) – skupina funkčností, které poskytují základní metody pracé s
daty: vytvořit nový objekt, prohlédnout data, změnit a smazat.
47
6. Implementace navržené aplikace
Pro implementaci byla vybrána platforma .NET Framework od společnosti Microsoft ve
verzi 4 a jako vývojový nástroj – MS Visual Studio 2012.
6.1 Implementace knihovny
Na ilustraci 9 je zobrazen class diagram cele knihovny. Na ilustracích 10 a 11 jsou
zobrazeny jednotlivé častí knihovny: Solver a Agent prostředí. Dál popisujeme
implementaci jednotlivých tříd. Součástí implementace knihovny je dokumentace, která
popisuje všechny nutné elementy a příklady použití. Během vývoje knihovny byla navíc
vyvíjena aplikace „N-Queens“ pro účely testovaní a jako praktický příklad použití knihovny.
Tato aplikace řeší klasickou úlohu osmi dam (je možné i více). Problém osmi dam je
šachová úloha, respektive kombinatorický problém, jak umístit na šachovnici osm dam
tak, aby se podle pravidel šachu navzájem neohrožovaly, tedy vybrat osm polí tak, aby
žádná dvě nebyla ve stejné řadě, sloupci ani diagonální linii. V příkladech dokumentace
budou použity zdrojové kódy z teto aplikace. Všechní další uvedené obrázky jsou součástí
přílohy A na CD.
48
Ilustrace 9: MWCS class diagram
Zdroj: Vlastní zpracování
6.1.1 Implementace prostředí Solver
Prostředí Solver se zabývá kontrolou běhu algoritmu a přístupu ke všem datům
algoritmu. Na ilustraci 11 je zobrazena detailní struktura tohoto prostředí. V dalších
kapitolách popisuji realizaci tříd, jejich atributů a metod a rovněž podmínky a příklady
použíti jednotlivých metod.
49
Ilustrace 10: MWCS class diagram - Solver
Zdroj: Vlastní zpracování
6.1.1.1 Třída Solver
Hierarchie dědičnosti: System.Object → MWCS.Solver
Assembly: MWCS (MWCS.dll)
Namespace: MWCS
50
Thread safety: Ne
Syntax: public class Solver
6.1.1.1.1 Konstruktory
Tabulka 6.1: Implementace třídy MWCS::Solver - Konstruktory
Modifikátory
public
Syntax
Solver()
Popis
Vytvořit novou instanci algoritmu
Zdroj: Vlastní zpracování
6.1.1.1.2 Atributy
Tabulka 6.2: Implementace třídy MWCS::Solver - Atributy
Modifikátory
public
Syntax
Popis
SolverResult
result
Běžný stav výpočtu. Počáteční
hodnota
SolverResult.Unknown
Zdroj: Vlastní zpracování
6.1.1.1.3 Vlastnosti
Tabulka 6.3: Implementace třídy MWCS::Solver - Vlastnosti
Modifikátory
Syntax
Popis
public get
internal set
Context
context
Související kontext
public get
internal set
uint
iteration
Číslo běžné iterace
public get
internal set
uint
maxAgentPriority
Max. priorita agenta v kontextu
Zdroj: Vlastní zpracování
6.1.1.1.4 Metody
Tabulka 6.4: Implementace třídy MWCS::Solver - Metody
Modifikátory
public
Syntax
void
nextIteration()
Zdroj: Vlastní zpracování
51
Popis
Spustit další iteraci
6.1.1.1.5 Poznámky
Tato třída zajišťuje kontrolu běhu algoritmu a přístup k samotným datům algoritmu.
Příklady jsou převzaty z testovací aplikace Nqueens.
Uživatelská aplikace musí manuálně spouštět každou iteraci do té doby, než se stav
změní na Solved či NotExisted. Počáteční stav atributu result je Unknown.
6.1.1.1.6 Implementace metody void nextIteration()
public void nextIteration()
{
if (result == SolverResult.Solved || result == SolverResult.NotExisted) return;//Check
current state
iteration++;
if (result == SolverResult.Unknown)//Initialization
{
//move all agent to left part of solution
foreach (Agent.Agent agent in context.agents)
{
context.moveAgent(agent, ContextSide.Left);
}
result = SolverResult.Running;//Change state
}
if (context.leftSideAgentsCount == 0)//All agents have defined values, problem
is solved
{
result = SolverResult.Solved;
return;
}
Agent.Agent currentAgent = null;
foreach (var agent in context.agents)//Search agent in left part of solution
with max. priority
{
if (agent.side == ContextSide.Left && (currentAgent==null ||
agent.priority>currentAgent.priority))
{
bool dependencies = true;
foreach (var a in agent.dependencies)
{
if (a.side != ContextSide.Partial)
{
dependencies = false;
break;
}
}
if(dependencies)
currentAgent = agent;
}
}
object value = null;//New value for agent
if (currentAgent != null)//Agent was not founded. It means, that context contains
cyclic dependencies
{
//Method nextValue must find value.
//It will be good with current partial solution and good with nogood list.
//Optional: minimize conflicts with all left agents.
//Need to prepeare spec. nogood list for checking optimization,
//where agents list size will be "current partial solution size + 1"
value = currentAgent.parameter.type.alg.nextValue(currentAgent, context,
context.snapshotsWithSize(context.partialSideAgentsCount + 1));
}
//Min. conflict search alrogithm found good value. Need to move currentAgent to
partial solution.
52
if (value != null)
{
currentAgent.value = value;
context.moveAgent(currentAgent, ContextSide.Partial);
context.hash -= currentAgent.hash();//spec. simple hash for nogood list
checking optimization
context.hash += currentAgent.hash();
}
else//Good value was not founded
{
if (context.partialSideAgentsCount == 0 || currentAgent==null)//Problem has
not solution
{
result = SolverResult.NotExisted;
}
else//Add current partial solution as new nogood state
{
currentAgent.priority = maxAgentPriority + 1;//change priority of
agent, which triggered this situation
maxAgentPriority = currentAgent.priority;
context.nogood.Add(new ContextNogoodSnapshot(context));
foreach (var agent in context.agents)//move all agents to left and
begin new solving iteration
{
context.moveAgent(agent, ContextSide.Left);
}
}
}
}
6.1.1.1.7 Příklad použití
Samotný kód a komentáře jsou v angličtině. Tento příklad ilustruje způsob spuštění
algoritmu v jiném vláknu a jeho kontrolu.
public void start()
{
running = true;
solvingThread = new Thread(delegate() {
this.solve(interval);
});//New thread for solving
solvingThread.Start();
}
public void solve(uint interval)
{
//Checking for running status, solving result
while (running
&& solver.result != MWCS.SolverResult.Solved
&& solver.result != MWCS.SolverResult.NotExisted)
{
solver.nextIteration();//Next algorithm iteration
}
}
public void stop()
{
running = false;//Stop algorithm. It is used as cross-thread synchronization
if (solvingThread != null)
{
if (solvingThread.ThreadState==ThreadState.Running)
{
solvingThread.Join();//Wait for canceling
}
solvingThread = null;
}
}
53
6.1.1.2 Třída Context
Hierarchie dědičnosti: System.Object → MWCS.Context
Assembly: MWCS (MWCS.dll)
Namespace: MWCS
Thread safety: Ne
Syntax: public class Context
6.1.1.2.1 Konstruktory
Tabulka 6.5: Implementace třídy MWCS::Context - Konstruktory
Modifikátory
Syntax
internal
Context()
Popis
Vytvořit novou instanci kontextu
Zdroj: Vlastní zpracování
6.1.1.2.2 Atributy
Tabulka 6.6: Implementace třídy MWCS::Context - Atributy
Modifikátory
Syntax
Popis
public
readonly
List<Agent>
agents
Všechny agenty v aktuální instanci
algoritmu
public
readonly
List<ContextNogoodSnapshot>
nogood
Seznam všech nogood snímků
Zdroj: Vlastní zpracování
6.1.1.2.3 Vlastnosti
Tabulka 6.7: Implementace třídy MWCS::Context - Vlastnosti
Modifikátory
Syntax
Popis
public get
private set
uint
leftSideAgentsCount
Počet agentů v levé časti řešení
public get
private set
uint
partialSideAgentsCount
Počet agentů v částečném řešení
public get
internal set
uint
hash
Běžné hash číslo částečného
řešení
Zdroj: Vlastní zpracování
54
6.1.1.2.4 Metody
Tabulka 6.8: Implementace třídy MWCS::Context - Metody
Modifikátory
Syntax
Popis
public
List<ContextNogoodSnapshot>
snapshotsWithSize
(uint size)
Vybrat nogood snímky, na
kterých se počet agentů
rovná size
public
bool
checkValueWithNogood
(Agent agent,
object curValue,
List<ContextNogoodSnapshot>
nogood)
Ověřit novou hodnotu
agenta podle nogood
snímků
internal
void
moveAgent
(Agent agent,
ContextSide toSide)
Změnit stav agenta
Zdroj: Vlastní zpracování
6.1.1.2.5 Poznámky
Kontext je hlavní úložiště instance algoritmu. Uchovává všechny agenty a nogood
snímky. Nelze vytvořit ručně. Automaticky se vytvoří v konstruktoru třídy Solver.
6.1.1.2.6 Implementace metody bool checkValueWithNogood (Agent agent, object
curValue, List<ContextNogoodSnapshot> nogood)
//Nogood list checking
public bool checkValueWithNogood(Agent.Agent agent, object curValue,
List<ContextNogoodSnapshot> nogood)
{
bool satisfyNogood = true;//method result
//Current context's agents list is sorted by hash(on Solver.nextIteration method)
//All nogood's agents lists are sorted by hash too
foreach (var nogoodContext in nogood)
{
if (!satisfyNogood) break;
if (this.partialSideAgentsCount + 1 != nogoodContext.agents.Count) continue;//Check
agents lists size
if (nogoodContext.hash == this.hash + agent.hash(curValue))//Firstly, need to compare
by hashes
{//Hashes are same, but need to check raw agents list
var contextAgentIterator = this.agents.GetEnumerator();
bool curValueUsed = false;//New value can be used only one time
foreach (var nogoodContextAgent in nogoodContext.agents)
{
//Searching next partial agent in current context
while (contextAgentIterator.Current!=null && contextAgentIterator.Current.side !=
MWCS.ContextSide.Partial && contextAgentIterator.MoveNext()) ;
//check next agent
55
if (contextAgentIterator.Current!=null &&
contextAgentIterator.Current.side == MWCS.ContextSide.Partial)
{
bool nextAgent = true;//If new value will be used, we will not move to next agent
//Compare agents by hash. Hash are unique for unique agent's parameter
type+value+details setup
if (nogoodContextAgent.hash != contextAgentIterator.Current.hash())
{
satisfyNogood = false;//conflict
break;
}
else if (nogoodContextAgent.hash == agent.hash(curValue))//check for new value
{
if (curValueUsed)//New value can be used only one time
{
satisfyNogood = false;//conflict
break;
}
else
{
//Use new value
curValueUsed = true;
nextAgent = false;//Need to use current agent in next checking iteration
}
}
else
{
satisfyNogood = false;//conflict
break;
}
if(nextAgent)//move to next agent
contextAgentIterator.MoveNext();
}
else if (contextAgentIterator.Current == null)//New agent was not founded. This
situation should not be reached, but...
{
satisfyNogood = false;//conflict
break;
}
}
//break; if satisfyNogood is true, need to check other nogood snapshots (this
situation is very very very rare)
}
}
return satisfyNogood;
}
6.1.1.2.7 Příklad použití
Samotný kód a komentáře jsou v angličtině. Příklady jsou převzaty z testovací aplikace
N-Queens, která součástí přílohy A na CD..
6.1.1.2.7.1 Generace agentů
public NQueens()
{
solver = new MWCS.Solver();
//Custom parameter type for agents
MWCS.Agent.ParameterType type = new YPositionParameterType(new
YMinConflictSearchAlg(this));
for (uint i = 0; i < N; i++)//Creating of queens
{
Queen queen = null;
queen = new Queen(i, 0);
queens.Add(queen);
MWCS.Agent.Parameter parameter = new MWCS.Agent.Parameter(type);//Parameter for
individual agent instance
56
parameter.details = new object[1] {queen};//Set details object
MWCS.Agent.Agent agent = new MWCS.Agent.Agent(parameter, (uint)queen.Y);//New Agent
instance with spec. parameter, details, min. conflict search algorithm, hash function..
agent.ValueChanged += this.updateQueenY;//For state & UI updating
agent.SideChanged += this.updateQueenSide;//For state & UI updating
solver.context.agents.Add(agent);
}
}
6.1.1.2.7.2 Ověření nové hodnoty agenta podle nogood listu
public class YMinConflictSearchAlg : MWCS.Agent.IMinConflictSearchAlg
{
public object nextValue(MWCS.Agent.Agent agent,
MWCS.Context context,
List<MWCS.ContextNogoodSnapshot> nogood)
{
//Get current queen object from agent details
Queen queen = (Queen)agent.parameter.details[0];
uint curValue = (uint)agent.value;//Get current value
uint bestValue = queen.Y;
for (uint i = 0; i < enviroment.N; i++)//Possibles values are 0..(N-1)
{
uint conflicts = 0;//Number of conflicts with left agents
//Is value in consistency with partial solution?
bool satisfyPartialSolution = true;
//Is value in consistency with nogood?
bool satisfyNogood = context.checkValueWithNogood(agent, curValue,
nogood);
if(satisfyNogood)
//Need to calculate number of conflicts with every agents
//Need to check consistency with partial solution
foreach (var a in context.agents)
{
//...
}
if (satisfyPartialSolution && satisfyNogood)
{
//...
}
curValue = //...;
}
return bestValue;
}
}
6.1.1.3 Třída ContextNogoodSnapshot
Hierarchie dědičnosti: System.Object → MWCS.ContextNogoodSnapshot
Assembly: MWCS (MWCS.dll)
Namespace: MWCS
Thread safety: Ne
Syntax: public class ContextNogoodSnapshot
57
6.1.1.3.1 Konstruktory
Tabulka 6.9: Implementace třídy MWCS::ContextNogoodSnapshot - Konstruktory
Modifikátory
internal
Syntax
Popis
ContextNogoodSnapshot(Context context) Vytvořit novou instanci snímku
kontextu
Zdroj: Vlastní zpracování
6.1.1.3.2 Atributy
Tabulka 6.10: Implementace třídy MWCS:: ContextNogoodSnapshot - Atributy
Modifikátory
Syntax
Popis
public
uint
hash
Všechny agenty v aktuální instanci
algoritmu
public
readonly
List<AgentNogood>
agents
Seznam agentů částečného řešení v
moment vytvoření snímku
Zdroj: Vlastní zpracování
6.1.1.3.3 Poznámky
Hlavní funkčnost této třídy je zapamatování seznamu agentů pro budoucí ověření
hodnoty podle nogood listů.
6.1.1.4 Třída AgentNogood
Hierarchie dědičnosti: System.Object → MWCS.Agent.AgentNogood
Assembly: MWCS (MWCS.dll)
Namespace: MWCS::Agent
Thread safety: Ne
Syntax: public class AgentNogood
6.1.1.4.1 Konstruktory
Tabulka 6.11: Implementace třídy MWCS::Agent::AgentNogood - Konstruktory
Modifikátory
internal
Syntax
Popis
AgentNogood(Agent agent)
Zdroj: Vlastní zpracování
58
Vytvořit novou instanci snímku
agenta
6.1.1.4.2 Vlastnosti
Tabulka 6.12: Implementace třídy MWCS:: Agent::AgentNogood - Vlastnosti
Modifikátory
Syntax
Popis
public get
internal set
Agent
agent
Související agent
public get
internal set
object
value
Hodnota agenta v moment
vytvoření snímku
public get
internal set
uint
hash
Unikátní číslo agenta v moment
vytvoření snímku
Zdroj: Vlastní zpracování
6.1.1.4.3 Poznámky
Hlavní funkčnost teto třídy je zapamatování hodnoty agenta pro budoucí ověření
podle nogood listů.
6.1.1.5 Enum SolverResult
Assembly: MWCS (MWCS.dll)
Namespace: MWCS
Syntax: public enum SolverResult
6.1.1.5.1 Hodnoty
Tabulka 6.13: Implementace MWCS::SolverResult - Hodnoty
Syntax
Popis
Unknown
Počáteční hodnota
Running
Algoritmus ještě nedoběhl
Solved
Konečný stav – řešení existuje
NotExisted
Konečný stav – řešení ne existuje
Zdroj: Vlastní zpracování
59
6.1.2 Implementace prostředí Agent
Ilustrace 11: MWCS class diagram - Agent
Zdroj: Vlastní zpracování
Prostředí Agent se zabývá objektovým modelem algoritmu a transformací
uživatelských dat na použitelnou formu. Na ilustraci 11 je zobrazena detailní struktura
tohoto prostředí. V dalších kapitolách popisuji realizaci tříd, jejich atributů a metod a
rovněž podmínky a příklady použítí jednotlivých metod.
6.1.2.1 Enum ContextSide
Assembly: MWCS (MWCS.dll)
Namespace: MWCS
Syntax: public enum ContextSide
60
6.1.2.1.1 Hodnoty
Tabulka 6.14: Implementace MWCS::ContextSide - Hodnoty
Syntax
Popis
Left
Levá část řešení
Partial
Částečné řešení
None
Počáteční hodnota
Zdroj: Vlastní zpracování
6.1.2.2 Třída Agent
Hierarchie dědičnosti: System.Object → MWCS.Agent.Agent
Assembly: MWCS (MWCS.dll)
Namespace: MWCS::Agent
Thread safety: Ne
Syntax: public class Agent
6.1.2.2.1 Konstruktory
Tabulka 6.15: Implementace třídy MWCS::Agent::Agent - Konstruktory
Modifikátory
public
Syntax
Agent
(Parameter par,
object initialValue)
Popis
Vytvořit novou instanci agenta
Zdroj: Vlastní zpracování
6.1.2.2.2 Atributy
Tabulka 6.16: Implementace třídy MWCS:: Agent::Agent - Atributy
Modifikátory
Syntax
Popis
private
static
uint
lastid
Hodnota, která se používá pro
automatické generování
identifikátoru agenta
private
ContextSide
_side
Stav agenta
private
uint
_priority
Priorita agenta
public
EventHandler
<Events.AgentEventArgs>
PriorityChanged
Událost změny priority agenta
61
Modifikátory
Syntax
Popis
public
EventHandler
<Events.AgentEventArgs>
ValueChanged
Událost změny hodnoty agenta
public
EventHandler
<Events.AgentEventArgs>
SizeChanged
Událost změny stavu agenta
public
Parameter
parameter
Parametr agenta
private
object
_value
Hodnota agenta
private
uint
_hash
Unikátní číslo agenta
Zdroj: Vlastní zpracování
6.1.2.2.3 Vlastnosti
Tabulka 6.17: Implementace třídy MWCS:: Agent::Agent - Vlastnosti
Modifikátory
Syntax
Popis
public get
internal set
List<Agent>
dependencies
Seznam agentů, na nichž je závislý
běžný agent
public get
internal set
ContextSide
side
Stav agenta
public get
internal set
uint
id
Identifikátor agenta
public get
internal set
uint
priority
Priorita agenta
public get
internal set
object
value
Hodnota agenta
Zdroj: Vlastní zpracování
6.1.2.2.4 Metody
Tabulka 6.18: Implementace třídy MWCS:: Agent::Agent - Metody
Modifikátory
Syntax
Popis
internal
void
onPriorityChanged()
Spustit událost změny priority
agenta
internal
void
onValueChanged()
Spustit událost změny hodnoty
agenta
62
Modifikátory
Syntax
Popis
internal
void
onSideChanged()
Spustit událost změny stavu
agenta
public
uint
hash()
Unikátní číslo agenta
public
uint
hash(object value)
Unikátní číslo agenta s novou
hodnotou
Zdroj: Vlastní zpracování
6.1.2.2.5 Poznámky
Tato třída zajišťuje transformaci uživatelských dat na formu, se kterou algoritmus může
pracovat.
Generace identifikátoru: this.id = ++Agent.lastid;
Metoda hash() používá metodu uint
ParameterType::agentHash(Agent agent) pro generování unikátního
čísla.
Metoda hash(object value) používá metodu uint
ParameterType::agentHash(Agent agent, object value) pro
generování unikátního čísla.
V případě, že se hodnota, priorita nebo stav agenta změní pomocí vlastností, bude
automaticky spuštěna událost.
6.1.2.2.6 Příklad použítí
Viz. Příklad 6.1.1.2.7.1.
63
6.1.2.3 Třída Parameter
Hierarchie dědičnosti: System.Object → MWCS.Agent.Parameter
Assembly: MWCS (MWCS.dll)
Namespace: MWCS::Agent
Thread safety: Ne
Syntax: public class Parameter
6.1.2.3.1 Konstruktory
Tabulka 6.19: Implementace třídy MWCS::Agent::Parameter - Konstruktory
Modifikátory
Syntax
public
Parameter
(ParameterType type)
Popis
Vytvořit novou instanci parametru
Zdroj: Vlastní zpracování
6.1.2.3.2 Atributy
Tabulka 6.20: Implementace třídy MWCS:: Agent:: Parameter - Atributy
Modifikátory
Syntax
Popis
public
object[]
details
Související uživatelské objekty
public
ParameterType
type
Související typ parametru
Zdroj: Vlastní zpracování
6.1.2.3.3 Poznámky
Třída uchovává uživatelské objekty související s aktualním agentem.
6.1.2.3.4 Příklad použítí
Viz. příklad 6.1.1.2.7.1.
64
6.1.2.4 Třída ParameterType
Hierarchie dědičnosti: System.Object → MWCS.Agent.ParameterTyp
Assembly: MWCS (MWCS.dll)
Namespace: MWCS::Agent
Thread safety: Ne
Syntax: public abstract class Agent
6.1.2.4.1 Konstruktory
Tabulka 6.21: Implementace třídy MWCS::Agent::ParameterType - Konstruktory
Modifikátory
Syntax
Popis
ParameterType
(string name,
IMinConflictSearchAlg alg)
public
Vytvořit novou instanci typu
parametru
Zdroj: Vlastní zpracování
6.1.2.4.2 Atributy
Tabulka 6.22: Implementace třídy MWCS:: Agent:: ParameterType - Atributy
Modifikátory
Syntax
Popis
private
static
uint
lastid
Hodnota, která se používá pro
automatické generovaní
identifikátoru
public
string
name
Jméno typu
public
IMinConflictSearchAlg
alg
Algoritmus pro hledání hodnoty
agenta podle běžného typu
parametru
Zdroj: Vlastní zpracování
6.1.2.4.3 Vlastnosti
Tabulka 6.23: Implementace třídy MWCS:: Agent:: ParameterType - Vlastnosti
Modifikátory
public get
internal set
Syntax
uint
id
Popis
Identifikátor agenta
Zdroj: Vlastní zpracování
65
6.1.2.4.4 Metody
Tabulka 6.24: Implementace třídy MWCS:: Agent:: ParameterType - Metody
Modifikátory
Syntax
Popis
public
uint agentHash
(Agent agent)
Metoda vrací unikátní číslo pro
agenta podle svého parametru
public
uint agentHash
(Agent agent,
object value)
Metoda vrací unikátní číslo pro
agenta podle svého parametru a
nové hodnoty
Zdroj: Vlastní zpracování
6.1.2.4.5 Poznámky
Tato třída zajišťuje konektivitu mezi agentem a uživatelským algoritmem pro hledaní
hodnoty a generování unikátního čísla.
Generace identifikátoru: this.id = ++Agent.lastid;
Metoda agentHash() používá metodu uint
ParameterType::agentHash(Agent agent, object value) pro
generování unikátního čísla.
Metoda agentHash(Agent agent, object value)musí byt
implementována v uživatelské aplikaci a musí vrátit hodnotu, která je závislá na hodnotě
parametru agenta a souvisejících uživatelských objektech.
6.1.2.4.6 Příklad použití
Viz. příklad 6.1.1.2.7.1.
6.1.2.5 Rozhraní IMinConflictSearchAlg
Assembly: MWCS (MWCS.dll)
Namespace: MWCS::Agent
Syntax: public interface IMinConflictSearchAlg
66
6.1.2.5.1 Metody
Tabulka 6.25: Rozrhaní MWCS:: Agent:: IMinConflictSearchAlg - Metody
Syntax
Popis
object
nextValue
(Agent agent,
Context context,
List<ContextNogoodSnapshot> nogood)
Metoda vrací novou hodnotu
agenta, která je v konzistenci s
nogood listem a všemi
uživatelskými omezeními
Zdroj: Vlastní zpracování
6.1.2.5.2 Poznámky
Uživatelská aplikace musí implementovat toto rozhraní pro zajištění funkčnosti celého
algoritmu. Přímo ovlivňuje rychlost a efektivitu algoritmu.
Důležité: během hledaní hodnoty by měl algoritmus měnit hodnoty objektů
souvisejících s agentem. Hodnoty lze měnit pouze v delegátu, který zpracovává události
agentů.
6.1.2.5.3 Příklad použití
Viz. Příklad 6.1.1.2.7.2.
67
6.2 Implementace aplikace plánování
Spustitelná verze aplikace a samotné zdrojové kódy jsou součástí přílohy A na CD.
6.2.1 Datová a business vrstva
V aplikaci bude business vrstva implementovaná jako součást datového modelu a UI
časti.
Datový model (viz. Ilustrace 8) poskytuje všechny metody pro práci s daty a také
ukládaní a načítaní ze souboru.
Data se budou ukládat do souboru v binárním formátu pomocí
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
třídy, kterou poskytuje .NET prostředí.
UI část aplikace reprezentuje GUI a vyvolává metody pro práci s daty (CRUD).
Aplikaci lze rozdělit na dvě části: CRUD data a plánovaní harmonogramu.
GUI aplikace bude vyvíjena pomocí technologie WinForms28.
28 WinForms – název API pro grafické elementy aplikace, které existují jako součást Microsoft .NET
knihovny a poskytují přístup k rozhraní operačního systému Microsoft Windows.
68
6.2.2 GUI – Práce s daty
Všechní další uvedené obrázky jsou součástí přílohy A na CD.
Menu:
•
Soubor
•
Nový – smaže běžná data
•
Načíst data – načítání dat ze souboru
•
Uložit data – uložit data do souboru
•
Zavřít – zavřít aplikaci
•
Plánování – otevřít formulář pro panování harmonogramu
•
Výuka - otevřít formulář pro omezení časových podmínek výuky
69
6.2.2.1 Úvodní obrazovka
Úvodní obrazovka ukazuje seznam existujících předmětů, učeben a vyučujících.
Ilustrace 12: Úvodní obrazovka
Zdroj: Vlastní zpracování
TreeView v levé části aplikace obsahuje seznamy všech předmětů, studentů,
vyučujících a učeben. Po kliknutí na název„Unicorn College“ se otevře úvodní obrazovka.
Po kliknutí na název „Předměty/Studenti/Vyučující/Učebny“ se otevře náhled všech
odpovídajících elementů.
Nahoře v pravé častí aplikace je umístěn navigační bar a dvě tlačítka „Předchozí
strana“ a „Následující strana“.
Zelené tlačítko plus otevře formulář pro přidání nového elementu.
Tlačítko „Oko“ otevře náhled vybraných elementů.
Tlačítko „Koš“ smaže vybrané elementy.
70
6.2.2.2 Časová omezení
Ilustrace 13: Časová omezení
Zdroj: Vlastní zpracování
Tato obrazovka obsahuje metody pro úpravu časových intervalů.
Dole je zobrazen seznam všech existujících intervalů. Každý interval obsahuje další
informace: priorita, začátek, konec a typ (akce) intervalu. Interval s vyšší prioritou má vyšší
sílu. Akce může být pouze dvou druhů: „Povolit“ a „Zakázat“
71
6.2.2.3 Náhled předmětů
Ilustrace 14: Náhled předmětů
Zdroj: Vlastní zpracování
V pravém listu je seznam vybraných předmětu pro tento náhled, v tomto seznamu
můžeme také vybrat nějaké předměty a otevřít náhled v jiné obrazovce.
Levý list obsahuje seznam „skupiny událostí“ - přednášky, semináře. Lze přidat nové
skupiny jako „zkouška“ apod.
Uprostřed je seznam studentů, kteří si zapsali tento předmět.
Tlačítko
nastaví všechny vybrané elementy (studenty) pro všechny předměty,
pro něž je vytvořena běžná obrazovka.
Pomocí této obrazovky lze rozdělit předmět na jednotlivé skupiny. Každá skupina bude
vytvořena jako nový předmět.
72
6.2.2.4 Náhled skupiny událostí
Ilustrace 15: Náhled skupiny událostí
Zdroj: Vlastní zpracování
V listu, který se nachází dole, je seznam běžně vybraných skupin.
V pravé časti je seznam vyučujících, kteří mohou učit tento předmět. V levé části
obrazovky je seznam událostí, které jsou součástí této skupiny a předmětů.
73
6.2.2.5 Náhled událostí
Ilustrace 16: Náhled událostí
Zdroj: Vlastní zpracování
V listu, který se nachází dole, je seznam běžně vybraných událostí.
Nahoře je seznam událostí, na kterých jsou závislé běžně vybrané události.
Vpravo se nachází seznam učeben, kde mohou probíhat běžně vybrané události.
74
6.2.2.6 Náhled studentů
Ilustrace 17: Náhled studentů
Zdroj: Vlastní zpracování
Obrazovka obsahuje jen dva seznamy: seznam zapsaných předmětů a seznam běžně
vybraných studentů. Lze změnit jméno studenta a přidat nebo smazat zapsané předměty.
75
6.2.2.7 Náhled místností
Ilustrace 18: Náhled místností
Zdroj: Vlastní zpracování
V pravém listu se nachází seznam vybraných učeben.
Levý list obsahuje seznam všech událostí, které mohou probíhat ve vybraných
učebnách.
Nastavení které místností jsou počítačové a které předměty potřebují počítači je
implementováno tím, že uživatel mel by ručně nastaví odpovídající učebnu pro
předmět(až pro každou událost, která je součástí předmětů, zvlášť)
76
6.2.2.8 Náhled vyučujících
Ilustrace 19: Náhled vyučujících
Zdroj: Vlastní zpracování
V pravém listu se nachází seznam vybraných vyučujících.
Levý list obsahuje seznam všech skupin událostí, které mohou učit vybraní vyučující.
77
6.2.3 GUI – Plánování harmonogramu
Menu:
•
Spustit
◦ Všechny události - lze spustit plánování pro všechny události
◦ Pouze změněné události – lze spustit plánování jen pro události, které nejsou
zafixované (když událost je zafixovaná, v pravoúhelníku, který reprezentuje tuto
událost, je slovo „definováno“:
).
•
Zastavit – zastavit běžný propočet
•
Aktualizovat – aktualizovat náhled (během výpočtu). Náhled se automaticky
aktualizuje každých 20 sekund.
•
Zavřít – zastavit výpočet a zavřít plánovací obrazovku. Otevřít obrazovku pro
úpravu dat.
78
6.2.3.1 Plánování
Ilustrace 20: Plánování
Zdroj: Vlastní zpracování
Jednotlivé pravoúhelníky reprezentují události. Barva pravoúhelníků reprezentuje
předmět. Pokud přesunete kurzor myši na pravoúhelník, zobrazí se parametry události:
předmět, skupina událostí, místnost, vyučující a časový interval.
Dole je zobrazena informace pro běžné propočítání: číslo iterace, trvání vypočtu,
množství nogood snímků, počet agentů.
Pokud kliknete pravým tlačítkem myši na událost, můžete změnit stav události na
„nezafixovaný“.
Pokud kliknete levým tlačítkem myši na událost, můžete otevřít nastavení časového
intervalu pro vyučujícího, který je naplánovaný pro tuto událost.
79
6.2.4 Min-conflict search algoritmy a výsledky plánování
V rámci aplikace byly naprogramovány tři min-conflict search algoritmy pro každý typ
parametru. Největší algoritmus byl vytvořen pro parametry „událost-čas“ a musel
uvažovat všechny parametry událostí. Další algoritmy pro parametry „událost-místnost“ a
„událost-vyučující“ uvažovaly jen čas a hodnotu odpovídající parametru.
Pro zpracovávaní dat udělal jsem sledující optimalizace:
•
Vytvořil jsem novou třídu pro uchováváni času a práce s časem – čas je nějaké cele
číslo. Jednotka času se rovna 45 minutám reálného času
•
Plánování se provádí v jednotlivých týdnech, v sledujících týdnech min-conflict
search algoritmus se snaží použít hodnotu z předchozího týdnu, když to není
možná, snaží se definovat novou hodnotu
•
Před otevřením formy pro plánovaní, po načítaní a před ukládáním dat se provádí
validace dat. Během validace, datový model ověřuje všechny data na souvislost,
např., že když u vyučujícího je naplánovaná nějaká událost, teto událost musí mít
taky naplánovaného stejného vyučujícího. Potřeboval jsem teto operace, abych ne
došlo k chybám během vývoje a testovaní aplikace.
•
Pro zpracování jednotlivého týdnu, plánovací aplikace používa jen takové událostí,
která musejí byt naplánování v tomto týdnu a seznam dostupných učeben a
vyučujících nemusí byt prázdny.
Pro testování aplikace jsem získal data o studentech a předmětech od Unicorn College.
Na začátku byla data filtrována následujícím způsobem: vymazány všechny předměty, u
nichž byl počet studentů nižší pěti. Dál byli vymazáni studenti, kteří si zapsali více než 12
předmětů, což bylo nutné pro víceméně rychlé propočítání harmonogramu. Pro každý
předmět pak byli náhodně přirazeni vyučující s učebnami. Součástí omezujících podmínek
výuky bylo vytvoření časových intervalů pro každý pracovní den v semestru.
80
Data:
•
60 časových intervalů
•
6 učeben
•
51 předmětů
•
56 skupin událostí
•
656 událostí
•
68 vyučujících
•
297 studentů
•
1426800 spojení mezi studenty a událostmi
•
1312 spojení mezi událostmi a vyučujícími
•
1320 spojení mezi událostmi a učebnami
Propočítání testovacích dat (je součástí přílohy) na počítači Intel Core i5, 2.30GHz
probíhá 17 sekund, což je velmi dobrý výsledek.
Řešení lze rozšířit o další omezující podmínky jako: „max. počet událostí během
jednoho dne je X pro vyučujícího/studenta“, „každý student nemusí mít volný čas mezi
naplavovanými událostmi (podmínka spíše pro základní školu)“, „student může mít max. X
konfliktů v harmonogramu“ atd.
Existuje jedná nepříjemná záležitost – když řešení pro běžná data neexistuje,
algoritmus to ukaže, ale před tím musí ověřit všechny kombinace dat, což trvá velmi
dlouho (pro data, která mají velikost přibližně jako ty testovací, to může trvat až dny).
81
7. Závěr
Předmětem této bakalářské bylo provést analýzu problematiky automatického
plánování, navrhnout a implementovat knihovnu a plánovací aplikaci.
V rámci této práce vznikla MWCS knihovna, která řeší problematiku automatického
plánování a obsahuje detailní dokumentaci. Knihovna je implementovaná na základě
Weak-commitment search algoritmu s prioritními agenty. Práce obsahuje popis
požadavků, návrh a implementaci aplikace, která řeší úkol automatického plánování
harmonogramu předmětů univerzity. Součástí implementace je daná dokumentace
knihovny a příklady použíti. Taky, součástí přílohy A naleznete aplikace N-Queens, která je
dobrým příkladem použíti knihovny a je dobré komentována.
Aplikace vhodně podporuje proces vytváření bezkonfliktního harmonogramu s
omezením dat. Vytvořená aplikace může usnadnit prací studijního oddělení, které se
zabývá problémem plánování rozvrhu předmětu. Aplikace v budoucnu lze rozšířit pro
podporu nových typu podmínek, jako např.: „student, který si zapsal vice než 12
předmětů, muže obsahovat max. 2 konflikty v harmonogramu“.
Tato bakalářská práce je z teoretického hlediska přínosná především kvůli analýze
složité problematiky a pokusu o její řešení.
V rámci bakalářské práce došlo k naplnění všech stanovených cílů a požadavků, které
na ni byly kladené, a proto tuto práci považuji za úspěšnou.
82
8. Conclusion
The subject of this bachelor thesis was to analyze the automated planning problem,
design and implement a library and planning solution.
As a result of this work MWCS library that solves automated planning problem was
created, detailed documentation about library included. The library is implemented based
on the Weak-commitment search algorithm with priority agents. This work describes the
requirements, design and implementation of automated scheduling problem for
university. The implementation of a given library contains complete documentation and
program examples. Also, you can found application “N-Queens” in an attachments of this
work, which represents example of use MWCS library and it is good commented
Application appropriately supports the process of creating a conflict-free schedule
with a lot of data constraints. Created application can reduce study department the work
that deals with scheduling problem. Applications can be expanded in the future to
support new types of constraints such as "student who learns more than 12 subjects may
contains a maximum of two conflicts in the his schedule.
Theoretical aspect of this thesis is mainly beneficial, because it analyses the
automated planning problem and attempts to solve it.
I consider my bachelor thesis successful as it accomplished all assigned goals.
83
9. Seznam použitých zdrojů
Burke, Edmund Kieran & Petrovic, Sanja, 2002. "Recent research directions in
automated timetabling," European Journal of Operational Research,
Elsevier, vol. 140(2), pages 266-280, July.
De Werra, D., 1985. „An introduction to timetabling“, European Journal of
Operational Research, Elsevier, vol. 19(2), pages 151-162, February.
Chien S. and Rabideau G., 2000, ASPEN - Automated Planning and Scheduling for
Space Mission Operations
Ezequiel Q. Ángel G.-Olaya D. Borrajo F., 2011, “Control of Autonomous Mobile
Robots with Automated Planning“, „JOURNAL OF PHYSICAL AGENTS“, vol. 5,
no. 1, january
GERŠLOVÁ a kol. Zpráva Akreditační komise o hodnocení Unicorn College s.r.o.
Praha [online] vyd. listopad 2010 dostupné z URL:
http://www.akreditacnikomise.cz/attachments/article/252/CZ_hodnoceni_
unicorn_college_2010.pdf
Ghallab, Malik; Nau, Dana S.; Traverso, Paolo (2004), Automated Planning: Theory
and Practice, Morgan Kaufmann, ISBN 1-55860-856-7
Makoto Yokoo, 1995, „Asynchronous Weak-commitment Search for Solving
Distributed Constraint Satisfaction Problems“, International Conference on
Principles and Practice of Constraint Programming, pages 88-102
Menkes, H..: INTEGER PROGRAMMING APPROACHES FOR AUTOMATED PLANNING
[online]. Arizona , 2008. Dissertation. ARIZONA STATE UNIVERSITY
Müller T.: Constraint-based Timetabling. Prague, 2005. Ph.D. Thesis. Charles
University in Prague Faculty of Mathematics and Physics, page 4
Rodriguez, C.; Villagra, M.; Baran, B. (2007). "Asynchronous team algorithms for
Boolean Satisfiability". 2007 2nd Bio-Inspired Models of Network,
Information and Computing Systems. doi:10.1109/BIMNICS.2007.4610083
84
Roie Zivan and Amnon Meisels, 2006 ,„Message delay and Asynchronous DisCSP
search“
Schaerf A., 1999, „A Survey of Automated Timetabling“, ARTIFICIAL INTELLIGENCE
REVIEW, vol. 13(2), pages 87-127
85
10.Seznam obrázků
Ilustrace 1: Weak-commetment search algortihm................................................................22
Ilustrace 2: Procedures for receiving messages (AWC).......................................................24
Ilustrace 3: Příklad běhu AWC algoritmu............................................................................25
Ilustrace 4: Algoritmus Weak-Commitment Search s prioritními agenty............................29
Ilustrace 5: Use-case diagram - MWCS knihovna...............................................................34
Ilustrace 6: MWCS domain model.......................................................................................35
Ilustrace 7: Sekvenční diagram použíti knihovny................................................................37
Ilustrace 8: Datová vrstva aplikace......................................................................................42
Ilustrace 9: MWCS class diagram........................................................................................48
Ilustrace 10: MWCS class diagram - Solver........................................................................49
Ilustrace 11: MWCS class diagram - Agent.........................................................................59
Ilustrace 12: Úvodní obrazovka...........................................................................................69
Ilustrace 13: Časová omezení...............................................................................................70
Ilustrace 14: Náhled předmětů.............................................................................................71
Ilustrace 15: Náhled skupiny událostí..................................................................................72
Ilustrace 16: Náhled událostí................................................................................................73
Ilustrace 17: Náhled studentů...............................................................................................74
Ilustrace 18: Náhled místností..............................................................................................75
Ilustrace 19: Náhled vyučujících..........................................................................................76
Ilustrace 20: Plánování.........................................................................................................78
86
11.Seznam tabulek
Tabulka 4.1: Požadované množství cyklů pro n-queens problém........................................27
Tabulka 4.2: Požadované množství cyklů pro problém barvení grafu.................................27
Tabulka 4.3: Požadované množství cyklů pro network resource allocation problém..........27
Tabulka 5.1: Použité pojmy v navrhu řešení........................................................................28
Tabulka 5.2: Porovnání optimalizací (jeden seznam)...........................................................32
Tabulka 5.3: Porovnání optimalizace (dva seznamy)...........................................................33
Tabulka 5.4: Popis use-case knihovny MWCS....................................................................34
Tabulka 5.5: MWCS domain model - popis.........................................................................36
Tabulka 5.6: Třída MWCS::Solver - Atributy......................................................................37
Tabulka 5.7: Třída MWCS::Solver - Metody.......................................................................37
Tabulka 5.8: Třída MWCS::Context - Atributy....................................................................38
Tabulka 5.9: Třída MWCS::Context - Metody.....................................................................38
Tabulka 5.10: Třída MWCS::ContextNogoodSnapshot - Atributy......................................38
Tabulka 5.11: Třída MWCS::ContextNogoodSnapshot - Metody.......................................39
Tabulka 5.12: Třída MWCS::AgentNogood - Atributy........................................................39
Tabulka 5.13: Třída MWCS::AgentNogood - Metody.........................................................39
Tabulka 5.14: Třída MWCS::Agent::Agent - Metody.........................................................39
Tabulka 5.15: Třída MWCS::Agent::Agent - Atributy.........................................................40
Tabulka 5.16: Třída MWCS::Agent::Parameter - Atributy..................................................40
Tabulka 5.17: Třída MWCS::Agent::Parameter - Metody...................................................40
Tabulka 5.18: Třída MWCS::Agent::Events::AgentEventArgs - Atributy..........................40
Tabulka 5.19: Třída MWCS::Agent::Events::AgentEventArgs - Metody...........................41
Tabulka 5.20: Třída MWCS::Agent::ParameterType - Atributy..........................................41
Tabulka 5.21: Třída MWCS::Agent:: ParameterType - Metody..........................................41
Tabulka 5.22: Třída MWCS::Agent::IMinConflictSearchAlg - Metody.............................41
Tabulka 6.1: Implementace třídy MWCS::Solver - Konstruktory.......................................50
Tabulka 6.2: Implementace třídy MWCS::Solver - Atributy...............................................50
Tabulka 6.3: Implementace třídy MWCS::Solver - Vlastnosti............................................50
Tabulka 6.4: Implementace třídy MWCS::Solver - Metody................................................50
Tabulka 6.5: Implementace třídy MWCS::Context - Konstruktory.....................................53
Tabulka 6.6: Implementace třídy MWCS::Context - Atributy.............................................53
Tabulka 6.7: Implementace třídy MWCS::Context - Vlastnosti..........................................53
Tabulka 6.8: Implementace třídy MWCS::Context - Metody..............................................54
Tabulka 6.9: Implementace třídy MWCS::ContextNogoodSnapshot - Konstruktory.........57
Tabulka 6.10: Implementace třídy MWCS:: ContextNogoodSnapshot - Atributy..............57
Tabulka 6.11: Implementace třídy MWCS::Agent::AgentNogood - Konstruktory.............57
Tabulka 6.12: Implementace třídy MWCS:: Agent::AgentNogood - Vlastnosti.................58
Tabulka 6.13: Implementace MWCS::SolverResult - Hodnoty...........................................58
Tabulka 6.14: Implementace MWCS::ContextSide - Hodnoty............................................60
Tabulka 6.15: Implementace třídy MWCS::Agent::Agent - Konstruktory..........................60
Tabulka 6.16: Implementace třídy MWCS:: Agent::Agent - Atributy.................................60
Tabulka 6.17: Implementace třídy MWCS:: Agent::Agent - Vlastnosti..............................61
Tabulka 6.18: Implementace třídy MWCS:: Agent::Agent - Metody..................................61
Tabulka 6.19: Implementace třídy MWCS::Agent::Parameter - Konstruktory....................63
Tabulka 6.20: Implementace třídy MWCS:: Agent:: Parameter - Atributy..........................63
87
Tabulka 6.21: Implementace třídy MWCS::Agent::ParameterType - Konstruktory............64
Tabulka 6.22: Implementace třídy MWCS:: Agent:: ParameterType - Atributy..................64
Tabulka 6.23: Implementace třídy MWCS:: Agent:: ParameterType - Vlastnosti...............64
Tabulka 6.24: Implementace třídy MWCS:: Agent:: ParameterType - Metody...................65
Tabulka 6.25: Rozrhaní MWCS:: Agent:: IMinConflictSearchAlg - Metody.....................66
88
12.Seznam příloh
A) Přiložené CD obsahující text práce, MWCS knihovnu, plánovací aplikace
UUScheduling, testovací aplikace NQueens, diagramy navrchu a obrázky UI
aplikace a testovací data.
89
13.Příloha A: obsah přiloženého CD
Obsah CD je organizován do následujících složek:
•
Bakalářská práce – Obsahuje samotnou bakalářskou práci
•
MWCS knihovna - Obsahuje dll soubor knihovny
•
UUScheduling – Obsahuje spustitelnou plánovací aplikaci
•
N-Queens – Testovací aplikace, jako příklad použíti knihovny
•
Zdrojové kódy – Součástí CD je Microsoft Visual Studio 2012 projekt který obsahuje
zdrojové kódy knihovny, plánovací aplikace a aplikace N-Queens
•
Obrázky – diagramy a obrázky UI
•
„Unicorn College.sd“ - testovací data pro plánovací aplikace

Podobné dokumenty

zde

zde Vaillante de Dantes

Více

Vývoj e-‐shopu na redakčním systému WordPress

Vývoj e-‐shopu na redakčním systému WordPress Prohlašuji, že jsem diplomovou práci zpracoval samostatně a že jsem uvedl všechny použité prameny a literaturu, ze které jsem čerpal.

Více