• No se han encontrado resultados

3. Precondicionador separador en un método de puntos interiores

3.4. Cálculo de una base para el sistema aumentado

El precondicionador separador para el sistema aumentado precondicionado es obtenido a partir de una partición de la matriz fundamental A en componentes básicas y no básicas. Esta partición o cálculo de una base, puede ser hecha usando la factorización LU, según Por…rio Suñagua [17].

Uno de los métodos clásicos para encontrar una base es la factorizaciónLU, pero ejemplos teóricos muestran que, éste método no es numéricamente estable.

Sean L y U matrices de la factorización LU sin pivoteamiento parcial para una matriz

A, entonces tenemos A=LU. Sin embargo, computacionalmente el proceso de eliminación gaussiana puede retornar L+E y U+F, donde las matrices E y F representan errores de redondeo numéricos, así tenemos

e

A= (L+E)(U+F) =LU+LF+EU+EF=A+LF+EU+EF:

El termino EF es pequeño y por tanto puede ser despreciado. Por otro lado, las entradas de las matrices L y U pueden ser relativamente mayores que las de A y entonces las matrices

LF y EU pueden contener entradas numéricamente signi…cativas, propagando el error de redondeo. Haciendo la factorizaciónLU con pivoteamiento parcial, la matrizLes controlada con entradas menores e iguales a uno y por tanto la matrizLFserá pequeña. Y para controlar las entradas de la matrizUpodemos usar factorizaciónLUcon pivoteamiento completo, con

lo que EU será pequeño y en consecuencia

PAQe PAQ

donde P y Q son matrices de permutación que no alteran las normas de esas matrices. Por tanto la eliminación gaussiana con pivoteamiento completo es numéricamente estable. Sin embargo para matrices grandes es muy caro computacionalmente ya que en cada iteración es necesario calcular el mejor pivote entre todas las líneas y todas las columnas de la matriz activa.

La propuesta de Por…rio Suñagua [17], es aplicar la factorización LU con pivoteamiento parcial con tolerancia, a la matrizD A : Esta propuesta es comparada con el abordaje de Oliveira y Sorensen [32], que propone preordenar las columnas de la matriz A y aplicar la factorización LU. Los resultados de Por…rio Suñagua [17], sugieren que su propuesta mejora el número de condición del sistema aumentado.

Por otro lado, en el método de puntos interiores, el paso más caro computacional- mente consiste en resolver las ecuaciones normales o el sistema aumentado, para dimen- siones menores basta resolver las ecuaciones normales por la factorización de Cholesky. Para problemas de gran tamaño, es necesario precondicionar el sistema lineal y resolverlo usando métodos iterativos.

En las primeras iteraciones del método de puntos interiores, la matriz de las ecuaciones normales no estan, tan mal condicionadas y podemos precondiconarla usando la factorización controlada de Cholesky. Después de una cantidadpmiteraciones se propone abandonar esta fase.

Después de esto, sino hemos alcanzado el valor óptimo, cambiamos de estrategia para re- solver el sistema aumentado con el precondicionador separador, esto es resolver las ecuaciones normales usando el precondicionador C- =D- B- por medio del método de gradientes

conjugados precondicionado.

A continuación ejecutaremos los programas establecidos para el método predictor-corrector para ecuaciones normales precondicionadas (pcenp) y el método predictor-corrector para el sistema aumentado precondicionado (pcsap), esta ejecución se realizará sobre diversos ejem- plares de problemas de PL de diferentes tamaños, los cuales los veremos en el cuadro 3.3, todo esto será realizado con la …nalidad de veri…car la e…ciencia computacional empírica de los métodos de puntos interiores precondicionados y así salvar el mal condicionamien- to que presentan algunos problemas de PL. El método de punto interior que se vió, es el método predictor-corrector (MPC) y esto fue realizado para dos sistemas precondicionados y son los siguientes: El método predictor-corrector para ecuaciones normales precondicionadas (pcenp) y el método predictor-corrector para el sistema aumentado precondcionado (pcsap).

