Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduo
No caso de um problema de otimizao irrestrito, ele um critrio que
engloba de maneira mais geral um clculo matemtico de otimizao, o
objetivo deste trabalho justamente avaliar o desempenho de dois mtodos
bsicos, o mtodo de busca de direes aleatrias e o mtodo de gradiente,
na busca do mnimo local de uma funo dentro da bacia de atrao da
anlise.
Metodologia
O algoritmo de otimizao desenhado foi feito na plataforma MATLAB,
sendo a funo objetivo para o problema proposto na pgina 13 da unidade
5 das notas de aula, como expressa a equao (1).
f ( x )=2 x 21+x 22 +2 x1 x 2+ x 12 x 2+3
eq. [1]
Deve-se obter o valor das variveis {x} rsub {1 } e {x} rsub {2 } para que a
expresso da equao [1] seja o mnimo, sem ter restries para o valor das
variveis, sendo o ponto inicial em [-1 1].
O processo seguido para programao dos algoritmos de busca de direes
e de gradiente foram feitos com base nos passos descritos para cada um
deles nas notas de aula mencionados.
a. Algoritmo de busca de direes
A partir do desenho especificado para este algoritmo o qual
descreve-se no fluxograma 1, deu-se o incio para o desenho das
rutinas e sub-rotinas propcias para o casso.
Maio de 2015
[Capte
atencin
Definio
dala
funo
e dados inicias
de los lectores
Critrio de parada
Direo de busca
dk
Arg. mnimo de
= argmin(f(xk) + dk)
Xk+1=xk + dk
Fluxograma 1
Critrio de parada:
Para a definio do critrio de parada,
existem trs opes as quais se descrevem nas notas de aula no
capitulo cinco, sendo considerado para o caso particular o mtodo de
aproximao do valor da funo objetivo, considerando sempre que
as ltimas seis iteraes no variam mais do 0,0001 respeito da
diferena do mximo e mnimo ocorrido durante todo o algoritmo,
sendo deste modo executado no critrio de fim do anel fechado.
Direo de busca:
Para estabelecer o critrio de direo de
busca, considere-se um vetor de n componentes aleatrios com uma
Maio de 2015
eq. [2]
x k+1
depende
armazenar o valor de x .
A funo gerada para o algoritmo de busca de direes est expressa
em (3).
[xstar,iter]=minbusqueda(f,x,a,b)
[3]
Onde cada um dos termos expressos na funo descrito do seguinte
modo.
xstar: Vetor que contm a varivel para qual a funo vai dar o
mnimo valor dela.
Maio de 2015
b. Algoritmo do gradiente:
O segundo mtodo desenhado para a
determinao do mnimo local da funo dentro da bacia de atrao
em estudo foi o algoritmo do gradiente, o qual difere do algoritmo de
busca, s na maneira em que define o valor do vetor dk que, neste
casso vai ser o vetor gradiente da funo objetivo, o qual calculado
por a expresso gradiente( ) que uma sub-rotina exclusivamente
desenhada para avaliar iterativamente a derivada parcial da funo
objeto do analises, o algoritmo do gradiente descrito no Anexo 1.
No processo de fluxo de programao para o algoritmo de gradiente
tem que seguir uma sequncia similar ao algoritmo de busca de
direes aleatria, no fluxograma 2, tem um detalhe onde pode-se
apreciar a diferena no ponto de clculo da direo dk.
Critrio de parada
Arg. mnimo de
= argmin(f(xk) + dk)
4
Xk+1=xk + dk
Maio de 2015
Fluxograma 2
Sendo dk o negativo do valor do gradiente, calculado por meio da
funo gradiente (), a qual expressa a direo de decrescimento da
funo objetivo que neste casso de ordem dois.
Mantendo a similitude com o algoritmo de busca, procedesse com a
determinao do novo xk, que vai depender diretamente do seu
valor k-1 somado uma constante dk.
Finalmente precisa-se determinar a funo objetivo para cada uma
das iteraes, lembrando que seu valor vai ser o critrio de parada
para a expresso while at obter o mnimo erro estabelecido como
limite do clculo.
A funo desenhada para o mtodo do gradiente expressasse em (4).
[xstar,iter]=mingrad(f,x,a,b)
[4]
Onde:
xstar: Vetor que contm a varivel para qual a funo f(x), expressa
seu mnimo valor.
iter: Escalar que faz o conta do nmero de repeties requeridas pela
funo mingrad foram necessrias para que o algoritmo convergir
ao mnimo local, dentro do mnimo erro expressado no critrio de
parada.
Funo f: Funo objetivo o qual o tema de analises.
x: Ponto inicial pertencente aos nmeros reais que fica dentro da
bacia de atrao condio de existncia do algoritmo.
a e b: So os limites para o condio que responsvel por gerar
o novo vetor x k .
Resultados
i)
Maio de 2015
x2
-2
10
Tabela 1
Valores iniciais algoritmo de busca aleatria
iteraes
2.4720
334760
Tabela 1
Valores finares algoritmo de busca aleatria
ii)
iii)
Maio de 2015
x1
x2
-2
10
Tabela 3
Valores iniciais algoritmo de gradiente
iteraes
2.3874
11224
Tabela 4
Valores finares algoritmo de gradiente
Maio de 2015
x al x star
100
xal
[5]
ERRO RELATIVO
Algoritmo de busca
Algoritmo de gradiente
Er =[ 1.22 1.12 ]
Er =[ 1.47 4.5 ]
Tabela 3
Erro relativo dos algoritmos
Se alm disso consideramos que uma relao entre o nmero de iteraes
requerido por os algoritmos, pode ser descrito percentualmente por um
2900% maior o para o algoritmo de busca de direes, em outras palavras,
a execuo do algoritmo de busca de direes precisa 2900% mais
iteraes que o algoritmo de gradiente, o que claramente um custo
computacional muito maior.
Maio de 2015
Maio de 2015
Anexo 1
Funo gradiente
function [ gk ] = gradiente( f,X)
delta=0.0001;
[row,~]=size(argnames(f));
e=eye(row);
for i=1:row-1
for j=1:row
gk(j,i)=(f(X(i)+delta*e(i,j),X(i+1)+delta*e(i+1,j))f(X(i),X(i+1)))/delta;
end
end
end
10
Maio de 2015
11
Maio de 2015
Anexo 2
1
0.8
0.6
f(x)
0.4
0.2
0
-0.2
-0.4
2000
4000
6000
iteraes
8000
10000
12000
Grfico 1
Convergncia do algoritmo do gradiente
11
x 10
3.5
3
2.5
f(x)
2
1.5
1
0.5
0
-0.5
0.5
1.5
iteraes
2.5
3.5
5
x 10
Grfico 2
Convergncia do algoritmo de busca de seo aleatria
12
Maio de 2015
Anexo 3
Algoritmo de busca de direes aleatrias
function [ xstar,iter ] = minbusqueda( f,x,a,b )
parada=0;
k=1;
X=x(k,:)
F(k)=f(X(1),X(2));
a1=a;
b1=b;
[row,~]=size(argnames(f));
while parada==0;
dk=rand(row,1);
[alpha,a1,b1]=secaurea(f,a1,b1,dk,X);
k=k+1;
x(k,:)=x(k-1,:)'+alpha*dk;
X=x(k,:);
F(k)=f(X(1),X(2));
Fxmax=max(F);
[Fxmin,xstar]=min(F);
deltaF=Fxmax-Fxmin;
if k>5
F5=[F(k);F(k-1);F(k-2);F(k-3);F(k-4);F(k-5)];
EF1=max(F5)-min(F5);
if EF1<0.00001*deltaF'
parada=1;
end
end
end
[fila,coluna]=size(x)
x(xstar,:)
plot(F);
iter=k;
end
13
Maio de 2015
14
Maio de 2015
15
Maio de 2015