Implementácia genetických algoritmov: Rozdiel medzi revíziami
() |
|||
Riadok 9: | Riadok 9: | ||
== Parser matematických výrazov (2.1)== | == Parser matematických výrazov (2.1)== | ||
+ | Jednou z najhlavnejších častí programu je, ako bolo už spomenuté, parser matematických výrazov. Keďže z globálneho hľadiska je úlohou programu zo vstupu, ktorým je užívateľom zadaná aproximačná funkcia a namerané dáta pomocou genetického algoritmu nájsť hodnoty konštánt vyskytujúcich sa v zadanej funkcii, je zrejmé že parser matematických výrazov je v tomto programe nevyhnutný. Je to z toho dôvodu, lebo zadaná aproximačná funkcia je načítaná ako reťazec textu a na to aby bol program schopný pracovať s touto funkciou je potrebné ju naparsovať. Tento parser teda slúži na prevedenie zadanej funkcie do takého tvaru, aby bolo možné ju jednoducho vyhodnotiť a následne slúži ako súčasť ohodnocujúcej funkcie genetického algoritmu na výpočet ohodnotenia jednotlivých jedincov v populácii a taktiež ešte pri vykresľovaní dát do grafu. Parser je založený na algoritme shunting-yard a umožňuje tak previesť zadaný matematický výraz na obrátený poľský zápis (postfix), pričom tento postfix prevádza do tvaru so špecifickou štruktúrou. V tomto prípade je postfix uložený v jednorozmernom poli, ktoré je súčasťou zásobníku typu LIFO, pričom položky v tomto poli sú reprezentované ako dátový typ ''TToken'', čo je vlastne trieda špeciálne vytvorená pre tento parser. Štruktúra triedy ''TToken'' je nasledovná. |
Verzia zo dňa a času 12:37, 1. jún 2010
1. | Teória genetických algoritmov |
2. | Implementácia genetických algoritmov |
3. | Testovacia úloha pre genetický algoritmus
|
Celý program je napísaný v objektovo orientovanom programovacom jazyku c++. Hlavnými celkami, ktoré bolo nutné vyriešiť boli naprogramovanie parsera matematických výrazov a samotného genetického algoritmu, ktorý využíva v ohodnocujúcej funkcii práve tento parser. Program je vyhotovený aj s grafickým užívateľským prostredím GUI, pričom bola snaha aby jeho používanie bolo čo najviac používateľsky prijateľné. Je v ňom zakomponovaných viacero doplnkových funkcii, s pomocou ktorých má užívateľ viacero možností práce s genetickým algoritmom respektíve zadanými dátami a podobne. Patrí sem napríklad možnosť ručného nastavenia niektorých vlastností genetického algoritmu, zadanie intervalu, na ktorom budú zadané dáta aproximované, zobrazenie krivky priebehu genetického algoritmu a podobne.
Parser matematických výrazov (2.1)
Jednou z najhlavnejších častí programu je, ako bolo už spomenuté, parser matematických výrazov. Keďže z globálneho hľadiska je úlohou programu zo vstupu, ktorým je užívateľom zadaná aproximačná funkcia a namerané dáta pomocou genetického algoritmu nájsť hodnoty konštánt vyskytujúcich sa v zadanej funkcii, je zrejmé že parser matematických výrazov je v tomto programe nevyhnutný. Je to z toho dôvodu, lebo zadaná aproximačná funkcia je načítaná ako reťazec textu a na to aby bol program schopný pracovať s touto funkciou je potrebné ju naparsovať. Tento parser teda slúži na prevedenie zadanej funkcie do takého tvaru, aby bolo možné ju jednoducho vyhodnotiť a následne slúži ako súčasť ohodnocujúcej funkcie genetického algoritmu na výpočet ohodnotenia jednotlivých jedincov v populácii a taktiež ešte pri vykresľovaní dát do grafu. Parser je založený na algoritme shunting-yard a umožňuje tak previesť zadaný matematický výraz na obrátený poľský zápis (postfix), pričom tento postfix prevádza do tvaru so špecifickou štruktúrou. V tomto prípade je postfix uložený v jednorozmernom poli, ktoré je súčasťou zásobníku typu LIFO, pričom položky v tomto poli sú reprezentované ako dátový typ TToken, čo je vlastne trieda špeciálne vytvorená pre tento parser. Štruktúra triedy TToken je nasledovná.