Guía 1: Modelamiento de Programación no lineal

Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
Guía 1: Modelamiento de Programación no lineal Estructura de un modelo no lineal (PPNL) Un problema no lineal es un problema de programación matemática donde la función objetivo o alguna restricción es no lineal. Forma general de un PPNL: ๐‘€๐‘Ž๐‘ฅ ๐‘š๐‘–๐‘› ๐‘“(๐‘ฅ) , ๐‘ฅ+ , โ€ฆ , ๐‘ฅ-.) , ๐‘ฅ- ) ๐‘ . ๐‘Ž. ๐‘”) ๐‘ฅ) , ๐‘ฅ+ , โ€ฆ , ๐‘ฅ-.) , ๐‘ฅ- โ‰ค, =, โ‰ฅ ๐‘) ๐‘”+ ๐‘ฅ) , ๐‘ฅ+ , โ€ฆ , ๐‘ฅ-.) , ๐‘ฅ- โ‰ค, =, โ‰ฅ ๐‘+ โ‹ฎ ๐‘”9 ๐‘ฅ) , ๐‘ฅ+ , โ€ฆ , ๐‘ฅ-.) , ๐‘ฅ- โ‰ค, =, โ‰ฅ ๐‘: Donde ๐‘“ (๐‘ฅ) , ๐‘ฅ+ , โ€ฆ , ๐‘ฅ-.) , ๐‘ฅ- ) es la función objetivo del modelo no lineal considerando nuestras variables de decisión, y ๐‘”: ๐‘ฅ) , ๐‘ฅ+ , โ€ฆ , ๐‘ฅ-.) , ๐‘ฅ- โ‰ค, =, โ‰ฅ ๐‘: , son las restricciones del problema que pueden ser de igualdad o desigualdad. Ejemplos Ejemplo 1 Un joven ingeniero de la Universidad Mayor, prepara para una compañía un nuevo fertilizante hecho a partir de dos materias primas. Al combinar estas materias primas (๐‘ฅ) , ๐‘ฅ+ ), la cantidad de fertilizante que se obtiene viene dado por ๐‘„ = 4๐‘ฅ) + 2๐‘ฅ+ โˆ’ 0.5๐‘ฅ)+ โˆ’ 0.25๐‘ฅ++ . Se requieren 480 pesos por unidad de materia prima 1 y 300 pesos por cada unidad de materia prima 2 que se empleen en la fabricación del fertilizante (en estas cantidades se incluyen los costos de las materias primas y los costos de producción). Si la compañía dispone de 24.000 pesos para la producción de materias primas, plantear el problema para determinar la cantidad de materia prima de forma que se maximice la cantidad de fertilizante. Ejemplo 2 Una empresa produce ampolletas de ahorro energético y ha firmado un contrato para suministrar al menos 150 unidades en tres meses, 50 unidades al final del primer mes, 50 al final del segundo y 50 al final del tercero. El coste de producir una cantidad de ampolletas en cualquier mes es su cuadrado. La empresa puede producir si lo desea más ampolletas de los que necesita en cualquier mes y guardarlos para el siguiente, siendo el coste de almacenaje de 12 euros por unidad al mes. Suponiendo que no hay inventario inicial, formular el modelo adecuado para determinar el número de frigoríficos que deben producirse cada mes, para minimizar el coste total. Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
Ejemplo 3 Una compañía petrolífera debe determinar cuántos barriles de petróleo hay que extraer en los próximos dos años. Si la compañía extrae ๐‘ฅ) millones de barriles durante un año, se pondría vender cada barril a 30 โˆ’ ๐‘ฅ) euros. Si extrae ๐‘ฅ+ millones de barril durante el segundo año, se podrá vender cada barril a 35 โˆ’ ๐‘ฅ+ euros. El costo para extraer ๐‘ฅ) millones de barriles en el primer año es de ๐‘ฅ)+ millones de euros y el costo para extraer ๐‘ฅ+ millones de barriles durante el segundo año es de 2๐‘ฅ++ millones de euros. Se puede obtener como máximo un total de 20 millones de barriles de petróleo, y se puede gastar como máximo 250 millones de euros en la extracción. Formular el P.N.L. para ayudar a la empresa a maximizar sus ganancias para los próximos dos años. Ejemplo 4 Una compañía de electricidad planea gastar 10000 dólares en publicidad. Se sabe que un minuto de publicidad en televisión cuesta 3000 dólares y 1000 dólares en la radio. Si la empresa compra ๐‘ฅ) minutos de publicidad en televisión y ๐‘ฅ+ minutos en la radio, su ingreso, en dólares, están dado por โˆ’2๐‘ฅ)+ โ€“ ๐‘ฅ++ + ๐‘ฅ) ๐‘ฅ+ + 8๐‘ฅ) + 3๐‘ฅ+ . ¿Cómo puede la empresa maximizar sus ingresos? Desarrollo matemático: Ejemplo 1: Las variables de decisión del problema: ๐‘ฅ) โ‰” cantidad de materia prima 1 ๐‘ฅ+ โ‰” cantidad de materia prima 2 El objetivo es maximizar la cantidad de fertilizante ๐‘„ = 4๐‘ฅ) + 2๐‘ฅ+ โˆ’ 0.5๐‘ฅ)+ โˆ’ 0.25๐‘ฅ++ Las restricciones del problema son: -­โ€โ€‘ El costo no puede no puede superar el presupuesto de la empresa: 480๐‘ฅ) + 300๐‘ฅ+ โ‰ค 24000 -­โ€โ€‘ No negatividad: ๐‘ฅ) โ‰ฅ 0, ๐‘ฅ+ โ‰ฅ 0 Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
La función objetivo nos queda: max ๐‘„(๐‘ฅ) , ๐‘ฅ+ ) = 4๐‘ฅ) + 2๐‘ฅ+ โˆ’ 0.5๐‘ฅ)+ โˆ’ 0.25๐‘ฅ++ Por lo tanto nuestro modelo se puede escribir completo de la forma: max ๐‘„(๐‘ฅ) , ๐‘ฅ+ ) = 4๐‘ฅ) + 2๐‘ฅ+ โˆ’ 0.5๐‘ฅ)+ โˆ’ 0.25๐‘ฅ++ s.a. 480๐‘ฅ) + 300๐‘ฅ+ โ‰ค 24000 ๐‘ฅ) โ‰ฅ 0, ๐‘ฅ+ โ‰ฅ 0 Ejemplo 2: Las variables de decisión del problema: ๐‘ฅ) โ‰” cantidad de ampolletas a producir el primer mes ๐‘ฅ+ โ‰” cantidad de ampolletas a producir el segundo mes ๐‘ฅ+ โ‰” cantidad de ampolletas a producir el tercer mes La función objetivo nos queda: El objetivo es minimizar los costos, el Costo Total = costo de producción + costo de almacenaje segundo mes + costo de almacenaje tercer mes. Costo de producción:= ๐‘ฅ)+ + ๐‘ฅ++ +๐‘ฅI+ Costo de almacenaje segundo mes:= 12(๐‘ฅ) โˆ’ 50) Costo de almacenaje tercer mes:= 12(๐‘ฅ) + ๐‘ฅ+ โˆ’ 50) Por lo tanto ๐‘ ๐‘ฅ) , ๐‘ฅ+ , ๐‘ฅI = ๐‘ฅ)+ + ๐‘ฅ++ +๐‘ฅI+ + 12 ๐‘ฅ) โˆ’ 50 + 12(๐‘ฅ) + ๐‘ฅ+ โˆ’ 50) Las restricciones del problema son: -­โ€โ€‘ Atender la demanda del primer mes: ๐‘ฅ) โ‰ฅ 50 Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
-­โ€โ€‘ Atender la demanda del segundo mes: ๐‘ฅ) โˆ’ 50 + ๐‘ฅ+ โ‰ฅ 50 -­โ€โ€‘ Atender la demanda del tercer mes: ๐‘ฅ) + ๐‘ฅ+ โˆ’ 100 + ๐‘ฅI โ‰ฅ 50 -­โ€โ€‘ No negatividad: ๐‘ฅ+ โ‰ฅ 0, ๐‘ฅI โ‰ฅ 0 Por lo tanto nuestro modelo se puede escribir completo de la forma: min ๐‘ ๐‘ฅ) , ๐‘ฅ+ , ๐‘ฅI = ๐‘ฅ)+ + ๐‘ฅ++ + ๐‘ฅI+ + 12 ๐‘ฅ) โˆ’ 50 + 12(๐‘ฅ) + ๐‘ฅ+ โˆ’ 50) s.a. ๐‘ฅ) โ‰ฅ 50 ๐‘ฅ) โˆ’ 50 + ๐‘ฅ+ โ‰ฅ 50 ๐‘ฅ) + ๐‘ฅ+ โˆ’ 100 + ๐‘ฅI โ‰ฅ 50 ๐‘ฅ+ โ‰ฅ 0, ๐‘ฅI โ‰ฅ 0 Ejemplo 3: Las variables de decisión del problema: ๐‘ฅ) โ‰” millones de barriles extraídos el primer año ๐‘ฅ+ โ‰” millones de barriles extraídos el segundo año La función objetivo corresponde a maximizar los ingresos, ๐‘ ๐‘ฅ) , ๐‘ฅ+ = ๐‘ฅ) 30 โˆ’ ๐‘ฅ) +
๐‘ฅ+ 35 โˆ’ ๐‘ฅ+ โˆ’ ๐‘ฅ)+ โˆ’ 2๐‘ฅ++ . Las restricciones del problema: -­โ€โ€‘ Gastar como máximo 250 euros en la extracción: ๐‘ฅ)+ + 2๐‘ฅ++ โ‰ค 250 -­โ€โ€‘ Obtener como máximo 20 millones de barriles: ๐‘ฅ) + ๐‘ฅ+ โ‰ค 20 Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
-­โ€โ€‘ No negatividad: ๐‘ฅ) โ‰ฅ 0, ๐‘ฅ+ โ‰ฅ 0 Por lo tanto nuestro modelo se puede escribir completo de la forma: min ๐‘ ๐‘ฅ) , ๐‘ฅ+ = ๐‘ฅ) 30 โˆ’ ๐‘ฅ) + ๐‘ฅ+ 35 โˆ’ ๐‘ฅ+ โˆ’ ๐‘ฅ)+ โˆ’ 2๐‘ฅ++ s.a. ๐‘ฅ)+ + 2๐‘ฅ++ โ‰ค 250 ๐‘ฅ) + ๐‘ฅ+ โ‰ค 20 ๐‘ฅ) โ‰ฅ 0, ๐‘ฅ+ โ‰ฅ 0 Ejemplo 4: Las variables de decisión del problema: ๐‘ฅ) โ‰” minutos que se compran en televisión ๐‘ฅ+ โ‰” minutos que se compran en radio La función objetivo corresponde a maximizar los ingresos, ๐‘ ๐‘ฅ) , ๐‘ฅ+ = โˆ’2๐‘ฅ)+ โˆ’ ๐‘ฅ++ + ๐‘ฅ) ๐‘ฅ+ +
8๐‘ฅ) + 3๐‘ฅ+ . Las restricciones del problema: -­โ€โ€‘ Gastar 10000 dólares en publicidad en ambos medios: 3000๐‘ฅ) + 1000๐‘ฅ+ โ‰ค 10000 Por lo tanto nuestro modelo se puede escribir completo de la forma: min ๐‘ ๐‘ฅ) , ๐‘ฅ+ = โˆ’2๐‘ฅ)+ โˆ’ ๐‘ฅ++ + ๐‘ฅ) ๐‘ฅ+ + 8๐‘ฅ) + 3๐‘ฅ+ Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
Resolución usando Matlab: Recordar la siguiente estructura vista en el laboratorio: Ejemplo 1: fa = @(x) -4*x(1) - 2*x(2) + 0.5*x(1)^2 + 0.25*x(2)^2;
%Recuerden la función objetivo se multiplica por -1 para quedar en min
A = [480 300];
b = 24000;
Aeq = [];
beq = [];
lb = [0;0];
lu = [];
x0 = [0;0];
%Se deben dar una solución factible fácil, recuerden que factible es que
cumpla todas las restricciones
options=optimset('Algorithm','active-set');
[x,fval,e,output,lambda,G,H] = fmincon(fa, x0, A, b, [], [], lb,
lu,[],options)
%%%%%%%%%%%%%%%%RESULTADOS%%%%%%%%%%%%%%%%%%%
>> lagrange
Local minimum possible. Constraints satisfied.
fmincon stopped because the predicted change in the objective function
is less than the default value of the function tolerance and constraints
are satisfied to within the default value of the constraint tolerance.
<stopping criteria details>
No active inequalities.
Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
x =
x1 = 4.0000 %materia prima 1
x2 = 4.0001 %materia prima 2
fval = función objetivo
-12.0000
e =
5
output =
iterations:
funcCount:
lssteplength:
stepsize:
algorithm:
firstorderopt:
constrviolation:
message:
6
18
1
6.7460e-05
'medium-scale: SQP, Quasi-Newton, line-search'
3.3616e-05
-4.0000
'Local minimum possible. Constraints satisfied.
fmincon stopped because ...'
lambda =
lower:
upper:
eqlin:
eqnonlin:
ineqlin:
ineqnonlin:
[2x1
[2x1
[0x1
[0x1
0
[0x1
Gradiente =
1.0e-04 *
0.1329
0.3362
Hessiana =
1.0014
-0.0037
-0.0037
0.5094
double]
double]
double]
double]
double]
Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
Ejemplo 2: fa = @(x) x(1)^2 + x(2)^2 + x(3)^2 +12*(x(1)-50)+12*(x(1)+x(2)-50);
A = [-1 0 0;-1 -1 0;-1 -1 -1];
b = [-50;-100;-150];
%recordar que las restricciones deben ser del tipo <= por lo tanto
multiplicamos por -1 para dejar <=
Aeq = [];
beq = [];
lb = [50;0;0];
lu = [];
x0 = [50;0;0];
options=optimset('Algorithm','active-set');
[x,fval,e,output,lambda,G,H] = fmincon(fa, x0, A, b, [], [], lb,
lu,[],options)
%%%%%%%%%%%%%%%%RESULTADOS%%%%%%%%%%%%%%%%%%%
Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing
in
feasible directions, to within the default value of the function
tolerance,
and constraints are satisfied to within the default value of the
constraint tolerance.
<stopping criteria details>
Active inequalities (to within options.TolCon = 1e-06):
lower
upper
ineqlin
ineqnonlin
1
1
2
3
x =
50.0000 %ampolletas primer mes
50.0000 %ampolletas segundo mes
50.0000 %ampolletas tercer mes
fval =
8.1000e+03
e =
1
Investigación de Operaciones I
Profesor: Jaime Carrasco
Ayudante: Jorge Pontigo
output =
iterations:
funcCount:
lssteplength:
stepsize:
algorithm:
firstorderopt:
constrviolation:
message:
2
8
1
0
'medium-scale: SQP, Quasi-Newton, line-search'
0
0
'Local minimum found that satisfies the constraints.
Optimization comple...'
lambda =
lower: [3x1 double]
upper:
eqlin:
eqnonlin:
ineqlin:
ineqnonlin:
[3x1
[0x1
[0x1
[3x1
[0x1
double]
double]
double]
double]
double]
Gradiente =
124.0000
112.0000
100.0000
Hessiana =
1.0000
0.0000
0.0000
0.0000
1.5000
0.5000
Ejemplo 3: (propuesto) Ejemplo 4: (propuesto) 0.0000
0.5000
1.5000