Prob m n k z (pcenp) t k z (pcsap) t b1 4 5 10 2;4530e+003 0;016000 24 2;4530e+003 0;038000 b2 8 9 5 -6;9991e+003 0;008000 21 -6;9991e+003 0;039000 b3 15 16 8 -3;9098e+003 0;030000 33 -3;9098e+003 0;213000 b4 20 21 11 1;9821e+004 0;040000 22 1;9821e+004 0;220000 b5 30 31 11 4;0414e+003 0;091000 17 4;0414e+003 0;476000 b6 50 51 9 -1;6165e+004 0;233000 22 -1;6165e+004 2;556000 b7 70 71 13 -3;6331e+004 0;726000 23 -3;6331e+004 7;095000 b8 100 101 11 -1;0879e+004 2;713000 14 -1;0879e+004 17;126000

Cuadro 3.3: Comparación entre el pcenp y el pcsa

De los resultados obtenidos en el cuadro 3.3, se puede observar que el método predictor- corrector para las ecuaciones normales precondicionadas (pcenp), realiza menos iteraciones que el método predictor corrector para el sistema aumentado precondicionado (pcsap).

Conclusiones

Para problemas de gran tamaño, el método primal-dual afín escala, el método de puntos interiores primal-dual y el método predictor corrector son efectivamente más rápidos que el método Simplex, ya que realiza un menor número de iteraciones. Esto fue probado empíricamente con varios ejemplos simulados.

Tanto en el método primal-dual afín escala como en el método de puntos interiores primal-dual y el método predictor corrector, el sistema para encontrar una dirección de Newton es mal condicionada. Esto fue veri…cado computacionalmente en problemas simulados.

El método Predictor corrector, tiene mayores bene…cios por su dirección predictora, dirección correctora (esto comparado con los otros métodos de puntos interiores) y un tamaño de paso adecuado para mantenernos dentro de la región de factibilidad. El método predictor-corrector para problemas de PL usando el precondicionador basa- do en la factorización de Cholesky para el sistema de ecuaciones normales (3.3), pág. 57 y el método predictor-corrector sin precondicionamiento, no presentan diferencia signi…cativa en el número de iteraciones que realiza el algoritmo predictor-corrector, dado en la pág. 49.

El método predictor-corrector para problemas de PL usando el precondicionador se- parador en el sistema aumentado (3.3), pág. 57, realiza más iteraciones que el método predictor-corrector sin precondicionamiento.

El precondicionador basado en la factorización de Cholesky realiza menos iteraciones que el precondicionador separador, esto en el algoritmo predictor-corrector dado en la pág. 49.

Ambos precondicionadores, aquel basado en la factorización de Cholesky y el otro en el precondicionador separador, se han propuesto para precondicionar un sistema (mal condicionado) obtenida como subproblema en el método predictor-corrector. Los experimentos computacionales sin precondicionamiento mostraban el anuncio "Bad scaled matrix us singular", pero con precondicionamiento el problema fue corregido.

Bibliografía

[1] M. Kojima, S. Mizuno y A. Yoshise. A Primal Dual Interior Point Method for Li- near Programming. Progess in Mathematical Programming: Interior Point and related methods, N. Megiddo (1989). Springer-Verlag, New York, pp. 29–47.

[2] David G. Luenberger. Linear and nonlinear programming. 2nd. Kluwer, 2003.

[3] Irvin J Lustig, Roy E Marsten e David F Shanno. Computational experience with a primal dual interior point method for linear programming. Em: Linear Algebra and Its Applications 152 (1991), pp. 191–222.

[4] José Mario Martínez y Sandra Augusta Santos.Métodos computacionais de otimização. Colóquio Brasileiro de Matemática, Apostilas 20 (1995).

[5] L. G. Khachiyan.A Polinomial Algorithm in Linear Programming. Soviet Mathematics Docklady 20 (1979), pp. 191–194.

[6] N.K. Karmarkar. A New Polinomial-Time Algorithm for Linear Programming. Combi- natorica 4 (1984), pp. 373–395.

[7] Mokhtar S. Bazaraa, Jhon J. Jarvis y Hanif D.Sherali. Linear Programming and Net- work Flows.4th. Hoboken, New Jersey: Wiley, 2010.

