You are on page 1of 22

Laboratorijska vježba 10 GA/GA/OPTIMTool

Računarski algoritmi u bioinformatici

Predmetni nastavnik:
Red.prof.dr Zikrija Avdagić, dipl.ing.el.

Asistenti:s Mr.sci Sabina Dacić-Lepara, sdacic@etf.unsa.ba


MoEE Sabina Muratović, sm14852@etf.unsa.ba
MoEE Merisa Golić, mgolic1@etf.unsa.ba

2018 / 2019
Genetički algoritam
Cilj vježbe: Upoznavanje sa Optimization Toolbox-om, kao produžetkom
MATLAB-a, koji sadrži alate i široko rasprostranjene algoritme za
optimizacije velikih razmjera.
Optimization Toolbox omogućava rješavanje kontinualnih i diskretnih
problema sa i bez ograničenja, a sadrži funkcije za linearno programiranje,
kvadratno programiranje, nelinearnu optimizaciju, više-kriterijalnu
optimizaciju itd.
Podsjećanje: Optimizacija je proces pronalaženja minimuma ili maksimuma
funkcije, koju obično nazivamo funkcijom cilja (kriterija, engl. objective
function).
Optimization Toolbox se sastoji od funkcija koje vrše minimiziranje (ili
maksimiziranje) na generalno nelinearnim funkcijama. Osim toga toolbox
sadrži i funkcije za rješavanje nelinearnih jednačina te aproksimaciju
podataka funkcijom (data-fitting).
Genetički algoritam
Primjer 1: optimizacija funkcije bez ograničenja
Neka je funkcija (anonimna) koju želimo optimizirati oblika:
fun = @(x) exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1)
Postavimo (pretpostavimo) početno rješenje:
x0 = [-1; 1];
Postavimo parametre optimizacije – isključimo algoritme velikih razmjera
(predefinisana opcija):
options = optimset('LargeScale','off');
Pozovimo funkciju minimizacije bez ograničenja (unconstrained):
[x, fval, exitflag, output] = fminunc(fun, x0, options);
Rezultati
Rješenje koje je pronašao optimizator:
x = 0.5000
-1.0000
Vrijednost funkcije za nađeno rješenje je:
fval =3.6609e-015
Ukupan broj evaluacija funkcija je bio:
output.funcCount
ans =66
Genetički algoritam

Samostalni rad

Analizirati primjer optimizacije bez ograničenja te uočiti šta se dešava


kada:
- promijenite funkciju koja se optimizira,
- promijenite početno (pretpostavljeno rješenje),
Pročitati o fminunc funkciji korištenoj u primjeru te o različitim
varijantama njenog poziva.
Genetički algoritam
Primjer 2: optimizacija funkcije sa ograničenjima u vidu nejednačine

Neka je ciljna funkcija u M-fajlu objfun.m:


function f = objfun(x)
% Objective function
% Copyright 1990-2004 The MathWorks, Inc.
% $Revision: 1.1.6.1 $ $Date: 2006/11/11 22:48:52 $
f = exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) +*x(2) + 1);
Neka su ograničenja definisana u M-fajlu confun.m:
function [c, ceq] = confun(x)
% Nonlinear inequality constraints:
% Copyright 1990-2004 The MathWorks, Inc.
% $Revision: 1.1.6.1 $ $Date: 2006/11/11 22:48:27 $
c = [1.5 + x(1)*x(2) - x(1) - x(2);
-x(1)*x(2) - 10];
% No nonlinear equality constraints:
ceq = [];
Postavimo (pretpostavimo) početno rješenje:
x0 = [-1; 1];
Genetički algoritam
Postavimo parametre optimizacije – isključimo algoritme velikih razmjera
(predefinisana opcija) i uključimo prikaz iteracija:
options = optimset('LargeScale','off','Display','iter');
Pozovimo funkciju optimizacije sa ograničenjima ( [] označavaju parametre
koje nemamo a odnose se na linearne jednačine ili nejednačine ili ograničenja):
[x,fval,exitflag,output] =
fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);
Rezultati
Rješenje koje je pronašao optimizator:
x = -9.5474 1.0474
Vrijednost funkcije za nađeno rješenje je:
fval = 0.0236
Oba uslova u vidu nejednačina su zadovoljena:
[c, ceq] = confun(x)
c =
1.0e-007 *
-0.9032
0.9032
ceq =
[]
Genetički algoritam

