EVO: cvičení 2 - Optimalizace pomocí genetického algoritmu
V rámci této laboratorní úlohy budeme využívat obvodový simulátor NGSPICE. Obraz distribuce Linux Mint, kterou použijeme v prostředí VirtualBox, již obsahuje vše potřebné. Alternativně je
možné použít vlastní notebook. Pokud vám v tom případě bude chybět instalace simulátoru NGSPICE, lze postupovat např. dle návodu níže:
- https://sourceforge.net/projects/ngspice/
- ./configure --prefix=$HOME/ngspice --with-ngshared
- make
- make install
Je zadán elektrický obvod, máme za úkol nastavit hodnoty součástek tak, aby bylo dosaženo určité chování.
http://www.falstad.com/circuit/...
Můžeme měnit hodnoty rezistorů R1, R2, Rc, Re a kondenzátorů Cin, Cout, Ce.
Jedná se o zesilovač s jedním bipolárním tranzistorem, vstupem je signál s malou amplitudou, na výstupu chceme sinusový signál s amplitudou 2 V.
Genetické algoritmy - princip
Řešená úloha
Program na stderr vypisuje průběžné údaje (fitness v populaci, nejlepší jedinec).
Po doběhnutí zobrazí průběhy výstupního signálu u nejlepších jedinců z poslední generace ve formátu pro gnuplot. Př.:
make gnuplot:
./evo2 | gnuplot - --persist
Fitness funkce?
Každého jedince ohodnotíme pomocí simulace v NGSPICE. Výsledkem simulace je diskrétní řada vzorků (3 periody) fce[x]. Chceme vyhodnotit, jak moc se blíží ideálnímu průběhu -2sin(x).
Výsledek simulace musíme přepočítat na fitness!
- (Pozn.: máme garanci, že signál nebude fázově posunut ⇒ víme, jaká je pozice extrémů.)
- Výstupem má být nějaké kmitání, nestačilo by zkoumat jen velikost amplitudy (tedy funkční hodnotu v místě extrému)?
- Vzdálenost skutečného a teoretického průběhu v každém bodě x?
- Jaká vzdálenost? Kvadraticky? Exponenciálně? (Malé odchylky nám možná ani nevadí, ale velké chceme postihnout.)
- Penelizační funkce? Tzn. odchylky do určité velikosti promíjíme, větší trestáme stejnou měrou. (tj. rozhodování správně/špatně)
- Stáhněte si archív se zdrojovým kódem:
- Dodělejte fitness funkci (vyzkoušejte více variant).
- Jakou největší amplitudu je schopna evoluce získat?
- Experimentujte s nastavením parametrů. Nalezněte správné řešení obvodu (= sinusovka, 2 V)!
- Nalezněte takové nastavení parametrů a fitness, aby algoritmus nacházel správná řešení opakovaně.