Optimización para Ingenieros Ejercicios de PNL sin restricciones Métodos: Gradiente Conjugado, Descenso más Rápido, Newton y Quasi-Newton (rango uno, DFP y BFGS)
1. Considere el siguiente problema de PNL sin restricciones: Minimizar
a. Utilizando el origen como punto inicial, calcule las dos primeras direcciones, y los pasos correspondientes, obtenidos con el método del gradiente conjugado. Estas serán las direcciones D1 = (D1x, D1y, D1z) y D2 = (D2x, D2y, D2z) y los pasos 1 y 2: Para resolver el problema es necesario llevar la ecuación a la forma cuadrática para obtener la matriz A y el vector B. La forma cuadrática tiene el siguiente formato:
{ [ ] } ; entonces:
Cabe destacar que la dirección D1 y el vector r1 son iguales al vector b, ya que: ; donde x0 es el punto (0,0,0), por lo tanto:
El problema se resolvió utilizando el siguiente script de Matlab (Ej3A.m ( Ej3A.m): ): r1 = [-10;5;-20] A = [ 10 0 0 ; 0 20 0 ; 0 0 16] alfa = (r1'*r1)/(r1'*A*r1) x1 = alfa*r1 r2 = r1 - alfa*A*r1 beta2 = (r2'*r2)/(r1'*r1) (r2'*r2)/(r1'*r1) D2 = r2+(beta2*r1) r2+(beta2*r1) alfa2 = (r2'*r2)/(D2'*A*D2) (r2'*r2)/(D2'*A*D2) x2 = x1 + alfa2*D2
Los resultados obtenidos son los siguientes: r1 = -10 5 -20 A = 10 0 0 20 0 0 alfa = 0.0665 x1 = -0.6646 0.3323 -1.3291 r2 = -3.3544 -1.6456 1.2658 beta2 = 0.0296 D2 = -3.6509 -1.4974
0 0 16
0.6730 alfa2 = 0.0840 x2 = -0.9710 0.2066 -1.2726
b.
que minimizan la función f(x,y,z) donde las coordenadas x, y y z, resultan D1+ D2. Esta función función represent representa a cualquier cualquier combinació combinación n lineal de D1 y D2 y está definida como:
(
2
2
2
f ( f ( D1 + D2) = 5D1 x + 10D 10D1y + 8D1z
(5D2
2
x
2
2
y
z
+ 10D 10D2 + 8D2
)
2
+
10D1 (10D
x
)
2
+2
(5D1 D2 x
5D1y + 20D 20D1z
+ 10D 10D1
x
10D2 ) (10D +
y
x
D2y + 8D1z D2z
)
5D2y + 20D 20D2z
+
)
) = (0,0) (0,0) como punto inicial y cualquier método de optimización no lineal. El ejercicio se resolvió usando u sando el método Quasi-Newton de Broyden-Fletcher-Goldfarb-Shanno (BFGS) con el siguiente script de Matlab (Ej1b.m ( Ej1b.m): ): x0 = [0 0]; options = optimset('Display' optimset('Display', ,'iter' 'iter', ,'MaxIter' 'MaxIter',25, ,25,'TolFun' 'TolFun',1e-15, ,1e-15,'TolX' 'TolX', , 1e-4,... 1e-4,... 'LargeScale', 'LargeScale' , 'off' 'off', , 'HessUpdate' 'HessUpdate', , 'bfgs' 'bfgs'); ); [x,fval,exitflag,output] = fminunc(@f1,x0,options)
El listado de la función f1.m función f1.m es es el siguiente: function [f] function [f] = f1(x) D1 = [-10;5;-20]; [-10;5;-20]; D2 = [-3.6509;-1.4974;0.6730 [-3.6509;-1.4974;0.6730]; ]; f = (5*D1(1)^2+10*D1(2)^2+8*D1(3)^2)*x(1)^2+2*(5*D1(1)*D2(1)+10*D1(2)*D2(2)... + 8*D1(3)*D2(3))*x(1)*x(2)+(5*D2(1)^2 + 10*D2(2)^2 + 8*D2(3)^2)*x(2)^2 + ... (10*D1(1) - 5*D1(2) + 20*D1(3))*x(1)+ (10*D2(1) - 5*D2(2) + 20*D2(3))*x(2); end
Los resultados obtenidos son los siguientes: First-order Iteration
Func-count
f(x)
Step-size
optimality
0
3
0
1
9
-13.0453
0.000190476
265
2
12
-17.5038
1
14.8
3
18
-17.7471
10
11.3
4
21
-18.0969
1
3.72
5
24
-18.0978
1
0.364
6
27
-18.0979
1
0.00118
Local minimum possible.
525
fminunc stopped because the size of the current step is less than the selected value of the step size tolerance.
x = 0.0665
0.0840
fval = -18.0979 exitflag = 2 output = iterations: 6 funcCount: 27 stepsize: 1 firstorderopt: 0.0012 algorithm: 'medium-scale: Quasi-Newton line search' message: [1x419 char]
c. Compare los valores de
y con los tamaños de los dos pasos obtenidos en el apartado a ( 1 y
2). Establezca conclusiones al respecto. Los valores 1 y
2 obtenidos en la parte A (Pasos a seguir en las direcciones D1 y D2, respectivamente)
son iguales a los valores
y
(escalares que minimizan la función f(
) indicada en el punto b.).
Esto se debe a que la función f ( D1 + D2) es una combinación lineal de las dos primeras direcciones
del ejercicio resuelto en la parte A. Precisamente en esta combinación esta basado el método de gradiente conjugado, el cual garantiza que el punto mínimo obtenido en cada dirección es el mínimo del sub-espacio creado por esa dirección y las anteriores. Al ser la función f ( D1 + D2) una combinación lineal de las dos primeras direcciones, el mínimo valor de esa función debe coincidir con lo obtenido con el método de Descenso Conjugado en el punto a. 2. Considere el siguiente problema de optimización: Minimizar
∑
El mínimo global de esta función está ubicado en el punto x k* = 0, k = 1,2,...,10, con un valor funcional f(x*) = 0. a. Resuelva el problema utilizando los métodos Descenso más Rápido, Newton y Quasi-Newton (rango uno, DFP y BFGS). Utilice como punto inicial
,
y como
criterios de parada un máximo de 20 iteraciones y un cambio menor a 1x10 -6 en estimaciones sucesivas de x.
Solución por método Descenso más Rápido
Se llamó al método Descenso más Rápido con el siguiente script (Steepdesc.m) x0= [10 9 8 7 6 5 4 3 2 1]; options = optimset('Display','iter','MaxIter',20,'TolFun',1e-50,'TolX', 1e-6,... 'LargeScale', 'off', 'HessUpdate', 'steepdesc'); [x,fval,exitflag,output] = fminunc(@f1,x0,options)
Donde la función f1.m se define como: function [ fx ] = f1( x ) fx = x(1)^2 + 2*x(2)^2 + 3*x(3)^2 + 4*x(4)^2+ 5*x(5)^2 + 6*x(6)^2 + 7*x(7)^2 +... 8* x(8)^2 + 9*x(9)^2 + 10*x(10)^2; end
Los resultados obtenidos son los siguientes: First-order Iteration
Func-count
f(x)
Step-size
optimality
0
11
1210
1
22
884.938
0.0166667
50
2
44
185.426
0.1
21.1
3
66
79.3076
0.1
16.1
4
88
42.8774
0.1
13.3
5
110
26.2476
0.1
13.3
6
132
17.4827
0.1
13.3
7
154
12.4733
0.1
13.3
8
176
9.47152
0.1
13.3
9
198
7.62203
0.1
13.3
10
220
6.46385
0.1
13.3
11
253
1.36893
0.0519381
2.33
12
275
0.401431
0.333712
2.93
13
297
0.333438
0.1
2.93
14
330
0.0774966
0.0522947
0.554
15
352
0.0251936
0.316841
0.718
16
374
0.020668
0.1
0.718
17
407
0.00532007
0.0525483
0.145
18
429
0.00178099
0.312005
0.192
19
451
0.00145723
0.1
0.192
60
First-order Iteration
Func-count
f(x)
Step-size
optimality
20
484
0.000385354
0.0525558
0.0391
21
506
0.000129787
0.310796
0.0511
Solver stopped prematurely.
fminunc stopped because it exceeded the iteration limit, options.MaxIter = 20 (the selected value).
x =
Columns 1 through 7 0.0074
0.0000
0.0000
0.0000
-0.0000
0.0000
0.0000
Columns 8 through 10 0.0009
0.0005
0.0026
fval = 1.2979e-04
exitflag = 0
output = iterations: 21 funcCount: 506 stepsize: 0.3108 firstorderopt: 0.0511 algorithm: 'medium-scale: Quasi-Newton line search' message: [1x128 char]
Solución por método de Newton
Se llamó al método de Newton con el siguiente script (newton.m): x0= [10 9 8 7 6 5 4 3 2 1] ; x0 = x0'; [xopt,fopt,xs,H, menorEig, difHess,last] = quasi_newt(@f,x0,1e-6,20,'newton')
Donde la función f.m se define como: function [ fx,ga,h ] = f( x ) fx = x(1)^2 + 2*x(2)^2 + 3*x(3)^2 + 4*x(4)^2+ 5*x(5)^2 + 6*x(6)^2 + 7*x(7)^2 +... 8* x(8)^2 + 9*x(9)^2 + 10*x(10)^2; ga = [2*x(1) 4*x(2) 6*x(3) 8*x(4) 10*x(5) 12*x(6) 14*x(7) 16*x(8) 18*x(9) ... 20*x(10)]; ga = ga';
h =
[
2 0 0 0
0 4 0 0
0 0 6 0
0 0 0 8
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0;... 0;... 0;... 0;...
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
10 0 0 0 0 0
0 12 0 0 0 0
0 0 14 0 0 0
0 0 0 16 0 0
0 0 0 0 18 0
0;... 0;... 0;... 0;... 0;... 20];
end
Los resultados obtenidos son los siguientes: xopt =
0 0 0 0 0 0 0 0 0 0
fopt = 0
xs = 10
0
0
9
0
0
8
0
0
7
0
0
6
0
0
5
0
0
4
0
0
3
0
0
2
0
0
1
0
0
H = Columns 1 through 7
0.5000
0
0
0
0
0
0
0
0.2500
0
0
0
0
0
0
0
0.1667
0
0
0
0
0
0
0
0.1250
0
0
0
0
0
0
0
0.1000
0
0
0
0
0
0
0
0.0833
0
0
0
0
0
0
0
0.0714
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Columns 8 through 10 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0.0625
0
0
0
0.0556
0
0
0
0.0500
menorEig = 2
2
difHess = 0
0
last = 2
Solución por método de Quasi-Newton Rango Uno :
Se llamó al método de Rango Uno con el siguiente script (rangouno.m): x0= [10 9 8 7 6 5 4 3 2 1] ; x0 = x0'; [xopt,fopt,xs,H, menorEig, difHess,last] = quasi_newt(@f,x0,1e-6,20,'rango1')
La función f.m es igual a la utilizada en el método de Newton. Los resultados obtenidos son los siguientes: xopt = 1.0e-15 *
0.0193
0.6523 -0.1171 0.1874 0.3799 -0.0382 -0.0199 0.3877 -0.0190 0.2111
fopt = 3.4175e-30
xs = Columns 1 through 7
10.0000
8.1818
6.1441
4.1359
2.3977
1.1266
0.3962
9.0000
5.7273
2.7535
0.6294
-0.4401
-0.6295
-0.3865
8.0000
3.6364
0.5967
-0.6793
-0.6323
-0.1368
0.1408
7.0000
1.9091
-0.5575
-0.7343
-0.0726
0.2547
0.1200
6.0000
0.5455
-0.9406
-0.2637
0.3035
0.1395
-0.0909
5.0000
-0.4545
-0.7838
0.2198
0.2529
-0.1163
-0.0757
4.0000
-1.0909
-0.3186
0.4196
-0.0415
-0.1455
0.0686
3.0000
-1.3636
0.2238
0.2547
-0.2371
0.0513
0.0528
2.0000
-1.2727
0.6119
-0.1399
-0.0978
0.1399
-0.0859
1.0000
-0.8182
0.6144
-0.4136
0.2398
-0.1127
0.0396
Columns 8 through 12
H =
0.0949
0.0137
0.0009
0.0000
0.0000
-0.1364
-0.0266
-0.0022
0.0000
-0.0000
0.1214
0.0380
0.0045
-0.0000
0.0000
-0.0306
-0.0342
-0.0067
0.0000
-0.0000
-0.0505
0.0128
0.0075
0.0000
0.0000
0.0421
0.0106
-0.0063
-0.0000
0.0000
0.0175
-0.0195
0.0038
-0.0000
-0.0000
-0.0455
0.0142
-0.0017
0.0000
-0.0000
0.0303
-0.0059
0.0005
-0.0000
-0.0000
-0.0095
0.0014
-0.0001
0.0000
-0.0000
Columns 1 through 7
0.5000
0.0000
0.0000
0
-0.0000
-0.0000
-0.0000
0.0000
0.2500
0.0000
0.0000
-0.0000
-0.0000
-0.0000
0.0000
0.0000
0.1667
-0.0000
0.0000
0
-0.0000
0
0.0000
-0.0000
0.1250
-0.0000
-0.0000
0.0000
-0.0000
-0.0000
0.0000
-0.0000
0.1000
0.0000
0.0000
-0.0000
-0.0000
0
-0.0000
0.0000
0.0833
0.0000
-0.0000
-0.0000
-0.0000
0.0000
0.0000
0.0000
0.0714
-0.0000
-0.0000
-0.0000
0
-0.0000
0.0000
0.0000
-0.0000
-0.0000
0.0000
0.0000
0.0000
-0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
-0.0000
-0.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
2.0000
31.6571
29.0389
26.2579
23.3371
20.3016
9.3277
0.0000
Columns 8 through 10 -0.0000
-0.0000
0.0000
-0.0000
-0.0000
0.0000
-0.0000
0.0000
0.0000
0
0.0000
0.0000
-0.0000
0.0000
0.0000
0.0000
-0.0000
-0.0000
0.0000
0.0000
-0.0000
0.0625
0.0000
-0.0000
0.0000
0.0556
0.0000
-0.0000
0.0000
0.0500
menorEig = Columns 1 through 7 1.0000
1.0000
Columns 8 through 11 1.0000
1.0000
difHess = Columns 1 through 7 36.4692
34.1164
Columns 8 through 11 17.1152
last =
13.6000
11
Solución por método de Quasi-Newton Davidon –Fletcher –Powell (DFP):
Se llamó al método de DFP con el siguiente script (dfp.m): x0= [10 9 8 7 6 5 4 3 2 1] ; x0 = x0'; [xopt,fopt,xs,H, menorEig, difHess,last] = quasi_newt(@f,x0,1e-6,20,'dfp')
La función f.m es igual a la utilizada en el método de Newton. Los resultados obtenidos son los siguientes:
xopt = 1.0e-14 *
0.1837 0.0896 0.0265 -0.0069 -0.0031 0.0362 0.0667 0.0456 -0.0085 -0.0261
fopt = 1.1522e-29
xs = Columns 1 through 7 10.0000
8.1818
6.1441
4.1359
2.3977
1.1266
0.3962
9.0000
5.7273
2.7535
0.6294
-0.4401
-0.6295
-0.3865
8.0000
3.6364
0.5967
-0.6793
-0.6323
-0.1368
0.1408
7.0000
1.9091
-0.5575
-0.7343
-0.0726
0.2547
0.1200
6.0000
0.5455
-0.9406
-0.2637
0.3035
0.1395
-0.0909
5.0000
-0.4545
-0.7838
0.2198
0.2529
-0.1163
-0.0757
4.0000
-1.0909
-0.3186
0.4196
-0.0415
-0.1455
0.0686
3.0000
-1.3636
0.2238
0.2547
-0.2371
0.0513
0.0528
2.0000
-1.2727
0.6119
-0.1399
-0.0978
0.1399
-0.0859
1.0000
-0.8182
0.6144
-0.4136
0.2398
-0.1127
0.0396
Columns 8 through 12 0.0949
0.0137
0.0009
0.0000
-0.0000
-0.1364
-0.0266
-0.0022
0.0000
-0.0000
0.1214
0.0380
0.0045
0.0000
-0.0000
-0.0306
-0.0342
-0.0067
-0.0000
-0.0000
-0.0505
0.0128
0.0075
-0.0000
-0.0000
0.0421
0.0106
-0.0063
0.0000
0.0000
0.0175
-0.0195
0.0038
0.0000
0.0000
-0.0455
0.0142
-0.0017
0.0000
-0.0000
0.0303
-0.0059
0.0005
-0.0000
-0.0000
-0.0095
0.0014
-0.0001
-0.0000
-0.0000
H = Columns 1 through 7 0.5000
-0.0000
-0.0000
0
0.0000
0.0000
-0.0000
0.0000
0.2500
-0.0000
0.0000
0.0000
-0.0000
-0.0000
-0.0000
-0.0000
0.1667
-0.0000
0.0000
0.0000
0
-0.0000
0.0000
0
0.1250
-0.0000
0.0000
0
0
0.0000
0
0
0.1000
0
0.0000
0.0000
0.0000
0
0.0000
0.0000
0.0833
-0.0000
-0.0000
0.0000
-0.0000
0.0000
0.0000
-0.0000
0.0714
-0.0000
0.0000
-0.0000
0.0000
0.0000
-0.0000
0.0000
0.0000
-0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
-0.0000
0.0000
0.0000
0.0000
0.0000
Columns 8 through 10 -0.0000
-0.0000
-0.0000
0.0000
-0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
-0.0000
0
0.0000
0.0000
-0.0000
0.0000
0.0000
-0.0000
-0.0000
-0.0000
0.0625
-0.0000
-0.0000
0.0000
0.0556
-0.0000
-0.0000
0.0000
0.0500
menorEig = Columns 1 through 7
1.0000
0.9878
0.9674
0.9401
0.9875
2.0000
31.6675
29.0614
9.3415
0.0000
0.9103
0.8883
0.8882
26.2994
23.4015
20.3784
Columns 8 through 11 0.9167
0.9586
difHess = Columns 1 through 7 36.4692
34.1199
Columns 8 through 11 17.1779
13.6342
last = 11
Solución por método de Quasi-Newton Broyden-Fletcher-Goldfarb-Shanno (BFGS):
Se llamó al método de bfgs con el siguiente script (bfgs.m): x0= [10 9 8 7 6 5 4 3 2 1] ; x0 = x0'; [xopt,fopt,xs,H, menorEig, difHess,last] = quasi_newt(@f,x0,1e-6,20,'dfp')
La función f.m es igual a la utilizada en el método de Newton. Los resultados obtenidos son los siguientes:
xopt = 1.0e-15 *
0.3245 0.0256 0.0147 0.0746 0.1119 0.1900 0.2724 0.2151 0.0261 -0.0390
fopt = 1.3193e-30
xs = Columns 1 through 7
10.0000
8.1818
6.1441
4.1359
2.3977
1.1266
0.3962
9.0000
5.7273
2.7535
0.6294
-0.4401
-0.6295
-0.3865
8.0000
3.6364
0.5967
-0.6793
-0.6323
-0.1368
0.1408
7.0000
1.9091
-0.5575
-0.7343
-0.0726
0.2547
0.1200
6.0000
0.5455
-0.9406
-0.2637
0.3035
0.1395
-0.0909
5.0000
-0.4545
-0.7838
0.2198
0.2529
-0.1163
-0.0757
4.0000
-1.0909
-0.3186
0.4196
-0.0415
-0.1455
0.0686
3.0000
-1.3636
0.2238
0.2547
-0.2371
0.0513
0.0528
2.0000
-1.2727
0.6119
-0.1399
-0.0978
0.1399
-0.0859
1.0000
-0.8182
0.6144
-0.4136
0.2398
-0.1127
0.0396
Columns 8 through 12 0.0949
0.0137
0.0009
0.0000
0.0000
-0.1364
-0.0266
-0.0022
0.0000
-0.0000
0.1214
0.0380
0.0045
0.0000
-0.0000
-0.0306
-0.0342
-0.0067
0.0000
-0.0000
-0.0505
0.0128
0.0075
0.0000
-0.0000
0.0421
0.0106
-0.0063
0.0000
-0.0000
0.0175
-0.0195
0.0038
0.0000
0.0000
-0.0455
0.0142
-0.0017
0.0000
0.0000
0.0303
-0.0059
0.0005
0.0000
-0.0000
-0.0095
0.0014
-0.0001
-0.0000
-0.0000
H = Columns 1 through 7 0.5000
0.0000
-0.0000
-0.0000
0.0000
0.0000
-0.0000
0.0000
0.2500
-0.0000
0.0000
0.0000
-0.0000
0.0000
-0.0000
-0.0000
0.1667
0.0000
0.0000
0.0000
0
-0.0000
0.0000
0.0000
0.1250
0.0000
-0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.1000
0.0000
0
0.0000
0.0000
0.0000
0.0000
0
0.0833
0.0000
-0.0000
0.0000
0
0.0000
0.0000
0
0.0714
-0.0000
-0.0000
0
-0.0000
0.0000
0.0000
0.0000
-0.0000
-0.0000
0.0000
0.0000
-0.0000
-0.0000
0.0000
-0.0000
-0.0000
-0.0000
-0.0000
0.0000
0.0000
0.0000
Columns 8 through 10 -0.0000
-0.0000
-0.0000
0.0000
-0.0000
-0.0000
0
0.0000
0.0000
0
0.0000
0.0000
0.0000
-0.0000
-0.0000
0.0000
-0.0000
-0.0000
0.0000
-0.0000
-0.0000
0.0625
0.0000
-0.0000
0.0000
0.0556
-0.0000
-0.0000
-0.0000
0.0500
menorEig = Columns 1 through 7 1.0000
0.8659
0.7540
0.6677
0.9235
2.0000
31.7363
29.1647
9.4119
0.0000
0.6123
0.5969
0.6314
26.4364
23.5645
20.5466
Columns 8 through 11 0.7149
0.8241
difHess = Columns 1 through 7 36.4692
34.1548
Columns 8 through 11 17.3246
last = 11
13.7443
b. Para cada método, grafique los cambios que se obtienen en el error
‖ ‖
como función
del número de iteraciones (abscisa). Analice los resultados obtenidos.
Gráfica 1 Norma Euclídea vs. Iteraciones
En la Gráfica 1 se puede observar las diferencias en la convergencia de los métodos. El método de Newton obtiene la solución óptima en 2 iteraciones, mientras que todos los métodos de Quasi-Newton la obtienen en once (11) iteraciones. Al método de Descenso Más Rápido le tomó 22 iteraciones, sin embargo, el criterio de parada alcanzado fue el de máximas iteraciones y no la tolerancia deseada para el cambio del valor de x . “
”
Cabe destacar que la norma Euclídea calculada para cada iteración en los métodos de Quasi-Newton es igual, a pesar de que los valores de x sean diferentes para cada método a lo largo de las iteraciones. “
”
c. Para cada uno de los métodos Quasi-Newton: i.
Elabore una gráfica que muestre el menor valor propio de la aproximación del Hessiano vs. la cantidad de iteraciones realizadas a lo largo del proceso de optimización (abscisa). Utilice esta gráfica para establecer conclusiones acerca de la positividad de la aproximación al Hessiano
Gráfica 2 Menor valor propio de la aproximación del Hessiano vs. Iteraciones
En la Gráfica 2 se muestra el comportamiento del menor valor propio de la aproximación de la Matriz Hessiana a lo largo de las iteraciones del problema. Los métodos de Quasi-Newton requieren que el Hessiano sea definido positivo y como se muestra en la gráfica, todos los métodos cumplen con esta condición, sin embargo el método BFGS es el que se acerca más a un valor negativo al tener un valor propio que desciende en las primeras iteraciones, alejándose del valor real.
ii.
comando norm de Matlab). Analice los resultados
Gráfica 3 Norma de Frobenius Vs. Cantidad de Iteraciones
En la gráfica 3, se puede observar que todos los métodos de Quasi-Newton utilizados en esta caso, tienen un comportamiento similar al comparar las norma de Frobenius de la diferencia de la aproximación del Hessiano y su valor real a lo largo de las iteraciones realizadas. Todas comienzan en un valor cercano a 36.4692 y tienen diferencias apenas apreciables en algunas iteraciones. Otro detalle importante es que en todos los métodos se consigue una norma de Frobenius igual a cero (0) en la última iteración, lo que quiere decir que se alcanza una muy buena aproximación del Hessiano calculado en cada método con el Hessiano real.
d. Compare el desempeño final de los distintos métodos en función de: i.
Número de iteraciones
ii.
Exactitud de las soluciones encontradas (tanto en el valor de x como en el de f(x))
iii.
Aproximación del Hessiano (donde aplique)
Método
Descenso más Rápido Newton RANGO 1 DFP BFGS
Número de Iteraciones
21* 2 11 11 11
Exactitud de la solución** Valor de (x) -3 1x10 0 -16 1x10 -15 1x10 -16 1x10
Valor de f(x) -4 1x10 0 -30 1x10 -29 1x10 -30 1x10
Aproximación del Hessiano***
0 0 0
* El criterio de parada encontrado es el de máximas iteraciones y no el de tolerancia en el cambio del valor de x. ** Los valores mostrados son representativos e indican el valor decimal donde se obtiene la mayor diferencia entre el valor calculado (tanto de x como de f(x)) y el valor de óptimo (tanto de x como de f(x)). *** Valor de la norma de Frobenius de la diferencia entre la aproximación del Hessiano y su valor real en el punto final Tabla 1 Resumen de la comparación de los métodos utilizados
En la tabla 1 se resume la comparación de los métodos utilizados. En todos los casos, el mejor método resulta ser el método de Newton, esto era de esperarse ya que para funciones cuadráticas la aproximación es exacta y el método converge en un solo paso. Le siguen todos los métodos de Quasi-Newton, en los cuales la aproximación del valor de x y de f(x) son despreciables y en todos, la aproximación del Hessiano en la última iteración es igual (o muy cercana) al Hessiano real. Finalmente, el método de Descenso más Rápido es el que tiene el peor desempeño, sin embargo el valor de f(x) tiene una diferencia con el valor óptimo en el cuarto valor decimal, lo cual es despreciable en aplicaciones reales de ingeniería. El punto débil de este método es la cantidad de iteraciones, ya que en problemas mas complejos, el costo computacional asociado a cada iteración puede llegar a ser alto, lo cual hace a este método poco llamativo.
3. Los gastos anuales de operación de un compresor de gas en una tubería transcontinental están dados por:
Siendo:
C = costos de operación, $/año Q = cantidad de gas bombeado, pie3/día L = distancia entre estaciones de compresión, millas P1 = presión de descarga, psia P2 = presión de succión, psia D = diámetro de la línea, pulgadas K1,K2,Z,S,b = constantes Además,
( )
Determine los valores de P 1 y P2 que minimicen C para los siguientes valores de los parámetros: i.
Z = 1, K = 1370, L = 20, b = 1,476, K 1 = 0,081, s = 100, K 2 = 1,13
El ejercicio planteado corresponde a un problema de optimización no lineal con restricciones, en vista de que la presión de descarga debe ser mayor que la presión de succión y ninguna de éstas puede ser menor que cero. Cabe resaltar que el resultado de este problema dependerá del punto inicial seleccionado, pero en todos los casos los valores de las variables de diseño (presiones) que minimizan la función
(costos) deben ser iguales. En este caso particular, se seleccionará presiones de descarga y succión 6
2
iguales a 1x10 psia y 1x10 psia, respectivamente.
Solución del Problema de Optimización No Lineal Con Restricciones
Se llamó a la función de Matlab (fmincon) con el siguiente script (fmincon1.m) % Optimización No Lineal Con Restricciones clear all % Punto inicial x0 = [1e6 1e2]; % Número máximo de iteraciones iter = 13; % Opciones de optimización options = optimset('Algorithm','interior-point','Display','iter',... 'MaxIter',iter,'OutputFcn','output'); % Restricciones lineales de desigualdad A = [-1 1]; b = [0]; % Límites inferiores de las variables de diseño lb = [0 0]; % Rutina de optimizacion global xs; [x,fval,exitflag,output] = fmincon(@(x) myfun(x),x0,A,b,[],[],lb,... [],[],options)
Donde la función f1.m se define como: function f = myfun(x) % Datos % % % % % % %
C: Costos de operacion, dolares/año Q: Cantidad de gas bombeado, pie3/dia L: Distancia entre estaciones de compresion, millas P1: Presion de descarga, psia P2: Presion de succion, psia D: Diametro de la linea, pulgadas D, L, K, K1, K2, Z, s, b: constantes
D = 60; L = 20; K = 1370; K1 = 0.081;
K2 = 1.13;
Z = 1;
s = 100; b = 1.476;
P1 = x(1); P2 = x(2); Q=K2*((D^2.6*(P1^2-P2^2)^0.54)/(L^0.54*Z^0.54)); f=((K*Q*Z)/(1e6*L))*(log(P1/P2)+b)+K1*D^2*((P1/(2*(s-P1)))+(P1^2/(4*(s+P1)^2)));
Los resultados obtenidos son los siguientes: Iter F-count 0 3 1 6 2 9 3 12 4 15 5 18 6 21 7 24 8 27
f(x) 2.080815e+07 1.053295e+07 1.052280e+07 1.047304e+07 1.024643e+07 9.460806e+06 8.393045e+06 7.391938e+06 6.278012e+06
Feasibility 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
First-order optimality 1.947e+04 9.969e+01 9.918e+01 9.673e+01 8.631e+01 5.830e+01 3.454e+01 2.156e+01 1.329e+01
Norm of step 1.945e+04 1.011e+02 5.030e+02 2.454e+03 1.097e+04 2.342e+04 3.541e+04 6.213e+04
9 10 11 12 13
30 33 36 39 42
5.029148e+06 3.390922e+06 1.490163e+05 8.445207e+03 4.143546e+02
0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
8.459e+00 6.647e+00 3.411e+01 3.901e+02 2.402e+02
1.080e+05 2.089e+05 4.168e+05 2.084e+03 9.118e+00
Solver stopped prematurely. fmincon stopped because it exceeded the iteration limit, options.MaxIter = 13 (the selected value).
x = 1.0e+05 * 8.8239
8.8239
fval = 414.3546
exitflag = 0 output = iterations: funcCount: constrviolation: stepsize: algorithm: firstorderopt: cgiterations: message:
ii.
13 42 0 9.1184 'interior-point' 240.2355 2 [1x128 char]
El 50% de los valores listados en el apartado i
Los resultados obtenidos con Matlab son los siguientes: Iter F-count 0 3 1 6 2 9 3 12 4 15 5 18 6 21 7 24 8 27 9 30 10 33 11 36 12 39 13 42 14 45 15 48 16 51 17 54
f(x) 1.688608e+06 1.198402e+06 1.189201e+06 1.151333e+06 1.051538e+06 9.764386e+05 8.920136e+05 8.110291e+05 7.284383e+05 6.458709e+05 5.620683e+05 4.761744e+05 3.856947e+05 2.856706e+05 1.653096e+05 6.274735e+03 3.495709e+02 1.140447e+01
Feasibility 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
First-order optimality 1.697e+03 9.443e+01 8.945e+01 7.155e+01 3.971e+01 2.549e+01 1.548e+01 9.588e+00 5.880e+00 3.608e+00 2.204e+00 1.341e+00 8.124e-01 4.904e-01 2.973e-01 1.621e+00 1.941e+01 2.213e+02
Solver stopped prematurely. fmincon stopped because it exceeded the iteration limit, options.MaxIter = 17 (the selected value).
x = 1.0e+05 * 9.8241 fval = 11.4045
exitflag = 0
9.8241
Norm of step 1.696e+03 1.000e+02 4.737e+02 1.895e+03 2.371e+03 4.269e+03 6.648e+03 1.094e+04 1.767e+04 2.889e+04 4.750e+04 7.955e+04 1.376e+05 2.524e+05 3.885e+05 1.943e+03 9.713e+00
output = iterations: funcCount: constrviolation: stepsize: algorithm: firstorderopt: cgiterations: message:
17 54 0 9.7129 'interior-point' 221.3487 0 [1x128 char]