[8] Stephen J Wright.Primal-dual interior-point methods. Vol. 54. SIAM, 1997.

[9] Alexey Izmailov Mikhail Solodov. Condicoes de Optimalidade,Elementos de Analise Convexa e de Dualidade. Optimicacao-Volumen 1.

[10] Alexey Izmailov Mikhail Solodov. Métodos Computacionales. Optimicacao-Volumen 2. [11] John A Tomlin. On scaling linear programming problems. Springer, 1975.

[12] Erling D. Andersen e Knud D. Andersen. “Presolving in linear programming”. Em: Mathematical

Programming 71.2 (1995), pp. 221–245.

[13] Li Bo, Zhang Guoguang e Lv Xiangfen. “Presolving techniques in linear programming model”.

[14] Jacek Gondzio.“Presolve analysis of linear programs prior to applying an interior point method”. Em: INFORMS Journal on Computing 9.1 (1997), pp. 73–91.

[15] Thomas H. Cormen, Charles E. Leiserson e Ronald L. Rivest.Introduction to algorithms.

MIT press Cambridge, Massachusets London, England, 1990.

[16] Marsten R., Subramanian R. and Saltzman M.,Interior Point Methods for Linear Programming, 1990.

[17] Por…rio Suñagua Salgado.Un abordaje para el cálculo de una base del pre-condicionador separador en un método de puntos interiores.-Campinas, SP:[s.n.], 2014.

[18] Jansen B., Roos C., Terlaky C. and Vial J. P., Primal-Dual Algorithms for Linear Programming Based on the Logarithmic Barrier Method. Journal of Optimization and Applications. Vol. 83, No. 1, pp. 1-26, october 1994.

[19] Marsten R., Subramanian R. and Saltzman M.,Interior Point Methods for Linear Pro- gramming, 1990. 147

[20] I.I. Dikin. “Iterative Solution of Problem of Linear and Quadratic Programming (in Russian)”. Em: Doklady Akademiia Nauk USSR 174 (1967). Soviet Mathematics Dok- lady 8674-675, pp. 747–748.

[21] S. Mehrotra. “On the implementation of a Primal-Dual Interior Point Method”. Em: SIAM Journal on Optimization 2 (1992), pp. 575–601.

[22] S. Mehrotra. Asymptotic convergence in a generalized-predictor-corrector method. Ma- nuscript,Dept. of Industrial Engineering and Management Sciences. Northwestern Uni- versity, Evanston, IL 60208, USA. 1992.

[23] Ticona Centeno, Percy A., Optimización No Lineal-Parte I, Escuela de Matemática- UNSA, 2005.

[24] Carl Meyer. Matrix analysis and applied linear algebra book and solutions manual.Vol. 2. Society for Industrial e Applied Mathematics, 2000.

[25] M. Kojima, S. Mizuno e A. Yoshise. A Primal Dual Interior Point Method for Line- ar Programming. Progess in Mathematical Programming: Interior Point and related methods, N. Megiddo(1989). Springer-Verlag, New York, pp. 29-47.

[26] Renato DC Monteiro, Ilan Adler e Mauricio GC Resende. “A polynomial-time primal- dual a¢ ne scaling algorithm for linear and convex quadratic programming and its power series extension”. Em: Mathematics of Operations Research15;2(1990), pp. 191-214.

[27] Richard Tapia, Yin Zhang, Matthew Saltzman e Alan Weiser.“The Mehrotra predictor- corrector interior-point method as a perturbed composite Newton method”. Em: SIAM Journal on Optimization6;1 (1996), pp. 47-56.

[28] James R Bunch e Beresford N Parlett.“Direct methods for solving symmetric inde…nite systems of linear equations”. Em: SIAM Journal on Numerical Analysis 8;4(1971), pp.

639-655.

[29] Gene H Golub e Charles F Van Loan. Matrix computations. Vol. 3. JHU Press, 1996. [30] F. F. Campos and J. S. Rollet.Controlled Cholesky factorisation for preconditioning the

