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
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é.