UNIVERSIDAD TÉCNICA DE ORURO FACULTAD NACIONAL DE INGENIERÍA INGENIERÍA ELÉCTRICA Y ELECTRÓNICA OPTIMIZACIÓN CON MATLAB® MCs. Ing. Armengol Blanco Benito Oruro, octubre 2004 1 OPTIMIZACIÓN CON MATLAB® Armengol Blanco L a optimización, es una herramienta matemática poderosa que emplea el enfoque científico para la asignación de recursos económicos y materiales para el logro de un determinado objetivo al resolver problemas prácticos y reales. El tool box de optimización de Matlab®, es una herramienta computacional interesante para resolver problemas de optimización lineal y no-lineal. Lo interesante de la solución de un problema de optimización, no es la solución misma, lo importante son los multiplicadores de Lagrange-Karush-Kuhn-Tucker asociados con cada restricción, es decir, los precios duales. Estos últimos permiten tomar decisiones para mejorar la solución o considerar el cambio de las restricciones que pueden mejorar (ó empeorar) la solución hallada. En este texto, se presenta una aplicación a problemas típicos de la operación económica de sistemas eléctricos, se hace hincapié en la interpretación de los parámetros del tool box de optimización de Matlab®. Un problema de optimización, queda formulado como: min f ( x ) (1) s. a : g(x) = 0 h(x) ≤ 0 (2) (3) donde: f() g() h() x Función objetivo Restricción de igualdad Restricción de desigualdad Variable de decisión Las funciones f(), g() y h() pueden ser funciones lineales y/ó no lineales. Las restricciones de igualdad y de desigualdad pueden ser lineales y/o no lineales, entonces, el modelo se puede explicitar con mayor detalle, por ejemplo para trabajar con Matlab [1], se utiliza la formulación siguiente: 2 min f ( x ) s. a : C eq (x) = 0 (4) (5) A eq ⋅ x = b eq (6) C(x) ≤ 0 A⋅x≤b L≤x≤U donde: Ceq() Aeq C() A beq b L, U x (7) (8) (9) Restricciones de igualdad, estrictamente no lineales. Matriz de las restricciones de igualdad lineales. Restricciones de desigualdad, estrictamente no lineales. Matriz de las restricciones de desigualdad lineales. Lado derecho de las restricciones de igualdad. Lado derecho de las restricciones de desigualdad. Vectores de límites inferior y superior de las variables de decisión x. Variables de decisión del problema. Este modelo, se puede clasificar como un problema de optimización no lineal que corresponde al ámbito de la programación matemática. Se tienen varios métodos de la programación matemática para su resolución. Este modelo, se puede resolver mediante la caja de herramientas de optimización del MATLAB® [2], que tiene un comando fmincon para ese propósito. fmincon Determina el mínimo de una función multivariable con restricciones de igualdad y desigualdad, lineales y no lineales. Todo problema de maximización puede ser convertido en un problema de minimización al cambiar el signo la función objetivo. Sintaxis Las diferentes formas de emplear el comando fmincon, son las siguientes: x = fmincon(fun,x0,A,b) x = fmincon(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...) [x,fval] = fmincon(...) [x,fval,exitflag] = fmincon(...) [x,fval,exitflag,output] = fmincon(...) [x,fval,exitflag,output,lambda] = fmincon(...) 3 [x,fval,exitflag,output,lambda,grad] = fmincon(...) [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...) Descripción [1] Argumentos Los argumentos que toma el comando fmincon, son los siguientes: fun es un archivo de texto ASCII, con la extensión m, que contiene la función objetivo a minimizar. x0 punto inicial para la búsqueda de la solución. A, b, Aeq, beq, lb, ub, definidas en el problema de optimización, corresponden a las restricciones lineales. nonlcon archivo extensión m que contiene las restricciones no lineales. options opciones de los parámetros de optimización. P1, P2, … parámetros de fun y nonlcon Salidas Las salidas que entrega el comando fmincon, son las siguientes x vector solución fval valor de la función objetivo exitflag condición de terminación de fmincon output estructura de la salida lambda multiplicadores de Lagrange grad gradiente de la función fun evaluada en el punto solución hessian valor de la Hessiana Mayores detalles, se puede consultar en el manual [1], páginas 4-30 al 4-42. Las variables de los argumentos y salidas pueden tomar nombres cualesquiera, solamente es necesario respetar el lugar de su ubicación. Ejemplo 1 Problema de Programación no Lineal Determinar el Despacho Económico de Carga de un Sistema Eléctrico de Potencia, cuyas funciones de costos de generación, son las que siguen: 4 Función de Costo de Generación ⎡$⎤ ⎢⎣ h ⎥⎦ Pmin Pmax [MW ] [MW ] F1 = 800 + 10.1 ⋅ P1 + 0.06 ⋅ P12 + 0.006 ⋅ P13 35 100 F2 = 350 + 6.0 ⋅ P2 + 0.07 ⋅ P22 + 0.006 ⋅ P23 45 125 F3 = 350 + 7.1 ⋅ P3 + 0.06 ⋅ P32 + 0.007 ⋅ P33 50 200 F4 = 800 + 7.2 ⋅ P4 + 0.07 ⋅ P42 + 0.006 ⋅ P43 47 200 La formula de pérdidas, es: Pperd = 0.00008 ⋅ P12 + 0.00009 ⋅ P22 Ésta expresión significa que las unidades 1 y 2, son responsable de las pérdidas solamente. La unidad 2 más que la 1. La demanda: PD = 200 MW EL modelo de optimización, es: N Min FT = ∑ Fi ( P i ) i =1 s. a : N G = P D + P perd - ∑ P i = 0 i =1 min max Pi ≤ P i ≤ Pi La función objetivo, está dado por: FT = N ∑ Fi (Pi ) = 2300 + 10.1 ⋅ P1 + 0.06 ⋅ P12 + 0.006 ⋅ P13 i =1 + 6.0 ⋅ P2 + 0.07 ⋅ P22 + 0.006 ⋅ P23 + 7.1 ⋅ P3 + 0.06 ⋅ P32 + 0.007 ⋅ P33 + + 7.2 ⋅ P4 + 0.07 ⋅ P42 + 0.006 ⋅ P43 5 La restricción de igualdad: N G = P D + P perd - ∑ P i = 0 i =1 G = 200 + 0.00008 ⋅ P 2 + 0.00009 ⋅ P 2 − P1 − P2 − P3 − P4 = 0 1 2 Las restricciones de desigualdad, se reducen al acotamiento de las potencias generadas por cada unidad: P min ≤ P i ≤ P max i i 35 ≤ P1 ≤ 100 45 ≤ P 2 ≤ 125 50 ≤ P 3 ≤ 200 47 ≤ P 4 ≤ 200 El modelo de optimización se implementó en tres archivos tipo m: funobj.m, restricnl.m y resolucion.m [1]. La primera contiene la función objetivo del problema, la segunda las restricción de igualdad no lineal y la tercera contienen los parámetros del problema, respectivamente. En los parágrafos siguientes, se lista estos archivos. funobj.m function f=funobj(p) F1=800+10.1*p(1)+0.06*p(1)^2+0.006*p(1)^3; F2=350+6.0*p(2)+0.07*p(2)^2+0.006*p(2)^3; F3=350+7.1*p(3)+0.06*p(3)^2+0.007*p(3)^3; F4=800+7.2*p(4)+0.07*p(4)^2+0.006*p(4)^3; f=F1+F2+F3+F4; restricnl.m function [c,ceq]=restricnl(p) c=[]; % El problema no tiene restricciones de desigualdad no lineales pd=200; % Demanda ceq=[pd+0.00008*p(1)^2+0.00009*p(2)^2-p(1)-p(2)-p(3)-p(4)]; % Restricción de igualdad no lineal solucion.m 6 % Programa para resolver los problemas del 1er parcial de ELT3811 1/2003 p0=[40 50 55 55]'; % Punto de partida A=[]; b=[]; Aeq=[]; beq=[]; % Matrices y vectores de las restricciones lineales: Vacio lb=[35 45 50 47]'; % Límite inferior de generación ub=[100 125 200 200]'; % Límite superior de generación [p,fval,exitflag,output,lambda]=fmincon('funobj',p0,A,b,Aeq,beq,lb,ub, 'restricnl') La ejecución del programa solucion.m, entrega la siguiente solución: » solucion Warning: Trust region method does not currently solve this type of problem, switching to line search. > In C:\MATLABR11\toolbox\optim\fmincon.m at line 190 In C:\MATLABR11\work\solu1.m at line 9 Optimization terminated successfully: Magnitude of directional derivative in search direction less than 2*options.TolFun and maximum constraint violation is less than options.TolCon Active Constraints: 1 4 p= 49.2078 50.7749 50.0000 50.4431 fval = 7.6191e+003 exitflag = 1 output = iterations: 7 funcCount: 43 stepsize: 1 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: [] cgiterations: [] 7 lambda = lower: [4x1 double] upper: [4x1 double] eqlin: [0x1 double] eqnonlin: 60.0631 ineqlin: [0x1 double] ineqnonlin: [0x1 double] » Interpretación de los Resultados ¾ Las primeras líneas indican que el método empleado no es el más adecuado para este problema, pero la optimización fue exitosa. ¾ Las restricciones 1 y 4 están activas: La restricción 1 corresponde a la restricción de igualdad, G: el cual debe satisfacerse. La restricción 4 es la restricción de desigualdad de P3 se activa a su valor mínimo. ¾ Los resultados, son: P1 = 49.2078 P2 = 50.7749 P3 = 50.0000 P4 = 50.4431 ¾ El valor de la función objetivo, es: FT = 7619.1 $/h ¾ La optimización terminó exitosamente: exitflag = 1, en 7 iteraciones y se utilizó un algoritmo para tamaño medio; el método de búsqueda Cuasi Newton. ¾ El multiplicador de Lagrange (precio dual) de la restricción de igualdad, es: eqnonlin: 60.0631. Es el costo marginal del sistema. Corresponde a la restricción G. ' dF (P ) Los costos marginales de las unidades Fi = i i , son: dPi 8 F1' = 59.5902 F2' = 59.5142 F3' = 65.6000 F4' = 60.0631 La unidad 3, está saturada en su límite mínimo, y es la unidad más cara, pero debe operar por estar programada –seguramente para tener un margen de reserva en giro u otra consideración, está situación fue definida en el predespacho-. Las unidades 1 y 2 de acuerdo a sus costos marginales se puede decir que son las más económicas, pero como son responsables de las pérdidas del sistema están penalizadas y sus factores de penalización son: PFi = 1− 1 ∂Pperd ∂Pi 1 PF1 = = 1.0079 1 − 0.00016P1 1 PF2 = = 1.0092 1 − 0.00016P2 Las unidades 3 y 4 tienen factores de penalización iguales a 1, es decir, su funcionamiento no introduce pérdidas al sistema. PF3 = 1 PF4 = 1 La unidad marginal, es la unidad 4, cuyo costo marginal es igual al costo marginal del sistema. Programación lineal Si el problema de optimización queda formulado como un problema de programación lineal, Matlab [2] tiene un comando para resolver este problema, es Linprog. Linprog Resuelve un problema de programación lineal. Las diferentes formas de emplear el comando linprog, son las siguientes: x = linprog(f,A,b,Aeq,beq) x = linprog(f,A,b,Aeq,beq,lb,ub) 9 x = linprog(f,A,b,Aeq,beq,lb,ub,x0) x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) [x,fval] = linprog(...) [x,fval,exitflag] = linprog(...) [x,fval,exitflag,output] = linprog(...) [x,fval,exitflag,output,lambda] = linprog(...) Descripción [1] Argumentos Los argumentos que toma el comando linprog, son los siguientes: f vector columna que contiene los coeficientes de la función objetivo a minimizar. x0 punto inicial para la búsqueda de la solución. A, b, Aeq, beq, lb, ub, definidas en el problema de optimización, corresponden a las restricciones lineales. options opciones de los parámetros de optimización. Salidas Las salidas que entrega el comando linprog, son las siguientes x vector solución fval valor de la función objetivo exitflag condición de terminación de fmincon output estructura de la salida lambda multiplicadores de Lagrange Mayores detalles, se puede consultar en el manual [1], páginas 4-91 al 4-97. Ejemplo 2 Problema de Programación Lineal Es un ejemplo de fabricación de pinturas [3, 4], el modelo de optimización queda planteado como un problema de programación lineal: Maximizar Z= 3XE+2XI Sujeto a: XE+2XI ≤ 6 2XE+XI ≤ 8 -XE+XI ≤ 1 XI ≤ 2 XE; XI ≥ 0 función objetivo restricciones El problema tiene cuatro restricciones de desigualdad lineales. La cuarta restricción, se puede tratarla como acotamiento de la variable de decisión XE. Por tanto, se tiene solamente tres restricciones de desigualdad. El problema no tiene restricciones de igualdad lineales. 10 Se renombran las variables, XE; XI, por X1; X2, el modelo se implementó en un archivo extensión m. prolineal.m, que se lista en el parágrafo siguiente: prolineal.m % Programa para resolver un problema de programación lineal f=[-3 -2]' A=[1 2 21 -1 1] b=[6 8 1]' Aeq=[]; beq=[]; lb=zeros(2,1) ub=[100 2]' [x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub) La ejecución del programa dio la siguiente salida: » prolineal f= -3 -2 A= 1 2 -1 2 1 1 b= 6 8 1 lb = 0 0 ub = 100 2 Optimization terminated successfully. x= 3.3333 1.3333 11 fval = -12.6667 exitflag = 1 output = iterations: 7 cgiterations: 0 algorithm: 'lipsol' lambda = ineqlin: [3x1 double] eqlin: [0x1 double] upper: [2x1 double] lower: [2x1 double] » lambda.ineqlin ans = 0.3333 1.3333 0.0000 » Interpretación de los Resultados La optimización fue exitosa, se utilizó la rutina ‘lipsol’; algoritmo para optimización de gran escala. Fueron necesarias siete iteraciones. Los resultados, son: XE = 3.3333 XI = 1.3333 fval = -12.6667 El problema original, fue de maximizar, por tanto, el valor de la función objetivo es: Z = 12.6667 12 Los multiplicadores de Kuhn-Tucker (precios duales), son: µ1 = 0.3333 µ2 = 1.3333 µ3 = 0.0000 Las dos primeras restricciones, están activas y el tercer multiplicador indica que la tercera restricción está inactiva Referencias Bibliográficas [1] Thomas Coleman, et al., Optimization Toolbox For Use with Matlab®. User’s Guide, Version 2, January, 1999. [2] Software, Matlab®. Versión 5.3, 1999. [3] F.S. Hillier, G. J. Lieberman, Una Introducción a la Investigación de Operaciones. Mc Graw-Hill, 3a Edición, México, 1991. [4] A. Blanco, Operación Económica y Planificación de Sistemas Eléctricos de Potencia. Apuntes de la asignatura, 2003. 13