conjugate gradient method. Technical Report NA95/05, Oxford University Computing Laboratory, Oxford, 1995.

[31] David S Kershaw. “The incomplete Cholesky— conjugate gradient method for the iter- ative solution of systems of linear equations”. Em: Journal of Computational Physics 26.1 (1978), pp. 43–65.

[32] Aurelio R.L. Oliveira e Danny C. Sorensen. “A new class of precondition- ers for large-scale linear systems from interior point methods for linear pro- gramming”. Em: Linear Algebra and its applications 394 (2005). England http://www.ime.unicamp.br/ aurelio/artigos/split.pdf, pp. 1–24.

[33] Lloyd N Trefethen e David Bau III. Numerical linear algebra.50. Siam, 1997.

[34] Carl Meyer. Matrix analysis and applied linear algebra book and solutions manual.Vol. 2. Society for Industrial e Applied Mathematics, 2000.

[35] Stephen A Cook. “The complexity of theorem-proving procedures”. Em: Proceedings of the third annual ACM symposium on Theory of computing. ACM. 1971, pp. 151–158. [36] Patrick R. Amestoy, Timothy A. Davis e Iain S. Du¤.“Algorithm 837: AMD, an approx-

imate minimum degree ordering algorithm”. Em: ACM Transactions on Mathematical Software (TOMS) 30.3 (2004), pp. 381–388.

[37] Timothy A. Davis e Iain S. Du¤. “An unsymmetric-pattern multifrontal method for sparse LU factorization”. Em: SIAM Journal on Matrix Analysis and Applications 18.1 (1997), pp. 140–158.

[38] Timothy A. Davis. “Algorithm 832: UMFPACK V4. 3— an unsymmetric-pattern mul- tifrontal method”. Em: ACM Transactions on Mathematical Software (TOMS) 30.2 (2004), pp. 196–199.

[39] Aurelio R.L. Oliveira e Danny C. Sorensen. “A new class of precondition- ers for large-scale linear systems from interior point methods for linear pro- gramming”. Em: Linear Algebra and its applications 394 (2005). England http://www.ime.unicamp.br/ aurelio/artigos/split.pdf, pp. 1–24.

[40] MI Velazco, Aurelio RL Oliveira e FF Campos. “A note on hybrid preconditioners for largescalenormal equations arising from interior-point methods”. Em: Optimization Methods & Software 25.2 (2010), pp. 321–332.

[41] Timothy A. Davis. “A column pre-ordering strategy for the unsymmetric-pattern mul- tifrontal method”. Em: ACM Transactions on Mathematical Software (TOMS) 30.2 (2004), pp. 165–195.

[42] Timothy A. Davis e Iain S. Du¤.“A combined unifrontal/multifrontal method for unsym- metric sparse matrices”. Em: ACM Transactions on Mathematical Software (TOMS) 25.1 (1999), pp. 1–20.

[43] Patrick R. Amestoy, Timothy A. Davis e Iain S. Du¤. “An approximate minimum de- gree ordering algorithm”. Em: SIAM Journal on Matrix Analysis and Applications 17.4 (1996), pp. 886–905.

[44] Timothy A. Davis.Direct methods for sparse linear systems. Vol. 2. Society for Industrial e Applied Mathematics, 2006.

[45] Stephen J Wright. Primal-dual interior-point methods. Vol. 54. SIAM, 1997.

[46] Nicholas J Higham.“Analysis of the Cholesky decomposition of a semi-de…nite matrix”. Em: M. G. Cox and S. J. Hammarling, (eds). Reliable Numerical Computation (1990), pp. 161–185.

[47] Harry M Markowitz. “The elimination form of the inverse and its application to linear programming”. Em: Management Science 3.3 (1957), pp. 255–269.

Apéndice

Implementación de Algoritmos

Para los siguientes programas, correspondientes a los métodos de puntos interiores co- mo el Método predictor corrector (MPC), el Método primal dual afín escala (PDAE), el método de punto interior primal dual (PIPD), el método predictor corrector para ecuaciones normales precondicionada “pcenp” y el método predictor corrector para el sistema aumen- tado precondicionado “pcsa”, se ingresa la matriz A y los vectores b y c que determinan justamente el problema de PL en la forma estándar de…nido en (2.15):

