Está en la página 1de 22

UNIVERSIDAD TÉCNICA DE ORURO

FACULTAD NACIONAL DE INGENIERÍA


INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

GUIA

OPTIMIZACIÓN CON MATLAB®

MCs. Ing. Armengol Blanco Benito

Oruro, febrero 2008


Índice

Índice ii
Palabras Preliminares iii
1 Introducción 1
2 Programación No Lineal 1
2.1 Ejemplo 1, Problema de Programación no Lineal [4] 3
2.1.1 Interpretación de los Resultados 7
2.2 Ejemplo 2, Programación No Lineal: Coordinación Hidrotérmica [4] 8
2.2.1 El modelo de optimización 9
2.2.2 Modelo de Optimización Implementado en MATLAB 11
3 Programación lineal 16
3.1 Ejemplo 3 Problema de Programación Lineal 17
3.2 Interpretación de los Resultados 19
Referencias Bibliográficas 19

ii
Palabras Preliminares

En ésta guía, se presenta, el empleo del tool box de optimización del Matlab® en la
resolución de problemas de optimización en la operación económica de sistemas eléctricos
de potencia. Contiene soluciones completas a ejemplos típicos de la asignatura Operación
Económica y Planificación de Sistemas de Potencia.

Se pretende plasmar la inquietud de facilitar el aprendizaje de las técnicas de optimización


utilizadas para resolver problemas de optimización.

Armengol Blanco
Febrero, 2008

iii
GUIA
OPTIMIZACIÓN CON MATLAB®
Armengol Blanco

1 Introducción

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 y


coordinación hidrotérmica de sistemas eléctricos de potencia, se hace hincapié en la
interpretación de los parámetros del tool box de optimización de Matlab®.

2 Programación No Lineal

La optimización o la programación matemática es un instrumento fundamental en el campo


de la ingeniería.

Un problema de optimización queda formulado como un modelo de optimización mediante la


expresión:

min f ( x ) (1)
s. a :
g(x) = 0 (2)
h(x) ≤ 0 (3)

donde:

f() Función objetivo


g() Restricción de igualdad
h() Restricción de desigualdad
x Variable de decisión

1
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:

min f ( x ) (4)
s. a :
C eq (x) = 0 (5)
A eq ⋅ x = b eq (6)
C(x) ≤ 0 (7)
A⋅x≤b (8)
L≤x≤U (9)

donde:

Ceq() Restricciones de igualdad, estrictamente no lineales.


Aeq Matriz de las restricciones de igualdad lineales.
C() Restricciones de desigualdad, estrictamente no lineales.
A Matriz de las restricciones de desigualdad lineales.
beq Lado derecho de las restricciones de igualdad.
b Lado derecho de las restricciones de desigualdad.
L, U Vectores de límites inferior y superior de las variables de decisión x.
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)

