01.12.2014 Views

vysoké učení technické v brně evoluční algoritmy - matlab gate toolbox

vysoké učení technické v brně evoluční algoritmy - matlab gate toolbox

vysoké učení technické v brně evoluční algoritmy - matlab gate toolbox

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

25<br />

4 IMPLEMENTACE<br />

Jak již bylo naznačeno v dřívějších kapitolách, bylo potřeba vytvořit dynamicky<br />

linkovanou knihovnu DLL, která by přebrala veškeré stěžejní funkce pro práci s binárním<br />

kódem. Volba programovacího jazyka byla od počátku jasná. Programovací jazyk Java byl po<br />

předběžných testech rychlosti zcela vyloučen, proto jsem se rozhodl pro objektové C++. Java je<br />

sice moderní programovací jazyk, v systému Matlab je velmi dobře podporován, avšak běží<br />

(stejně jako sytém Matlab) ve virtuálním stroji, proto jsem ani neočekával přílišné zvýšení<br />

rychlosti výpočtů. Ukázalo se, že C++ kód přeložený vhodným kompilátorem dokáže být při<br />

složitějších matematických operacích až 4x rychlejší než podobně napsaný zdrojový kód<br />

v jazyce Java.<br />

Od začátku jsem ještě přesně nevěděl, jak bude finální knihovna vypadat co se týče<br />

počtu a odlišnosti algoritmů. Nejdříve jsem psal metody do samostatných zdrojových kódů a<br />

chtěl jsem mít ve finálním řešení několik samostatných DLL knihoven (každá metoda<br />

optimalizace ve zvláštní knihovně). Nakonec se ukázalo, že <strong>algoritmy</strong> mají mnoho společného,<br />

takže jsem celou knihovnu přepracoval a <strong>algoritmy</strong> sloučil do jedné DLL knihovny.<br />

4.1 Vnitřní implementace DLL<br />

DLL se skládá z několika celků, naprogramovaných jako samostatné objekty. Jedná se o<br />

hlavní jádro COptMethod, metody HCA: CHca1, CHca2, CHca12, genetický algoritmus CGa<br />

(obsahuje také modifikaci GA-HC), XML parser CXml, a v poslední řadě také celé DLL<br />

exportní rozhraní.<br />

DLL knihovna<br />

CGa<br />

CHca1<br />

Matlab<br />

DLL<br />

I/O<br />

rozhraní<br />

COptMethod<br />

CHca2<br />

CXml<br />

CHca12<br />

Obr. 6 Vnitřní blokové schéma knihovny DLL<br />

V I/O rozhraní DLL knihovny mohou být pouze exportní a importní metody. Jsou<br />

uzpůsobeny tak, aby dokázaly obsloužit vstupní a výstupní požadavky všech optimalizačních<br />

metod a XML parseru.<br />

4.1.1 Optimalizační jádro COptMethod<br />

Hlavní jádro obsahuje veškeré metody společné pro všechny <strong>algoritmy</strong>. Je to hlavní<br />

objekt, který je předek pro objekty optimalizačních metod HCxx a GA. Obsahuje strukturu pro<br />

nastavení parametrů optimalizace, dynamická pole pro binární populaci a její ohodnocení,<br />

všechny konverzní metody mezi binárním kódem a reálnými čísly, funkce pro náhodnou<br />

inicializaci populace, exportní funkce pro XML nastavení, podporu pro distribuované výpočty a<br />

výkonné metody. Výkonné části kódu jsou řešeny virtuálními metodami, protože potomci<br />

(konkrétní optimalizační <strong>algoritmy</strong>) mají tyto metody zcela odlišné.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!