Minimizar c x Ax = b

x 0

(3.22)

además es …jado una precisión"=0;000001:El programa retorna una"-solución del sistema (3.22), la función objetivo alcanzada “c x” y el número de iteraciones requeridas “iter”.

Para veri…car la e…ciencia computacional empíricamente de los métodos de puntos inte- riores con precondicionamiento, se generaron problemas de gran tamaño, inclusive hasta de 101 variables y 100 restricciones, el programa siguiente, GENPL(m,n) nos permite generar de manera aleatoria un problema de PL y su contrucción se realizó en Matlab y sólo debemos ingresar las dimensionesm yn;deseadas de la matriz A, correspondientes am restricciones y n variables. El programa produce un ejemplar de programación lineal y el código es el siguiente: 1 function [A,b,c]=GENPL(m,n) 2 A=100*rand(m,n)-100*rand(m,n); 3 x=100*rand(n,1)+1; 4 b=A*x; 5 c=100*rand(n,1)-100*rand(n,1); 6 A 7 b 8 c

Plataforma Se usó el sistema operativo Windows 7 Home Basic corriendo sobre una Note- book IS 1412 compatible, usando un procesador Pentium (R) Dual-Core CPU [email protected] Hz, con 3GB de memoria RAM y un tipo de sistema operativo de 32 bits.

Software Se usó el Matlab 5.5-R12 para Windows. Matlab tiene muchas ventajas para trabajar con problemas que requieren del cálculo numérico y matricical.

En lo siguiente, presentamos los programas en MatLab correspondientes al MPC, PDAE y PIPD.

Código asociado al algoritmo Primal-Dual Afín Escala

Para el siguiente programa, denominado PDAE, se ingresa la matriz A y los vectores b

y c que determinan justamente el problema de PL en la forma estándar de…nido en (3.22). El programa retorna una "-solución del sistema (3.22), la función objetivo alcanzada (c x)

y el número de iteraciones requeridas(iter).

1 function [x,v,iter]=PDAE(A,b,c) 2 [m,n]=size(A);e=ones(n,1);epsilon=0.000001; 3 x=ones(n,1);y=ones(m,1);z=ones(n,1);iter=0;tiempo=cputime; 4 while abs(c’*x-b’*y)/(1+abs(b’*y))>epsilon 5 X=diag(x);Z=diag(z);rP=b-A*x;rD=c-A’*y-z;ra=-X*Z*e; 6 D=Z\X;H=X\ra; 7 dy=(A*D*A’)\(rP+A*D*(rD-H));dx=D*(A’*dy-rD+H);dz=X\(ra-Z*dx); 8 rP=1;rD=1; 9 for i=1:n

10 if dx(i)<0 & -x(i)/dx(i)<rP

11 rP=-x(i)/dx(i);

12 end

13 if dz(i)<0 & -z(i)/dz(i)<rD

14 rD=-z(i)/dz(i); 15 end 16 end 17 x=x+0.99995*rP*dx;y=y+0.99995*rD*dy;z=z+0.99995*rD*dz; 18 iter=iter+1; 19 end 20 v=c’*x;

Código asociado al algoritmo de Puntos Interiores Primal-Dual

Para el siguiente programa, denominado PIPD, se ingresa la matriz A y los vectores b

Además es …jado un valor inicial = 100; y una tolerancia de error " = 0;000001: El programa retorna una"-solución del sistema (3.22), la función objetivo alcanzada(c x)y el número de iteraciones requeridas (iter).

1 function [x,v,iter]=PIPD(A,b,c) 2 [m,n]=size(A);e=ones(n,1);u=100;epsilon=0.000001; 3 x=ones(n,1);y=ones(m,1);z=ones(n,1);iter=0;tiempo=cputime; 4 while abs(c’*x-b’*y)/(1+abs(b’*y))>epsilon 5 X=diag(x);Z=diag(z); 6 aP=b-A*x;aD=A’*y+z-c; 7 D=Z\X;H=Z\e; 8 dy=(A*D*A’)\(b-u*A*H-A*D*aD);dz=-aD-A’*dy;dx=Z\(u*e-X*Z*e-X*dz); 9 aP=1;aD=1; 10 for i=1:n

