Casos prácticos con AMPL - Departamento de...

23
Programación Lineal y Entera Balbina Virginia Casas Méndez Casos prácticos con AMPL MÁSTER EN TÉCNICAS ESTADÍSTICAS Curso 2010/11

Transcript of Casos prácticos con AMPL - Departamento de...

Page 1: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Programación Lineal y Entera

Balbina Virginia Casas Méndez

Casos prácticos con AMPL

MÁSTER EN TÉCNICAS ESTADÍSTICAS

Curso 2010/11

Page 2: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

IntroducciónEl lenguaje AMPLOptimizadores: KNITROEl servidor NEOS

Caso 1: Problema del TransporteUn modelo para el Problema del TransporteUn modelo AMPL para el Problema del Transporte

Enlaces en INTERNET

Page 3: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

IntroducciónEl lenguaje AMPLOptimizadores: KNITROEl servidor NEOS

Caso 1: Problema del TransporteUn modelo para el Problema del TransporteUn modelo AMPL para el Problema del Transporte

Enlaces en INTERNET

Page 4: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

IntroducciónEl lenguaje AMPLOptimizadores: KNITROEl servidor NEOS

Caso 1: Problema del TransporteUn modelo para el Problema del TransporteUn modelo AMPL para el Problema del Transporte

Enlaces en INTERNET

Page 5: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

IntroducciónEl lenguaje AMPLOptimizadores: KNITROEl servidor NEOS

Caso 1: Problema del Transporte

Enlaces en INTERNET

Page 6: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Lenguaje AMPLAMPL es un lenguaje de modelado algebraico paraprogramación matemática: un lenguaje capaz de expresar ennotación algebraica problemas de optimización tales como losproblemas de programación lineal y entera.

La gran potencia del lenguaje AMPL está en separar elmodelo en sí por un lado y por otro los datos particulares delproblema concreto.

Los modelos AMPL involucran variables, restricciones yobjetivos, expresados con la ayuda de conjuntos yparámetros. A todos se les llama elementos del modelo.

La llamada a AMPL normalmente causa la entrada en unentorno de comandos, donde los comandos pueden serintroducidos interactivamente. Las declaraciones del modelo ylas instrucciones de introducción de datos son tambiénaceptados como comandos.

Page 7: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

IntroducciónEl lenguaje AMPLOptimizadores: KNITROEl servidor NEOS

Caso 1: Problema del Transporte

Enlaces en INTERNET

Page 8: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

KNITRO es un software para resolver problemas deoptimización matemática a gran escala. KNITRO estáespecializado en optimización no lineal, pero tambiénresuelve problemas de programación lineal, problemas deprogramación cuadrática y sistemas de ecuaciones no lineales.Puede resolver también problemas con variables que tomanvalores enteros.

Los problemas de optimización deben ser presentados enforma matemática. Los problemas pueden ser escritos en C,C++, Fortran, o Java, en cuyo caso KNITRO se llama comouna rutina software para resolver el problema.

Una a menudo sencilla aproximación es desarrollar elproblema de optimización en un lenguaje de modeladoalgebraico (AML) como AIMMS, AMPL, GAMS, Mathematica,etc. KNITRO se llama como un “solver" desde dentro de algúnentorno o servidor.

Page 9: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

KNITRO ofrece tres algoritmos para resolver problemas deoptimización. Dos son de los denominados de punto interior yuno es de los denominados de conjuntos activos.

Los métodos de punto interior siguen un camino a través delinterior de la región factible mientras que los métodos deconjuntos activos tienden a permanecer en la frontera.KNITRO proporciona ambos tipos de algoritmos para mayorflexibilidad en la resolución de problemas y permite pasar deuno a otro durante el proceso de obtención de la solución.

Proporciona una opción de “multistart" para promover elcálculo del óptimo global y utiliza algoritmos de “branch andbound" ante la presencia de variables enteras.

KNITRO, acrónimo de “Nonlinear Interior point Trust RegionOptimization" (la “K" es muda) fue creado en 2001 enNorthwestern por R. Waltz, J. Nocedal, T. Plantenga y R. Byrd.Está comercializado por Ziena Optimization, Inc.

Page 10: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

IntroducciónEl lenguaje AMPLOptimizadores: KNITROEl servidor NEOS

Caso 1: Problema del Transporte

Enlaces en INTERNET

Page 11: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Podemos acceder a este servidor libre en la dirección:

http://www-neos.mcs.anl.gov/

Los problemas de optimización se resuelven automáticamente.El usuario debe proporcionar una definición del problema(modelo, datos concretos y comandos a ejecutar en ficherosde texto) y toda la información adicional requerida por el“solver" de optimización se determina automáticamente. Losresultados son enviados a la dirección de correo electrónicoproporcionada por el usuario.

Es necesario escoger un “solver" según el tipo de problema deoptimización que se quiera resolver y en caso de duda sepuede consultar el “Optimization Tree" de la guía de NEOS. Laelección del “solver" también depende del lenguaje utilizadopara definir el problema de optimización.

Page 12: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Introducción

Caso 1: Problema del TransporteUn modelo para el Problema del TransporteUn modelo AMPL para el Problema del Transporte

Enlaces en INTERNET

Page 13: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Un ejemplo de problema del transporte: resolucióninformática (Parlar, 2000; Fourer y otros, 2002)

Ejemplo. Gastos de envío de esquíes. Para ilustrar estemodelo vamos a considerar el problema de SunSno, unaempresa multinacional con tres factorías en (1) Jasper,Canadá, (2) Seoul, Korea, and (3) Toronto, Canadá. SunSnotransporta esquíes a cuatro empresas propietarias dealmacenes en (1) Frankfurt, Alemania, (2) New York, USA, (3)París, Francia, y (4) Yokohama, Japón.

