MA37ASesion #5
Optimizacion con restricciones: GradienteReducido
Oscar Peredo
14 de Octubre del 2008
Esquema
1 Explicacion del Metodo del Gradiente Reducido
2 Problema Ejemplo
3 Implementacion en Octave
4 Utilizacion de solver Programacion Lineal
5 Utilizacion de solver Busqueda en la Semirecta
6 Calculos Matriciales en Octave
7 Ejecucion
Esquema
1 Explicacion del Metodo del Gradiente Reducido
2 Problema Ejemplo
3 Implementacion en Octave
4 Utilizacion de solver Programacion Lineal
5 Utilizacion de solver Busqueda en la Semirecta
6 Calculos Matriciales en Octave
7 Ejecucion
Problema
Para f : Rn → R, A ∈ Rm×n y b ∈ Rm, nos interesa resolver
(P)
minx∈Rn f (x)
s.a Ax = bx ≥ 0
donde se asume una hipotesis de no-degeneracion: cualesquieram columnas de A son l.i. y los puntos extremos (esquinas) de laregion factible tienen al menos m componentes estrictamentepositivas.
Motivacion del metodo
En los metodos irrestrictos (Cauchy y Newton) contruıamos unadireccion de descenso dk que por definicion garantizaba
∇f (xk)Tdk < 0
En el caso con restricciones, se quiere contruir una direccion dedescenso factible, que satisface
∇f (xk)Tdk < 0
Adk = 0
(xk)j = 0⇒ (dk)j ≥ 0
Algoritmo
1: (INICIALIZACION) k ← 1. Escoger un punto x1 que satisface Ax1 = b, x1 ≥ 0.
2: while (iteracion principal) do
3: Sean:
Ik = ındices de las m mayores componentes de xk (1)
B = {aj : j ∈ Ik} (2)
N = {aj : j /∈ Ik} (3)
rT = ∇f (xk )T −∇B f (xk )T B−1A (4)
(dN )j =
{−rj rj ≤ 0−xj rj rj > 0
(5)
dB = −B−1NdN (6)
4: Construir dTk = (dT
B , dTN ) utilizando (6) y (5).
5: if dk = 0 then
6: PARAR7: else8: Resolver el siguiente problema de busqueda en semirecta:
(Pλk) : minλ∈[0,λmax] f (xk + λdk )
donde
λmax =
min1≤j≤n
{−(xk )j(dk )j
: (dk )j < 0
}dk � 0
∞ dk ≥ 0
9: Si λk es solucion de (Pλk), setear xk+1 = xk + λkdk y k ← k + 1
10: end if11: end while
Esquema
1 Explicacion del Metodo del Gradiente Reducido
2 Problema Ejemplo
3 Implementacion en Octave
4 Utilizacion de solver Programacion Lineal
5 Utilizacion de solver Busqueda en la Semirecta
6 Calculos Matriciales en Octave
7 Ejecucion
Problema Ejemplo
(P)
min 2x2
1 + 2x22 − 2x1x2 − 4x1 − 6x2
s.a x1 + x2 + x3 = 2x1 + 5x2 + x4 = 5
xi ≥ 0
Satisface hipotesis de no-degeneracion.
Esquema
1 Explicacion del Metodo del Gradiente Reducido
2 Problema Ejemplo
3 Implementacion en Octave
4 Utilizacion de solver Programacion Lineal
5 Utilizacion de solver Busqueda en la Semirecta
6 Calculos Matriciales en Octave
7 Ejecucion
Diseno de la implementacion
Encontrar un punto inicial factible: Solver ProgramacionLineal (Sesion 2 del Lab.)
Resolver (Pλk): Solver Busqueda en la Semirecta (Sesion 3
del Lab.)
Resto de los calculos: Calculo Matricial de Octave
Esquema
1 Explicacion del Metodo del Gradiente Reducido
2 Problema Ejemplo
3 Implementacion en Octave
4 Utilizacion de solver Programacion Lineal
5 Utilizacion de solver Busqueda en la Semirecta
6 Calculos Matriciales en Octave
7 Ejecucion
Solver de Programacion Lineal (Sesion 2)
Paso 1 del algoritmo:
s=-1;
c=[1,1,1,1]’;
a=[1,1,1,0;
1,5,0,1];
b=[2,5]’;
ctype="UU";
lb=[0,0,0,0]’;
ub=[];
vartype="CCCC";
param.msglev=0;
param.itlim=100;
[xmin,fmin,status,extra]=glpk(c,a,b,lb,ub,ctype,vartype,s,param);
Esquema
1 Explicacion del Metodo del Gradiente Reducido
2 Problema Ejemplo
3 Implementacion en Octave
4 Utilizacion de solver Programacion Lineal
5 Utilizacion de solver Busqueda en la Semirecta
6 Calculos Matriciales en Octave
7 Ejecucion
Solver de Busqueda en la Semirecta (Sesion 3)
Paso 8 del algoritmo:
lambda_optimo=dichotomous_line_search(xmin,d,lambda_max,1,ele,epsil);
Esquema
1 Explicacion del Metodo del Gradiente Reducido
2 Problema Ejemplo
3 Implementacion en Octave
4 Utilizacion de solver Programacion Lineal
5 Utilizacion de solver Busqueda en la Semirecta
6 Calculos Matriciales en Octave
7 Ejecucion
Calculo de Ik e I ck
i=1;
xmin_aux=xmin;
I_k=zeros(1,m);
if n-m>0
I_k_complemento=ones(1,n);
end
while(i<=m)
[val,index]=max(xmin_aux);
xmin_aux(index)=0;
I_k(i)=index;
if n-m>0
I_k_complemento(index)=0;
end
i=i+1;
end
if n-m>0
I_k_c=find(I_k_complemento);
end
Calculo de dT = (dTB , dT
N )
if n-m>0
d_n=zeros(1,length(I_k_c));
end
pp=1;
if n-m>0
for j=I_k_c
if r(j)<=0
d_n(pp)=-r(j);
else
d_n(pp)=-xmin(j)*r(j);
end
pp=pp+1;
end
end
if n-m>0
d_b=-inv(B)*N*(d_n’);
elseif n-m==0
d_b=-inv(B);
end
d=zeros(1,n);
d(I_k)=d_b;
if n-m>0
d(I_k_c)=d_n;
end
Calculo de λmax
lambda_max=lambda_max2(I_k,I_k_c,d_b,d_n,xmin);
#
function lambda_max = lambda_max2(I_k,I_k_c,d_b,d_n,xmin)
lambda_max=intmax;
t=0;
for i=1:length(d_b)
if d_b(i)<0
t=-xmin(I_k(i)) / d_b(i);
if t<=lambda_max
lambda_max=t;
end
end
end
if(length(d_n)>0)
for i=1:length(d_n)
if d_n(i)<0
t=-xmin(I_k_c(i)) / d_n(i);
if t<=lambda_max
lambda_max=t;
end
end
end
end
Esquema
1 Explicacion del Metodo del Gradiente Reducido
2 Problema Ejemplo
3 Implementacion en Octave
4 Utilizacion de solver Programacion Lineal
5 Utilizacion de solver Busqueda en la Semirecta
6 Calculos Matriciales en Octave
7 Ejecucion