11 if dx(i)<0 & -x(i)/dx(i)<aP

12 aP=-x(i)/dx(i);

13 end

14 if dz(i)<0 & -z(i)/dz(i)<aD

15 aD=-z(i)/dz(i); 16 end 17 end 18 x=x+0.98*aP*dx;y=y+0.98*aD*dy;z=z+0.98*aD*dz; 19 u=abs(c’*x-b’*y)/(n^2); 20 iter=iter+1; 21 end 22 v=c’*x;

Código del algoritmo asociado al método predictor-corrector

Para el siguiente programa, denominado MPC, se ingresa la matriz Ay los vectores by

c que determinan justamente el ejemplar del problema de PL en la forma estándar de…nido en (3.22). Además es …jado una precisión"=0;000001:El programa retorna una"-solución del sistema (3.22), la función objetivo alcanzada “c x”y el número de iteraciones requeridas “iter”. 1 function [x,v]=pc(A,b,c) 2 [m,n]=size(A);epsilon=0.000001;x=ones(n,1);z=x;y=ones(m,1); 3 r=0.99995;iter=0;tiempo=cputime; 4 while abs(c’*x-b’*y)/(1+abs(c’*x)+abs(b’*y))>epsilon 5 Z=diag(z);X=diag(x);rp=b-A*x;rd=c-A’*y-z;ra=-X*Z*ones(n,1);

7 dmx=dm(1:n);dmy=dm(n+1:n+m);dmz=dm(n+m+1:n+m+n);

8 aP=1;aD=1;

9 for i=1:n

10 if dmx(i)<0 & -x(i)/dmx(i)<aP

11 aP=-x(i)/dmx(i);

12 end

13 if dmz(i)<0 & -z(i)/dmz(i)<aD

14 aD=-z(i)/dmz(i);

15 end

16 end

17 gm=(x+aP*dmx)’*(z+aD*dmz);om=(gm/(x’*z))^2;mu=om*(x’*z)/n;

18 rc=mu*ones(n,1)+ra;rs=rc-diag(dmx)*diag(dmz)*ones(n,1);

19 d=([A zeros(m,m) zeros(m,n);zeros(n,n) A’ eye(n);Z zeros(n,m) X])\[rp;rd;rs];

20 dx=d(1:n);dy=d(n+1:n+m);dz=d(n+m+1:n+m+n);

21 aP=1;aD=1;

22 for i=1:n

23 if dx(i)<0 & -x(i)/dx(i)<aP

24 aP=-x(i)/dx(i);

25 end

26 if dz(i)<0 & -z(i)/dz(i)<aD

27 aD=-z(i)/dz(i); 28 end 29 end 30 x=x+r*aP*dx;y=y+r*aD*dy;z=z+r*aD*dz;iter=iter+1; 31 end 32 v=c’*x;

El método predictor corrector como precondicionador el factor de cholesky como precondicionador

En el siguiente programa, denominado pcenp, se ingresa la matriz A y los vectores b y

c que determinan justamente el problema de PL en la forma estándar de…nido en (3.22). Además es …jado una precisión"=0;000001:El programa retorna una"-solución del sistema (3.22), la función objetivo alcanzada “c x” y el número de iteraciones requeridas “iter”.

Código asociado al método predictor corrector para ecuaciones normales pre- condicionada “pcenp”

1 function [x,v]=pcenp(A,b,c)

2 [m,n]=size(A);epsilon=0.000001;x=ones(n,1);z=x;y=ones(m,1);

3 h=0.99995;iter=0;tiempo=cputime;

5 Z=diag(z);X=diag(x);rp=b-A*x;rd=c-A’*y-z;ra=-X*Z*ones(n,1);

6 dm=inv([A zeros(m,m) zeros(m,n);zeros(n,n) A’ eye(n);Z zeros(n,m) X])*[rp;rd;ra];

