Implementácia genetických algoritmov: Rozdiel medzi revíziami
Riadok 8: | Riadok 8: | ||
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. | 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 | + | == Parser matematických výrazov == |
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á. | 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:39, 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
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á.