Las capacidades de producción semanales, ai , i = 1; 2; 3 delas m = 3 factorías y las demandas semanales, bj ,j = 1; 2; 3; 4 de los n = 4 almacenes están dados en lasiguiente tabla donde también indicamos los costes por unidadde transporte cij , i = 1; 2; 3 y j = 1; 2; 3; 4.

Page 14: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Desde# n A! Frankfurt NY París Yoko- SUMI-hama NISTRO

Jasper 19 7 13 8 100Seoul 15 21 18 6 300Toronto 11 3 12 20 200DEMANDA 150 100 200 150 600

Para resolver este problema como uno de programación lineal,definimos las variables Xij como el número de unidadestransportadas desde la factoría i al almacén j para las factoríasi = 1; � � � ;m y los almacenes j = 1; � � � ;n.

De esta forma, el modelo de programación lineal del problemadel transporte toma la siguiente forma:

Page 15: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Min Z = 19X11 + 7X12 + 13X13 + 8X14 + 15X21 + 21X22 +

18X23 + 6X24 + 11X31 + 3X32 + 12X33 + 20X34

sujeto a

X11 + X12 + X13 + X14 = 100 (Capacidad de Jasper)X21 + X22 + X23 + X24 = 300 (Capacidad de Seoul)X31 + X32 + X33 + X34 = 200 (Capacidad de Toronto)X11 + X21 + X31 = 150 (Demanda de Frankfurt)X12 + X22 + X32 = 100 (Demanda de New York)X13 + X23 + X33 = 200 (Demanda de París)X14 + X24 + X34 = 150 (Demanda de Yokohoma)

Todo Xij � 0:

Page 16: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Introducción

Caso 1: Problema del TransporteUn modelo para el Problema del TransporteUn modelo AMPL para el Problema del Transporte

Enlaces en INTERNET

Page 17: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

El modelo del Transporte (transp_mod.txt)

set ORIG; # orígenesset DEST; # destinosparam capacidad fORIGg >= 0; # cantidades en orígenesparam demanda fDESTg >= 0; # cantidades en destinoscheck:

sum fi in ORIGg capacidad[i] = sum fj in DESTgdemanda[j];

param coste fORIG,DESTg >= 0; # coste unitariovar Trans fORIG,DESTg >= 0; # unidades a ser transportadasminimize Coste_Total:

sum fi in ORIG, j in DESTg coste[i,j] * Trans[i,j];subject to Capacidad fi in ORIGg:

sum fj in DESTg Trans[i,j] = capacidad[i];subject to Demanda fj in DESTg:

sum fi in ORIGg Trans[i,j] = demanda[j];

Page 18: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Datos para el modelo del Transporte (transp_dat.txt)# definimos los conjuntos “ORIG" y “DEST" y los parámetros“capacidad" y “demanda"param: ORIG: capacidad :=

JASPER 100SEOUL 300TORONTO 200 ;

param: DEST: demanda :=FRANKFURT 150NEWYORK 100PARIS 200YOKOHAMA 150 ;

param coste:FRANKFURT NEWYORK PARIS YOKOHAMA :=

JASPER 19 7 13 8SEOUL 15 21 18 6

TORONTO 11 3 12 20 ;

Page 19: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Comandos para el modelo del Transporte(transp_run.txt)

#Ejemplo del problema del transporte

solve;

display Trans, Coste_Total;

Page 20: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Resultados para el modelo del Transporte

NEOS Server Version 5.0Host : vieta.mcs.anl.gov

1 linear objective;

KNITRO 6.0.0:Objective goal: MinimizeNumber of variables: 12bounded below: 12Number of constraints: 7linear equalities: 7No start point provided – KNITRO computing one.KNITRO changing algorithm from AUTO to 1.

Total program time (secs) = 0.003526 iterations; 7 function evaluations

Page 21: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Trans :=

JASPER FRANKFURT 0JASPER NEWYORK 0JASPER PARIS 100JASPER YOKOHAMA 0SEOUL FRANKFURT 150SEOUL NEWYORK 0SEOUL PARIS 0SEOUL YOKOHAMA 150TORONTO FRANKFURT 0TORONTO NEWYORK 100TORONTO PARIS 100TORONTO YOKOHAMA 0;

Coste_Total = 5950

Page 22: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Referencias Bibliográficas

I FOURER, R. / GAY, D. M. / KERNIGHAM, B. W. (2002):“AMPL: A modeling language for MathematicalProgramming". Ed. Duxbury Press.

I HILLIER, F. / LIEBERMAN, G. (2005): “Introduction tooperations research". Ed. McGraw-Hill.

I NOCEDAL, J. / WRIGHT, S. J. (2006): “NumericalOptimization", 2nd Edition. Ed. Springer.

I PARLAR, M. (2000): “Interactive operations research withMaple. Methods and models". Ed. Birkhäuser.

Page 23: Casos prácticos con AMPL - Departamento de …eio.usc.es/eipc1/base/BASEMASTER/FORMULARIOS-PHP/... · resuelve problemas de programación lineal ... Los problemas pueden ser escritos

Enlaces en INTERNET

I Libro y software AMPL:http://www.ampl.com

I KNITRO: An Integrated Package for NonlinearOptimization. R.H. Byrd, J. Nocedal, R.A. Waltz (2006)(PDF):http://www.ziena.com/papers/integratedpackage.pdf

I Plataforma NEOS:http://neos.mcs.anl.gov/neos/solvers/index.html

I Apuntes:http://destio.us.es/calvo/ampl2a.pdf

I Grupo de trabajo en Google grupos:http://groups.google.com/group/ampl