7 dmx=dm(1:n);dmy=dm(n+1:n+m);dmz=dm(n+m+1:n+m+n);

8 aP=1;aD=1;

9 for i=1:n

10 if dmx(i)<0 & -x(i)/dmx(i)<aP

11 aP=-x(i)/dmx(i);

12 end

13 if dmz(i)<0 & -z(i)/dmz(i)<aD

14 aD=-z(i)/dmz(i); 15 end 16 end 17 gm=(x+aP*dmx)’*(z+aD*dmz);om=(gm/(x’*z))^2;mu=om*(x’*z)/n; 18 rc=mu*ones(n,1)+ra;rs=rc-diag(dmx)*diag(dmz)*ones(n,1); 19 D=inv(Z)*X;M=A*D*A’;r=rp+A*D*(rd-X\rs); 20 dy=gradcp(M,r);dx=D*(A’*dy-rd+X\rs);dz=inv(X)*(rs-Z*dx); 21 aP=1;aD=1; 22 for i=1:n

23 if dx(i)<0 & -x(i)/dx(i)<aP

24 aP=-x(i)/dx(i);

25 end

26 if dz(i)<0 & -z(i)/dz(i)<aD

27 aD=-z(i)/dz(i); 28 end 29 end 30 x=x+h*aP*dx;y=y+h*aD*dy;z=z+h*aD*dz;iter=iter+1; 31 end 32 v=c’*x;

Daremos una breve explicación de este código. En la línea 1se ingresa a esta función los datos A; b; c del problema de programación lineal (3.22). Entre las líneas 6 y 7 se halla la dirección de Newton, de acuerdo al problema del Método predictor corrector. En la línea20, se hace un llamado al algoritmo del gradiente conjugado precondicionado para el sistema de ecuaciones normales precondicionadas y halla la nueva dirección de Newton. En la línea 30, se recuperan los valores de las variables originales asociados al problema de programación lineal.

Código asociado al gradiente conjugado precondicionado para el sistema aumen- tado “gradcp”

1 function [x]=gradcp(M,r)

3 while abs(r)>epsilon 4 for k=1:n 5 p=Mb\r;a=(r’*p)/(p’*M*p); 6 end 7 x=x+a*p;r=r-a*Mb*p; 8 end.

En la línea 1 se ingresaM y r de los obtenidos en el anterior código (pcenp) de la línea

19. En la línea2 se calcula el precondicionador C. En la línea7, se recuperan los valores de las variables originales.

El método predictor corrector con precondicionador separador

Para el siguiente programa, denominado pcsa, se ingresa la matriz A y los vectores by

c que determinan justamente el problema de PL en la forma estándar de…nido en (3.22). Además es …jado una precisión"=0;000001:El programa retorna una"-solución del sistema (3.22), la función objetivo alcanzada “c x” y el número de iteraciones requeridas “iter”.

Código asociado al método predictor corrector para el sistema aumentado “pcsa”

1 function [x,v]=pcsa(A,b,c)

2 [m,n]=size(A);epsilon=0.000001;x=ones(n,1);z=x;y=ones(m,1);

3 h=0.9;iter=0;tiempo=cputime;

4 while abs(c’*x-b’*y)/(1+abs(c’*x)+abs(b’*y))>epsilon

5 Z=diag(z);X=diag(x);rp=b-A*x;rd=c-A’*y-z;ra=-X*Z*ones(n,1);

6 dm=([A zeros(m,m) zeros(m,n);zeros(n,n) A’ eye(n);Z zeros(n,m) X])\[rp;rd;ra];

7 dmx=dm(1:n);dmy=dm(n+1:n+m);dmz=dm(n+m+1:n+m+n);aP=1;aD=1;

8 for i=1:n

9 if dmx(i)<0 & -x(i)/dmx(i)<aP

10 aP=-x(i)/dmx(i);

11 end

12 if dmz(i)<0 & -z(i)/dmz(i)<aD

