Modelado Algebraico Computacional Contenido 1 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 1/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Lenguajes de modelado algebraico Basados en notación algebraica; incorporan conjuntos y relaciones entre estos para modelar datos. Algunos ejemplos: 1 GAMS General Algebraic Modeling System 2 Xpress Modelado matemático y optimización 3 AMPL A Modeling Language for Mathematical Programming 4 MathProg Lenguaje de GNU Linear Programming Kit (GLPK) Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 2/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Ejemplo problema de transporte “Cuantas unidades de mercadería deben producirse en un conjunto de plantas para ser transportadas hacia una conjunto de mercados, sin superar la capacidad de cada plantas y satisfaciendo las demandas de los mercados, al menor costo de transporte posible.” Conjuntos i ∈ I: Plantas, j ∈ J: Mercados Parámetros ai capacidad de planta i bj demanda del mercado j cij costo de transporte por unidad entre planta i y mercado j Variable de decisión xij cantidad de mercancía a enviar desde planta i a mercado j, no negativa y entera. Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 3/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Formulación ejemplo problema de transporte P P min c x Pi∈I j∈J ij ij s.a. x ≤ ai , ∀i ∈ I, Pj∈J ij ∀j ∈ J, i∈I xij ≥ bj , xij ≥ 0, entero, ∀i ∈ I, ∀j ∈ J. Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 4/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Formulación ejemplo problema de transporte vs GNU Mathprog P P min c x Pi∈I j∈J ij ij s.a. x ≤ ai , ∀i ∈ I, Pj∈J ij x ∀j ∈ J, i∈I ij ≥ bj , xij ≥ 0, entero, ∀i ∈ I, ∀j ∈ J. Facultad de Ingeniería. UdelaR minimize cost: sum{i in I, j in J} c[i,j] * x[i,j]; s.t. supply{i sum{j in J} s.t. demand{j sum{i in I} in I}: x[i,j] <= a[i]; in J}: x[i,j] >= b[j]; Fundamentos de Programación Entera 5/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema de transporte modelado en GNU Mathprog set I; set J; param a{i in I}; param b{j in J}; param c{i in I, j in J}; var x{i in I, j in J} >= 0, integer; minimize cost: sum{i in I, j in J} c[i,j] * x[i,j]; s.t. supply{i in I}: sum{j in J} x[i,j] <= a[i]; s.t. demand{j in J}: sum{i in I} x[i,j] >= b[j]; end; Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 6/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema de transporte modelado en GNU Mathprog (datos) set I := Seattle San-Diego; set J := New-York Chicago Topeka; param a := Seattle 350, San-Diego 600; param b := New-York 325 Chicago 300 Topeka 275; param c : New-York Chicago Topeka := Seattle 0.225 0.153 0.162 San-Diego 0.225 0.162 0.126 ; end; Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 7/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema de transporte modelado en GNU Mathprog (modelo y datos juntos 1/5) Alternativamente el modelo y los datos a usar pueden especificarse en conjunto en un mismo archivo. Lo que sigue es el modelo completo con comentarios, separado en varias diapositivas. # # # # # # # # # Problema de Transporte Determina el envio de costo minimo que cumple con los requisitos de demanda de mercados y suministro de fabricas. Basado en Dantzig, G B., Linear Programming and Extensions. Princeton University Press, Princeton, New Jersey, 1963, Chapter 3-3. Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 8/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema de transporte modelado en GNU Mathprog (modelo y datos juntos 2/5) /* plantas */ set I; /* mercados */ set J; /* capacidad de planta i */ param a{i in I}; /* demanda de mercado j */ param b{j in J}; Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 9/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema de transporte modelado en GNU Mathprog (modelo y datos juntos 3/5) /* costo de transporte por unidad desde la planta i al mercado j */ param c{i in I, j in J}; /* unidades de mercadería producidas en la planta i para el mercado j */ var x{i in I, j in J} >= 0, integer; /* costo total de transporte */ minimize cost: sum{i in I, j in J} c[i,j] * x[i,j]; /* restringe suministro en planta i */ s.t. supply{i in I}: sum{j in J} x[i,j] <= a[i]; Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 10/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema de transporte modelado en GNU Mathprog (modelo y datos juntos 4/5) /* satisface demanda en mercado j */ s.t. demand{j in J}: sum{i in I} x[i,j] >= b[j]; data; set I := Seattle San-Diego; set J := New-York Chicago Topeka; param a := Seattle 350, San-Diego 600; param b := New-York 325 Chicago 300 Topeka 275; Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 11/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema de transporte modelado en GNU Mathprog (modelo y datos juntos 5/5) param c : New-York Seattle 0.225 San-Diego 0.225 Chicago 0.153 0.162 Topeka := 0.162 0.126 ; end; Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 12/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema transporte: resolución mediante GNU glpsol Para la resolción, se almacenan el modelo y los datos en archivos de texto transp.mod y transp.dat respectivamente. Se resuelve invocando al solver en línea de comando: > glpsol --model transp.mod --data transp.dat --output transp.sol Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 13/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema transporte: resolución mediante GNU glpsol Para la resolción, se almacenan el modelo y los datos en archivos de texto transp.mod y transp.dat respectivamente. Se resuelve invocando al solver en línea de comando: > glpsol --model transp.mod --data transp.dat --output transp.sol Lo que sigue es un extracto de la salida transp.sol Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 13/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema transporte: solución 1/2 Problem: Rows: Columns: Non-zeros: Status: Objective: transp 6 6 (6 integer, 0 binary) 18 INTEGER OPTIMAL cost = 153.675 (MINimum) No. Row name Activity Lower bound Upper bound ------ ------------------------ ------------- ------------1 cost 153.675 2 supply[Seattle] 350 350 3 supply[San-Diego] 550 600 4 demand[New-York] 325 325 5 demand[Chicago] 300 300 6 demand[Topeka] 275 275 ... Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 14/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK Problema transporte: solución 2/2 ... No. Column name Activity Lower bound Upper bound ------ ------------------------ ------------- ------------1 x[Seattle,New-York] 50 0 * 2 x[Seattle,Chicago] 300 0 * 3 x[Seattle,Topeka] 0 0 * 4 x[San-Diego,New-York] 275 0 * 5 x[San-Diego,Chicago] 0 0 * 6 x[San-Diego,Topeka] 275 0 * ... Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 15/16 Modelado Algebraico Computacional Lenguajes de modelado algebraico Ejemplo Problema de Transporte Modelado con GNU GLPK GNU Linear Programming Kit (GLPK) GLPK permite resolver problemas grandes de programación lineal y pequeños de programación entera-mixta. Está implementado utilizando el lenguaje de programación C. Está constituído básicamente por un solver LP/MIP de línea de comandos, un traductor de GNU MathProg, y una API en C que permite acceder a su funcionalidad programáticamente. Su solver utiliza diferentes algoritmos: métodos simplex primal y dual, punto interior primal-dual y branch and cut. Sitio GLPK http://www.gnu.org/software/glpk/glpk.html GLPK para Windows http://winglpk.sourceforge.net/ Facultad de Ingeniería. UdelaR Fundamentos de Programación Entera 16/16