Samostalni rad
Analizirati primjer optimizacije sa ograničenjima te uočiti šta se dešava
kada:
- promijenite funkciju koja se optimizira,
- promijenite postojeća ograničenja,
- dodate nova ograničenja,
Pročitati o fmincon funkciji korištenoj u primjeru te o različitim
varijantama njenog poziva.
Genetički algoritam
Aproksimacija podataka funkcijom

Često se pojavljuje potreba da se neki skup podataka aproksimira


nelinearnom funkcijom. To znači da se variraju parametri funkcije dok se ne
postigne da je funkcija minimalno udaljena od skupa podataka.
Posmatrajmo sljedeći skup podataka koji želimo aproksimirati
nelinearnom funkcijom:
Data = ...
[0.0000 5.8955; 0.1000 3.5639; 0.2000 2.5173;
0.3000 1.9790
0.4000 1.8990; 0.5000 1.3938; 0.6000 1.1359;
0.7000 1.0096
0.8000 1.0343; 0.9000 0.8435; 1.0000 0.6856;
1.1000 0.6100
1.2000 0.5392; 1.3000 0.3946; 1.4000 0.3903;
1.5000 0.5474
1.6000 0.3459; 1.7000 0.1370; 1.8000 0.2211;
1.9000 0.1704
2.0000 0.2636];
Genetički algoritam
Radi lakšeg posmatranja podataka iscrtajmo tačke:
close all Data points
fig = colordef(gcf, 'white'); 6

t = Data(:,1); 5

y = Data(:,2); 4

axis([0 2 -0.5 6]) 3

figure(fig) 2
hold on 1
plot(t,y,'ro','EraseMode','none') 0
title('Data points') 0 0.5 1 1.5 2
hold off

Neka želimo podatke aproksimirati funkcijom:


y = c(1)*exp(-lam(1)*t) + c(2)*exp(-lam(2)*t)

koja ima dva linearna parametra c i dva nelinearna parametra lam. Pošto
imamo i linearne i nelinearne parametre rješavanje ćemo podijeliti u dva koraka.
Genetički algoritam
Kreirajmo funkciju (m fajl) koja se naziva fitfun2, koja na osnovu nelinearnih parametara lam i
podataka, računa za date procjene linearnih parametara grešku u poklapanju (error in the fit):
function [f, yEst] = fitfun2(lam,Data)
% f = FITFUN2(lam,Data) returns the error between the data
% and the values computed by the current function of lam.

% [f, yEst] = FITFUN2(lam,Data) also returns the estimated


% value of y; that is, the value of the current model.
% FITFUN2 assumes a function of the form
% y = c(1)*exp(-lam(1)*t) + ... + c(n)*exp(-lam(n)*t)
% with n linear parameters and n nonlinear parameters.
% To solve for the linear parameters c, we build a matrix A
% where the j-th column of A is exp(-lam(j)*t) (t is a vector).
% Then we solve A*c = y for the linear least-squares solution c.

% Copyright 1990-2004 The MathWorks, Inc.


% $Revision: 1.1.6.1 $ $Date: 2006/11/11 22:48:39 $

t = Data(:,1); y = Data(:,2); % separate Data matrix into t and y