13 aD=-z(i)/dmz(i); 14 end 15 end 16 gm=(x+aP*dmx)’*(z+aD*dmz);om=(gm/(x’*z))^2;mu=om*(x’*z)/n; 17 rc=mu*ones(n,1)+ra;rs=rc-diag(dmx)*diag(dmz)*ones(n,1);D=inv(Z)*X;M=A*D*A’; 18 nn=inv(X);mm=nn*rs;r=rp+A*D*(rd-mm);C=cpssa(A,D); 19 dy=gradcpsa(M,r,C);dx=D*(A’*dy-rd+mm);dz=mm-nn*Z*dx;aP=1;aD=1; 20 for i=1:n

21 if dx(i)<0 & -x(i)/dx(i)<aP

23 end

24 if dz(i)<0 & -z(i)/dz(i)<aD

25 aD=-z(i)/dz(i); 26 end 27 end 28 x=x+h*aP*dx;y=y+h*aD*dy;z=z+h*aD*dz;iter=iter+1; 29 end 30 v=c’*x;

En la línea 1 se ingresa a esta función los datos A; b; c del problema de programación lineal (3.22). Entre las líneas6 y 7se halla la dirección de Newton, de acuerdo al problema del Método predictor corrector. En la línea19, se hace un llamado al algoritmo del gradiente conjugado precondicionado para el sistema aumentado precondicionado y halla la nueva dirección de Newton. En la línea 28, se recuperan los valores de las variables originales asociados al problema de programación lineal.

Código asociado a la construcción del precondicionador separador “cpssa”

1 function [C]=cpssa(A,D)

2 copyA=A; [m,n]=size(A); indB=[]; g=1; k=1; tol=1.e-12;

3 while k<=m & g<=n 4 maximo=abs(A(k,g));indmax=k; 5 for r=k+1:m 6 if maximo<abs(A(r,g)) 7 indmax=r; 8 end 9 end 10 aux=A(k,:);A(k,:)=A(indmax,:);A(indmax,:)=aux; 11 if abs(A(k,g))<tol 12 g=g+1; 13 else 14 indB=[indB g]; 15 for i=k+1:m 16 mult=A(i,g)/A(k,g); 17 for j=k:n 18 A(i,j)=A(i,j)-mult*A(k,j); 19 end 20 end 21 k=k+1; g=g+1; 22 end 23 end 24 B=copyA(:,indB); DB=D(indB,indB); C=B*sqrt(DB);

Daremos una breve explicación de este código. En la línea 1se ingresa a esta función los datos Adel problema de programación lineal (3.22) y Dla matriz diagonal.correspondiente a (3.3).Entre las líneas 3a 7 se halla el máximo en valor absoluto del valor numérico de las columnas de la matriz ingresada A. Luego en la línea 10 guarda ese valor, para después en las líneas de 11 a 18 aplicar el pivoteamiento parcial. Finalmente en la línea 24 obtiene los valores de la matriz básica en una matriz B obtenemos también D , correspondiente a la matriz diagonal básica y por ultimo nos da el valor del precondicionador separador C para el sistema aumentado (3.3).

Código asociado al gradiente conjugado precondicionado para el sistema aumen- tado “gradcpsa” 1 function [x]=gradcpsa(M,r,C) 2 [n n]=size(M);Mb=C*C’;x=ones(n,1);k=0;r=r-M*x;mm=inv(Mb);epsilon=0.000001; 3 while abs(r)>epsilon 4 z=mm*r;k=k+1; 5 if k==1 6 p=z; 7 else 8 betak=(r’*z)/(rkm1’*zkm1);p=z+betak*pkm1; 9 end 10 rkm1=r;zkm1=z;pkm1=p;ak=(r’*z)/(p’*M*p);x=x+ak*p;r=r-ak*M*p; 11 end

En la línea 1 se ingresa a esta función los datos M, r y C, correspondientes al sistema aumentado precondicionado que son calculados en la línea 17 y 18 del código asociado al método predictor corrector para el sistema aumentado “pcsa”y línea24del código asociado a la construcción del precondicionador separador “cpssa”. Luego en la línea3al8resuelve el sistema aumentado precondicionado por el método de gradientes conjugados. Finalmente en la línea10nos da el valor de x, que nos sirve para la línea19del código asociado al método

Documento similar