Implementácia genetických algoritmov

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Imbox draft.png
Toto je projekt, na ktorom sa ešte stále pracuje!!

Aj keď sú v tomto dokumente použiteľné informácie, ešte nie je dokončený. Svoje návrhy môžete vyjadriť v diskusii o tejto stránke.

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