Академический Документы
Профессиональный Документы
Культура Документы
Introducción
1. Convexidad y concavidad
2. Sistemas multivariables
min f ( x1 , x2 ,..., xn )
sujeta a
h j ( x1 , x 2 ,..., x n ) = 0 j = 1,2,..., m
g k ( x1 , x2 ,..., xn ) = 0 k = 1,2,..., p
m p
L( xi , u j , v k ) = f ( xi ) + ∑ h j ( xi )u j + ∑ g k ( xi )v k
j =1 k =1
* * * *
∇L( xi , u j , v k ) = ∇f ( xi ) + ∇h( xi )u + ∇g ( xi )v = 0
* * *
g k ( x1 , x 2 ,..., x n ) ≤ 0 k = 1,2,..., p
* * *
h j ( x1 , x2 ,..., xn ) = 0 j = 1,2,..., m de factibilidad
* * *
u k g k ( x1 , x 2 ,..., x n ) = 0 k = 1,2,..., p
complementarias
* * *
Z T H ( x1 , x 2 ,..., x n ) Z > 0 para todos los vectores
Estructura en Matlab
Ejemplo [ fminvar.m ]
3 9 2
Calcular min f(x) = x - x +6 x+20 con 0 ≤ x ≤ 2
2
min f ( x1 , x 2 ,..., x n )
Estructura en Matlab
[x,fval,exitflag,output,grad,hessian] =
fminunc( fun,x0,options )
min f ( x1 , x 2 ,..., x n )
sujeta a
Ax ≤ b
Aeq x = beq restricciones lineales
Cx ≤ 0
C eq x = 0 restricciones no lineales
Estructura en Matlab
[x,fval,exitflag,output,lambda,grad] =
fmincon( f,x0,A,b,Aeq,beq,xlb,xub,nonlcon,options )
Ejemplo 1 [ehlp8_26.m & p8_26.m]
g1(x) = 2 x1 + x2 ≤ 5
g2(x) = x1 + x3 ≤ 2
g3(x) = x1 + 2 x2 + x3 ≤ 10
h1(x) = 2 x1 - 2 x2 + x3 = -2
h2(x) = 10 x1 + 8 x2 - 14x3 = 26
h3(x) = -4 x1 + 5 x2 - 6 x3 = 6
x1 ≥ 1 x2 ≥ 2 x3 ≥ 0
h = x12 + x22 + x1 + x2 = 0
g = -x1 + x22 ≥ 0
con x0=[-1 -1 ]
3. Minimización de una función cuadrática
1 T
min ( x1 , x 2 ,..., x n ) T [ M ]( x1 , x 2 ,..., x n ) + d ( x1 , x 2 ,..., x n )
2
sujeta a
Ax ≤ b
Aeq x = b eq
xlb ≤ x ≤ xub
Estructura en Matlab
[x,fval,exitflag,output,lambda] =
quadprog( M,d,A,b,Aeq,beq,xlb,xub,x0,options )
Ejemplo 1 [qpehlp8_26.m]
g1(x) = 2 x1 + x2 ≤ 5
g2(x) = x1 + x3 ≤ 2
g3(x) = x1 + 2 x2 + x3 ≤ 10
h1(x) = 2 x1 - 2 x2 + x3 = -2
h2(x) = 10 x1 + 8 x2 - 14x3 = 26
h3(x) = -4 x1 + 5 x2 - 6 x3 = 6
x1 ≥ 1 x2 ≥ 2 x3 ≥ 0
2 0 0 0 2 1 0 5
M = 0 2 0 d = 0 A = 1 0 1 b = 2
0 0 2 0 1 2 1 10
2 −2 1 − 2 1
Aeq = 10 8 − 14 beq = 26 x lb = 2
− 4 5 − 6 6 0
4. Minimización del problema de programación lineal
T
min c ( x1 , x 2 ,..., x n )
sujeta a
Ax ≤ b
Aeq x = beq
Estructura en Matlab
[x,fval,exitflag,output,lambda] =
linprog( f,a,b,aeq,beq,lb,ub,x0,options )
Ejemplo 1 [ liprogv102_2.m ]
min f(x) = x1 + x2 + x3
g1(x) = 2 x1 + x2 ≤ 5
g2(x) = x1 + x3 ≤ 2
g3(x) = x1 + 2 x2 + x3 ≤ 10
h1(x) = 2 x1 - 2 x2 + x3 = -2
h2(x) = 10 x1 + 8 x2 - 14x3 = 26
h3(x) = -4 x1 + 5 x2 - 6 x3 = 6
x1 ≥ 1 x2 ≥ 2 x3 ≥ 0
5. Mínimos cuadrados no lineales
p 2
min ∑ [ f k ( x1 , x 2 ,..., x n )]
k =1
sujeta a
xlb ≤ x ≤ xub
Estructura en Matlab
[x,resnorm,residual,exitflag,output,lambda,jacobian] =
lsqnonlin( fun,x0,lb,ub,options )
Ejemplo 1 [fminquad.m & xyquad.m]
Xi 10 20 30 40 50
Yi 1.0 1.26 1.86 3.31 7.08
Para el modelo
Y = ea1 + a2 x + a3 x 2
Códigos en MATLAB
1. fminvar.m [regresar]
% inicio del archivo fminvar.m
%
% problema 3.1 Ray & szekely (1973)
% process optimization with applications in
% metallurgy and chemical engineering, john wiley
% min x^3-9/2*x^2+6*x+20 en el intervalo
% 0 <= x <= 2
%
clc; clear all; format compact;
x1 = 0; % limite inferior
x2 = 2; % limite superior
f = inline('x^3-9/2*x^2+6*x+20'); %expresion de la funcion objetivo
%[x,fval,exitflag,output]= fminbnd (f,x1,x2,options)
options=optimset('Display','iter');
%
% fin del archivo fminvar.m
2. prosenbrock.m [regresar]
% inico del archivo prosenbrock.m
% Problema de Rosenbrock
% f(x1,x2)= 100*(x2-x1^2)^2+(1-x1)^2;
% con la solucion siguiente
%
% X = 0.99999562761312 0.99999125498266 es el punto critico
% fmin = 1.911777389766082e-011 es la funcion evaluada en el punto critico
% FLAG = 1 **** el metodo convergio correctamente ****
% -------------------------------------------------------------------
fprintf('-------------------------------------------------------------------\n')
fprintf(' METODOS PARA APROXIMAR LA MATRIZ HESSIANA\n')
fprintf('-------------------------------------------------------------------\n\n')
fprintf(' 1. Metodo del paso descendente \n')
fprintf(' 2. Metodo BFGS - Broyden, Fletcher, Goldfarb & Shanno - \n')
fprintf(' 3. Metodo DFP - Davidon, Fletcher & Powell - \n')
fprintf(' 4. Metodo Gill-Murray \n\n')
switch metodo
case 1
options=optimset('LargeScale','off','Display','iter','HessUpdate','steepdesc');
case 2
options=optimset('LargeScale','off','Display','iter','HessUpdate','dfp');
case 3
options=optimset('LargeScale','off','Display','iter','HessUpdate','dfp');
case 4
options=optimset('LargeScale','off','Display','iter','HessUpdate','gillmurray');
otherwise,
fprintf(' ----- NO selecciono algun metodo !!!! ----- \n')
options=optimset('LargeScale','off','Display','iter');
end
[x,fmin,flag,output,grad,hessiana]=FMINUNC('rosenbrock',x0,options)
% matriz hessiana
valores_propios=eig(hessiana)
if(flag~=1)
fprintf(' --- no convergio ---\n')
else
fprintf(' --- si convergio ---\n')
end
3. rosenbrock.m [regresar]
% inicio del archivo rosenbrock.m
% rutina de declaracion de la funcion objetivo
% para el problema de rosenbrock
function f=rosenbrock(x)
x1=x(1); x2=x(2);
f = 100*(x2-x1^2)^2+(1-x1)^2;
% fin del archivo rosenbrock.m
4. ehlp8_26.m [regresar]
% inicio del archivo ehlp8_26.m
% codigo para calcular el minimo de una funcion
% con restricciones correspondiente al problema
% 8.26 del libro de Edgar, Himmelblau & Lasdon (2001)
% optimization of chemical processes
%
% min f(x) = x1^2 + x2^2 + x3^2
% sujeta a las restricciones siguientes
% g1(x) = 2 x1 + x2 <= 5
% g2(x) = x1 + x3 <= 2
% g3(X) = x1 + 2x2 + x3 <= 10
% h1(x) = 2 x1 - 2x2 + x3 = -2
% h2(x) = 10 x1 + 8x2 - 14x3 = 26
% h3(x) = -4x1 + 5x2 - 6x3 = 6
% x1 >= 1 x2 >= 2 x3 >= 0
% con un estimado inicial de
% x0=[1 1 1]
options=optimset('LargeScale','off','Display','iter');
%[x,fval,exitflag,output,lambda,grad] =fmincon(fun,x0,a,b,aeq,beq,lb,ub,nonlcon,options)
% -------------------------------------------------------------------------
[x,fmin,flag,output,lambda,dfdxi,d2fdxi2]=fmincon('p8_26',x0,A,B,Aeq,Beq,Lb,[],[],options)
% -------------------------------------------------------------------------
% despliegue de resultados
fprintf(' -------------------------------------------------------------------------\n')
fprintf(' ------------------ despliegue de resultados -------------------------\n')
fprintf(' -------------------------------------------------------------------------\n')
fprintf('x1 = %10.4f\n',x1)
fprintf('x2 = %10.4f\n',x2)
fprintf('x3 = %10.4f\n',x3)
fprintf('fmin = %10.4f\n',fmin)
fprintf('Valores propios de la Hessiana = %f\n',lambda_mu)
5. p8_26[regresar]
% inicio del archivo p8_26.m
% evalucion de la funcion objetivo para
% el problema 8.26 del libro de himmelblau
% -------------------------------------------------------------------------
function f = p8_26 (x)
% -------------------------------------------------------------------------
x1 = x(1); x2 = x(2); x3 = x(3);
6. ehlp_812.m [regresar]
% inicio del archivo ehlp_812.m
%
% problema 8.12 del libro de Edgar, Himmelblau & Lasdon
% min f=(x1-1)^2+x2^2
% sujeto a las restricciones
% h=x1^2+x2^2+x1+x2=0
% g=-x1+x2^2>=0
options=optimset('LargeScale','off','Display','iter');
%[x,fval,exitflag,output,lambda,grad] =fmincon(fun,x0,a,b,aeq,beq,lb,ub,nonlcon,options)
[x,fmin,flag,output,lambda,grad] =fmincon('f_p812',x0,a,b,aeq,beq,lb,ub,'resp_812',options)
%
% fin del archivo ehlp_812.m
7. f_p812.m[regresar]
% inicio del archivo f_p812.m
% funcion para la evaluacion de la funcion objetivo
% del problema 8.12 del libro de Edgar, Himmelblau & Lasdon
% -------------------------------------------------------------------------
function f=f_p812(x)
% -------------------------------------------------------------------------
x1 = x(1); x2 = x(2); % reasignacion de variables
8. qpehlp8_26.m[regresar]
% inicio del archivo qpehlp8_26.m
% codigo para calcular el minimo de una funcion
% con restricciones correspondiente al problema
% 8.26 del libro de Edgar, Himmelblau & Lasdon (2001)
% optimization of chemical processes
%
% min f(x) = x1^2 + x2^2 + x3^2
% sujeta a las restricciones siguientes
% g1(x) = 2 x1 + x2 <= 5
% g2(x) = x1 + x3 <= 2
% g3(X) = x1 + 2x2 + x3 <= 10
% h1(x) = 2 x1 - 2x2 + x3 = -2
% h2(x) = 10 x1 + 8x2 - 14x3 = 26
% h3(x) = -4x1 + 5x2 - 6x3 = 6
% x1 >= 1 x2 >= 2 x3 >= 0
% con un estimado inicial de
% x0=[1 1 1]
options=optimset('LargeScale','off','Display','iter');
%[x,fval,exitflag,output,lambda]= quadprog(M,d,A,b,Aeq,beq,xlb,xub,x0,options)
% -------------------------------------------------------------------------
[x,fmin,flag,output,lambda]= quadprog(M,d,A,b,Aeq,beq,xlb,xub,x0,options)
% -------------------------------------------------------------------------
% despliegue de resultados
fprintf(' -------------------------------------------------------------------------\n')
fprintf(' ------------------ despliegue de resultados -------------------------\n')
fprintf(' -------------------------------------------------------------------------\n')
fprintf('x1 = %10.4f\n',x1)
fprintf('x2 = %10.4f\n',x2)
fprintf('x3 = %10.4f\n',x3)
fprintf('fmin = %10.4f\n',fmin)
% fin del archivo qpehlp8_26.m
9. liprogv102_2.m[regresar]
% inicio del archivo liprogv102_2.m
% codigo para calcular el maximo de una funcion
% con restricciones correspondiente al problema
% 10.2.1 del libro de Venkataraman (2001)
% Applied Optimization with MATLAB Programming
% min f(x) = x1 + x2 + x3
%
% sujeta a las restricciones siguientes
%
% g1(x) = 2 x1 + x2 <= 5
% g2(x) = x1 + x3 <= 2
% g3(x) = x1 + 2 x2 + x3 <= 10
%
% h1(x) = 2 x1 - 2 x2 + x3 = -2
% h2(x) = 10 x1 + 8 x2 - 14x3 = 26
% h3(x) = -4 x1 + 5 x2 - 6 x3 = 6
%
% x1 >= 1 x2 >= 2 x3 >= 0
options=optimset('LargeScale','off','Display','iter');
%[x,fval,exitflag,output,lambda]= linprog(f,a,b,aeq,beq,lb,ub,x0,options)
% -------------------------------------------------------------------------
[x,Zmin,flag,output,lambda]= linprog(Z,A,b,Aeq,beq,xlb,xub,x0,options)
% -------------------------------------------------------------------------
% despliegue de resultados
fprintf(' -------------------------------------------------------------------------\n')
fprintf(' ------------------ despliegue de resultados -------------------------\n')
fprintf(' -------------------------------------------------------------------------\n')
fprintf('x1 = %10.4f\n',x1)
fprintf('x2 = %10.4f\n',x2)
fprintf('x3 = %10.4f\n',x3)
fprintf('fmin = %10.4f\n',Zmin)
10. fminquad.m[regresar]
% inicio del archivo fminquad.m
%
% codigo para calcular los coeficientes de una funcion
% por el metodo de minimos cuadrados
% 2.8 del libro de Edgar, Himmelblau & Lasdon (2001)
% optimization of chemical processes
%
function fminquad
clc; clear all; format compact;
global xi yi
xi=[10 20 30 40 50];
yi=[1.0 1.26 1.86 3.31 7.08];
x0=[0.1 0 0];
xlb=[];
xub=[];
options=optimset('LargeScale','off','Display','iter');
%[x,resnorm,residual,exitflag,output,lambda,jacobian]= lsqnonlin(fun,x0,lb,ub,options)
[x,funx2,fun,flag,output,lambda,jacobian]= lsqnonlin(@xyquad2,x0,xlb,xub,options)
yi_mod=exp(c0+c1*xi+c2*xi.^2);
figure(1), plot(xi,yi,'o',xi,yi_mod,'--')
xlabel('xi'),ylabel('yi,yimodelo')
legend('Yi_{exp}','Yi_{mod}'),title('yi_{exp} yi_ {mod} vs xi')
figure(2),plot(yi,yi_mod,'--')
xlabel('yi_{exp}'),ylabel('yi_{mod}')
%
% fin del archivo fminquad.m
yi_mod=exp(c0+c1*xi+c2*xi.^2);
fi2=yi-yi_mod;
% fin del archivo xyquad.m
11. xyquad.m[regresar]
% inicio del archivo xyquad.m
% codigo para calcular los coeficientes de una funcion
% por el metodo de minimos cuadrados
% 2.8 del libro de Edgar, Himmelblau & Lasdon (2001)
% optimization of chemical processes
%
function fi2=xyquad(x)
global yi xi
c0=x(1); c1=x(2); c2=x(3);
yi_mod=exp(c0+c1*xi+c2*xi.^2);
fi2=yi-yi_mod;
% fin del archivo xyquad.m