A = zeros(length(t),length(lam)); % build A matrix
for j = 1:length(lam)
A(:,j) = exp(-lam(j)*t);
end
Genetički algoritam
c = A\y; % solve A*c = y for linear parameters c
yEst = A*c;
f = y - yEst; % compute error (residual) y-A*c
Funkcija cilja zahtijeva da joj se proslijede parametri a najlakše je to učiniti na sljedeći način:
f = @(x) (norm(fitfun2(x,Data)))
Za početak se postave parametri optimizacije i postavi inicijalna vrijednost nelinearnih
parametara:
options=...
optimset('LargeScale','off','Display','iter','TolX',1e-3);
lam0 = [1; 0]; % Initial guess for nonlinear parameters
Poklapanje funkcije sa podacima ćemo optimizirati upotrebom BFGS quasi-Newton algoritma,
implementiranog u fminunc funkciji. Posmatrajmo izvršenje:
plothandle = plotdatapoints(t,y); % plot data points
% and get plot handle.
% Output function requires additional parameters
% data and plothandle; use an anonymous function:
foutputfcn = @(x,optimvalues,state) ...
fitfun2outputfcn(x,optimvalues,state, ...
Data,plothandle);
options = optimset(options,'OutputFcn',foutputfcn);
t0 = clock;
[lam,fval,exitflag,output] = fminunc(f,lam0,options);
Genetički algoritam
execution_time=etime(clock, t0);
fprintf(['\nNumber of iterations: %g\nNumber of
function ' ...
'evaluations: %g\n'], ...
output.iterations, output.funcCount);
fprintf('Sum of squared residuals at solution:
%g\n',fval^2);
fprintf('Execution time: %g\n',execution_time);
Data points and fitted curve
6

0 0.5 1 1.5 2
Genetički algoritam - OptimTool
Global Optimization Toolbox nudi metode koje tragaju za globalnim rješenjima
problema, koja sadrže više minimuma ili maximuma.

GA je metod koji rješava optimizacijske probleme sa i bez ograničenja,


zasnovan na bazi prirodne selekcije koji imitira proces biološke evolucije.

Da bismo riješili neki od problema koristeći se genetičkim algoritmom, Matlab


nudi GUI Tool.

Za prikaz OptimTool-a koristimo slijedeću komandu:

optimtool('ga')
Genetički algoritam - OptimTool
Genetički algoritam - OptimTool
Da bismo koristili Optimization Tool, prvo moramo unijeti slijedeće informacije:

•Fitness funkcija
Funkcija koju želimo minimizirati. Fitness funkcija unosi se u formi @fitnessfun
gdje fitnessfun.m predstavlja file koji računa fitness funkciju. @ znak kreira
handle za fitnessfun.

•Broj varijabli
•Veličina input vektora za fitness funkciju
Genetički algoritam - OptimTool

Možemo unijeti funkciju sa ili bez ograničenja. Ako je problem bez ograničenja,
Constraint pane polje ostavljamo prazno.

Da bi se pokrenuo GA algoritam, potrebno je kliknuti na dugme ‚Start‘

U Run solveru vidjet ćemo rezultate optimizacije.

U Option panelu možemo mijenjati pojedine opcije GA

Da bismo imali prikaz opcija u jednoj kategoriji, izlistanih u panelu, potrebno je


kliknuti na +.
Genetički algoritam – OptimTool -
Primjer
Proći ćemo kroz primjer koji pokazuje na koji način možemo pronaći minimum
Rastrginove funkcije.
Rastriginova funkcija za dvije nezavisne varijable:

Ras( x)  20  x12  x22  10(cos 2x1  cos 2x2 )


Genetički algoritam – OptimTool –
Primjer
Izgled GUI panela sa parametrima za rješavanje navedene funkcije:
Genetički algoritam – OptimTool -
Primjer
Dok je algoritam pokrenut, Current iteration polje prikazuje broj slijedećih
generacija.
Moguće je pauzirati algoritam, odabirom dugmeta ‚Pause‘ u trenutno aktovnom
panelu.
Da bi algoritam nastavio nakon odabira ovog dugmeta, potrebno je odabrati
opciju ‚Resume‘

Kad je algoritam završen, Run solver i View Results paneli budu pruikazani.

Napomena: GA je stohastički algoritam, tako da nije očekivano da prilikom


svakog pokretanja istog imamo uvijek iste rezultate!!
Genetički algoritam - OptimTool
Nakon odabira dugmeta ‚Start‘ dobijemo slijedeće:

Display prikazuje:

Finalna vrijednost kada je algoritam


završen je: 0.15078442701228667

Razlog zbog kojeg je algoritam


terminirao: prosječna promjena fitness
vrijednosti je manja nego
options.TolFun.

Krajnja tačka: [-0.021 0.018]


Genetički algoritam – OptimTool -
Primjer
The Optimization Tool Plot
Panel omogućava prikaz različitih
tačaka koje nude informacije o
genetičkom algoritmu u vremenu
dok je pokrenuti (running mode)
Ove informacije mogu biti od
velike koristi ukoliko želimo
unaprijediti performanse
algoritma.

Npr. Za iscrtavanje najbolje i


srednje vrijednosti fitness funkcije
u svakoj generaciji, potrebno je
odabrati box koji se nalayzi pored
‚Best fitness‘ opcije, kao što je
prikazano na slici.
Samostalni rad
Bilješke sa vježbi potrebno je poslati predmetnom asistentu na e-mail.

You might also like