2
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(...)
[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.

2.1 Ejemplo 1, Problema de Programación no Lineal [4]

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:

3
Función de Costo de Generación Pmin Pmax
$
 h  [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:

N
FT = ∑ 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

4
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 ≤ P3 ≤ 200
47 ≤ P 4 ≤ 200

El modelo de optimización se implementó en tres archivos tipo m: funobj.m, restricnl.m y


solucion.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

5
solucion.m

% 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 =

output =

iterations: 7
funcCount: 43
stepsize: 1
algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
firstorderopt: []
6
cgiterations: []

lambda =

lower: [4x1 double]


upper: [4x1 double]
eqlin: [0x1 double]
eqnonlin: 60.0631
ineqlin: [0x1 double]
ineqnonlin: [0x1 double]

2.1.1 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

7
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:

1
PFi =
∂Pperd
1−
∂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.

2.2 Ejemplo 2, Programación No Lineal: Coordinación Hidrotérmica [4]

Determinar la coordinación hidrotérmica del siguiente sistema:

funciones de costo.
Pmin Pmax
F1 = 300 + 4.8PS1 + 0.006P 2 + 0.0006P 3 45 150
S1 S1
F2 = 400 + 7.8PS2 + 0.007 P + 0.0006P 3
2 50 180
S2 S2
F3 = 350 + 6.9PS3 + 0.009P 2 35 200
S3

8
Volumen de gasto [Acre-ft]

q1 = 240 + 6.1PH1 V1 = 37000


q 2 = 300 + 7.1PH 2 V2 = 25000
q 3 = 250 + 7.2PH3 V3 = 35000
q 4 = 300 + 8.2PH 4 V4 = 20000
q 5 = 400 + 10PH5 V5 = 15000

Pperd = 0.00007 P 2 + 0.00008P 2 + 0.00009P 2 + 0.00007 P 2 [MW ]


H1 H3 S1 S2

La curva de gasto es:

Fig. Curva de Carga.

Determinar el modelo de optimización y resolver con el toolbox de optimización del MATLAB.

2.2.1 El modelo de optimización

J max n
La función objetivo, es: MinZ = ∑ ∑ n k F(Psk )
k =1 s =1
Para n=1, 2, 3

Con el objeto de mantener la claridad, la letra S significa térmica y la letra H significa


Hidráulica:

MinZ = n1 * [F(PS11) + F(PS12 ) + F(PS13 )] + n 2 * [F(PS21) + F(PS22 ) + F(PS23 )] +


n 3 * [F(PS31) + F(PS32 ) + F(PS33 )]

9
donde:

El segundo subíndice, significa el número de la unidad y el tercer subíndice significa


periodo de la carga.

Sujeto a:

Ecuación del balance de energía (potencia):

m n
Ck = ∑ PSk + ∑ PHk − Pperdk − PDk = 0
S =1 H =1
C1 = PS11 + PS12 + PS13 + PH11 + PH12 + PH13 + PH14 + PH15 − Pperd1 − PD1 = 0
C 2 = PS21 + PS22 + PS23 + PH 21 + PH 22 + PH 23 + PH 24 + PH 25 − Pperd 2 − PD2 = 0
C 3 = PS31 + PS32 + PS33 + PH31 + PH32 + PH33 + PH34 + PH35 − Pperd3 − PD3 = 0

En la Fig. 2, se muestra la asignación de variable para el periodo j.

P PD j

Ph1 j

PS j
nj

PS1 j

1 2 j jmax

Fig. 2 Asignación de variables en el periodo j

10
Restricción de disponibilidad de agua.
J max
Wk = ∑ n k ·q Hk = Vk
k =1
W1 = n1 ·q11 + n 2 ·q12 + n 3 ·q13 = V1
W2 = n1 ·q 21 + n 2 ·q 22 + n 3 ·q 23 = V2
W3 = n1 ·q 31 + n 2 ·q 32 + n 3 ·q 33 = V3
W4 = n1 ·q 41 + n 2 ·q 42 + n 3 ·q 43 = V4
W5 = n1 ·q 51 + n 2 ·q 52 + n 3 ·q 53 = V5
P min ≤ PSk ≤ P max
Sk Sk
P min ≤ PHk ≤ P max
Hk Hk

donde

q11 = 240 + 6.1PH11


q12 = 240 + 6.1PH12
q13 = 240 + 6.1PH13

q 21 = 300 + 7.1PH 21
q 22 = 300 + 7.1PH 22
q 23 = 300 + 7.1PH 23

q 31 = 250 + 7.2PH31
q 32 = 250 + 7.2PH32
q 33 = 250 + 7.2PH33

q 41 = 300 + 8.2PH 41
q 42 = 300 + 8.2PH 42
q 43 = 300 + 8.2PH 43

q 51 = 400 + 10PH51
q 52 = 400 + 10PH52
q 53 = 400 + 10PH53

2.2.2 Modelo de Optimización Implementado en MATLAB

El modelo de optimización se implementó en tres archivos tipo m: funobj.m, restricc.m y


solucion.m [1]. La primera contiene la función objetivo del problema, la segunda las
restricciones no lineales de igualdad y desigualdad, y la tercera contienen los parámetros del
problema, respectivamente.

11
En los parágrafos siguientes, se lista estos archivos.

funobj.m

%El archivo funobj.m "La Función Objetivo"


function f=funobj(p)

n1=6;
n2=6;
n3=12;

% primer intervalo
F11=300+4.8*p(1)+0.006*p(1)^2+0.00006*p(1)^3;
F21=400+7.8*p(2)+0.007*p(2)^2+0.00007*p(2)^3;
F31=350+6.9*p(3)+0.009*p(3)^2;

% segundo intervalo
F12=300+4.8*p(4)+0.006*p(4)^2+0.00006*p(4)^3;
F22=400+7.8*p(5)+0.007*p(5)^2+0.00007*p(5)^3;
F32=350+6.9*p(6)+0.009*p(6)^2;

% tercer intervalo
F13=300+4.8*p(7)+0.006*p(7)^2+0.00006*p(7)^3;
F23=400+7.8*p(8)+0.007*p(8)^2+0.00007*p(8)^3;
F33=350+6.9*p(9)+0.009*p(9)^2;

%la función total


f=n1*(F11+F21+F31)+n2*(F12+F22+F32)+n3*(F13+F23+F33);

restricc.m

% Archivo de las Restricciones (restricc.m)

function [c,ceq]=restricc(p)
c=[];

% Periodos
n1=6;
n2=6;
n3=12;
%Volúmenes de descarga.
v1=37000;
v2=25000;
v3=35000;
v4=20000;
v5=15000;

%Unidades hidraulicas.
q11=240+6.1*p(10);
12
q21=300+7.1*p(11);
q31=250+7.2*p(12);
q41=300+8.2*p(13);
q51=400+10*p(14);

q12=240+6.1*p(15);
q22=300+7.1*p(16);
q32=250+7.2*p(17);
q42=300+8.2*p(18);
q52=400+10*p(19);

q13=240+6.1*p(20);
q23=300+7.1*p(21);
q33=250+7.2*p(22);
q43=300+8.2*p(23);
q53=400+10*p(24);

% Carga
Pd1=1000;
Pd2=1600;
Pd3=700;

% Perdidas
Pperd1=0.00007*p(10)^2+0.00008*p(12)^2+0.00009*p(1)^2+0.00007*p(2)^2;
Pperd2=0.00007*p(12)^2+0.00008*p(17)^2+0.00009*p(4)^2+0.00007*p(5)^2;
Pperd3=0.00007*p(20)^2+0.00008*p(22)^2+0.00009*p(7)^2+0.00007*p(8)^2;

% Restriccion de igualdad
ceq=[p(1)+p(2)+p(3)+p(10)+p(11)+p(12)+p(13)+p(14)-Pperd1-Pd1
p(4)+p(5)+p(6)+p(15)+p(16)+p(17)+p(18)+p(19)-Pperd2-Pd2
p(7)+p(8)+p(9)+p(20)+p(21)+p(22)+p(23)+p(24)-Pperd3-Pd3
n1*q11+n2*q12+n3*q13-v1
n1*q21+n2*q22+n3*q23-v2
n1*q31+n2*q32+n3*q33-v3
n1*q41+n2*q42+n3*q43-v4
n1*q51+n2*q52+n3*q53-v5];

solucion.m

% archivo solución

A=[];
b=[];
Aeq=[];
beq=[];
p0=[100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;1
00;100;100;100];
lb=[45;50;35;0;0;0;0;0;45;50;35;0;0;0;0;0;45;50;35;0;0;0;0;0];

13
ub=[150;180;200;300;450;600;700;800;150;180;200;300;450;600;700;800;150;180;200;300;4
50;600;700;800];
[p,fval,exitflag,output,lambda]=fmincon('funobj',p0,A,b,Aeq,beq,lb,ub,'restricc')

>> solguia
Warning: Large-scale (trust region) method does not currently solve this type of problem,
using medium-scale (line search) instead.
> In fmincon at 317
In solguia at 10
Optimization terminated: magnitude of directional derivative in search
direction less than 2*options.TolFun and maximum constraint violation
is less than options.TolCon.
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
1
3
9
15
17

p=

Ps11 = 150.0000
Ps21 = 95.1933
Ps31 = 200.0000
Ps12 = 153.3929
Ps22 = 95.1942
Ps32 = 238.0430
Ps13 = 153.3924
Ps23 = 95.1938
Ps33 = 150.0000
Ph11 = 51.1815
Ph21 = 180.3394
Ph31 = 109.7460
Ph41 = 168.7391
Ph51 = 48.6068
Ph12 = 700.0000
Ph22 = 172.8211
Ph32 = 150.0000
Ph42 = 60.8773
Ph52 = 35.0666
Ph13 = 51.1852
Ph23 = 32.3400
Ph33 = 205.7751
Ph43 = 15.2731
Ph43 = 3.1633

fval =
14
1.1023e+005

exitflag =

output =

iterations: 45
funcCount: 1150
lssteplength: 1
stepsize: 0.0287
algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
firstorderopt: 2.1709e-004
message: [1x172 char]

lambda =

lower: [24x1 double]


upper: [24x1 double]
eqlin: [0x1 double]
eqnonlin: [8x1 double]
ineqlin: [0x1 double]
ineqnonlin: [0x1 double]

>> lambda.eqnonlin

ans =

-67.1086
-67.1087
-134.2173
1.8204
1.5753
1.5023
1.3640
1.1185

De donde:

λ1 = -67.1086
λ2 = -67.1087
λ3 = -134.2173
γ1 = 1.8204

15
γ2 = 1.5753
γ3 = 1.5023
γ4 = 1.3640
γ5 = 1.1185

3 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)
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

16
lambda multiplicadores de Lagrange

Mayores detalles, se puede consultar en el manual [1], páginas 4-91 al 4-97.

3.1 Ejemplo 3 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 función objetivo


Sujeto a:
XE+2XI ≤ 6
2XE+XI ≤ 8
-XE+XI ≤ 1 restricciones
XI ≤ 2
XE; XI ≥ 0

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.

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
17
2 1
-1 1

b=
6
8
1

lb =
0
0

ub =
100
2

Optimization terminated successfully.

x=

3.3333
1.3333

fval =

-12.6667

exitflag =

output =

iterations: 7
cgiterations: 0
algorithm: 'lipsol'

lambda =

ineqlin: [3x1 double]


eqlin: [0x1 double]
upper: [2x1 double]
lower: [2x1 double]

» lambda.ineqlin

ans =

18
0.3333
1.3333
0.0000

3.2 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

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 7.4.0.287, 2007.
[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.

19