Optimización lineal con R José R. Berrendero



Documentos relacionados
CAPÍTULO 11 INVESTIGACIÓN OPERATIVA CON R 3.- LOS PROBLEMAS DE TRANSPORTE Y DE ASIGNACIÓN

Programación Lineal con Matlab

Dirección de Operaciones. SESIÓN # 5: El método simplex. Segunda parte.

4. Método Simplex de Programación Lineal

La programación lineal hace referencia al uso eficiente o distribución de recursos limitados, para alcanzar unos objetivos determinados.

Opción A. Alumno. Fecha: 23 Noviembre 2012

Ejemplo : PROGRAMACIÓN LINEAL

UNIVERSIDAD NACIONAL DE INGENIERÍA UNI RUACS ESTELI

PASO 1: Poner el problema en forma estandar.

3. Métodos clásicos de optimización lineal

Programación Lineal y Optimización Primer Examen Parcial :Solución Profr. Eduardo Uresti, Enero-Mayo 2011

PROBLEMAS PROGRAMACIÓN LINEAL CONTINUA

Problemas de Programación Lineal: Método Simplex

Tema 5 Dualidad y condiciones de Karush-Kuhn-Tucker

El Método Simplex. H. R. Alvarez A., Ph. D. 1

MÉTODO SIMPLEX MÉTODO DE SOLUCIÓN GRÁFICO

315 M/R Versión 1 Integral 1/ /1 UNIVERSIDAD NACIONAL ABIERTA VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA

EL MÉTODO SIMPLEX ALGEBRAICO: MINIMIZACION. M. En C. Eduardo Bustos Farías

Pasos en el Método Simplex

Definición de problemas de programación lineal. Método gráfico. Método del SIMPLEX. Método de las dos fases. Análisis de sensibilidad y problema dual

EL MÉTODO SIMPLEX ALGEBRAICO. M. En C. Eduardo Bustos Farías

PROGRAMACION ENTERA. M. en C. Héctor Martínez Rubin Celis 1

Tema 3 Optimización lineal. Algoritmo del simplex

Tema II: Programación Lineal

PROGRAMACIÓN LINEAL. 1. Introducción

Desarrollo de las condiciones de optimalidad y factibilidad. El problema lineal general se puede plantear como sigue:

CLAVE: MIS 206 PROFESOR: MTRO. ALEJANDRO SALAZAR GUERRERO

Si el objetivo es maximizar, entonces se tiene la forma estándar de maximización y, si el objetivo es minimizar, la forma estándar de minimización.

DUALIDAD EN PROGRAMACION LINEAL

EL MÉTODO SIMPLEX. los redondos. Por último, a los manteles rectangulares se les deben colocar cuatro esquineros de refuerzo.

EJEMPLO DE SIMPLEX PARA PROBLEMA DE PROGRAMACIÓN LINEAL CASO DE MAXIMIZAR Prof.: MSc. Julio Rito Vargas Avilés

Tema # 7. método simplex matricial o revisado

UNIDAD UNO PROGRAMACIÓN LÍNEAL Parte 3

Dualidad 1. 1 Formas simétricas. 2 Relación primal-dual. 3 Dualidad: el caso general. 4 Teoremas de dualidad. 5 Condiciones de holgura complementaria.

TEMA 3: EL MÉTODO SIMPLEX

METODO SIMPLEX ANALISIS DE SENSIBILIDAD Y DUALIDAD

Resolución. Resolución gráfica de problemas de optimización

MÉTODO SIMPLEX MÉTODO DE SOLUCIÓN GRÁFICO. M. En C. Eduardo Bustos Farías

MÉTODO SIMPLEX. PROFESORA: LILIANA DELGADO HIDALGO Estandarización Tradicional

6.2 OBSERVACIONES IMPORTANTES AL UTILIZAR MÉTODO SIMPLEX


Instituto tecnológico de Minatitlán. Investigación de operaciones Ing. Erika Lissette Minaya mortera Unidad 3: programación no lineal

2.2 PROGRAMACION LINEAL: METODOS DE SOLUCION

Qué es la programación lineal?

UNIDAD III. INVESTIGACIÓN DE OPERACIONES

PROBLEMAS RESUELTOS SELECTIVIDAD ANDALUCÍA 2008 MATEMÁTICAS APLICADAS A LAS CIENCIAS SOCIALES TEMA 3: PROGRAMACIÓN LINEAL

Para que un problema pueda ser solucionado por el método de transporte, este debe reunir tres condiciones:

Cómo resolver el Método Simplex, con penalizaciones, o gran M

WinQSB. Módulo de Programación Lineal y Entera. Al ejecutar el módulo Linear and Integer Programming, la ventana de inicio es la siguiente:

INDICE Parte I Inducción a la programación lineal Capitulo 1 Origen y definición de la programación lineal Capitulo 2 Modelación y formulación

WinQSB. Módulo de Programación Lineal y Entera. Al ejecutar el módulo Linear and Integer Programming, la ventana de inicio es la siguiente

PROGRAMACIÓN LINEAL ENTERA

Por Sustitución: y= 2x+6 x + 3 (2x+6) = 4 x + 6x + 18 = 4 7x = -14 x= -2 y=2 (-2)+6 y=2. Por Igualación: 6x+18=4-x 7x=-14 x= -2 y=2 (-2)+6 y=2

Universidad Tec Milenio: Profesional IO04001 Investigación de Operaciones I. Tema # 6. revisado

Módulo Programación lineal. 3 Medio Diferenciado

Sistemas de ecuaciones lineales

TEMA III MÉTODO SIMPLEX. CONCEPTOS BÁSICOS

UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA GERENCIA ACADEMICA COORDINACION DE PREGRADO PROYECTO INGENIERIA /ALGEBRA DE ESTRUCTURAS SEMESTRE:

Formulación de un Modelo de Programación Lineal

APLICACIONES DE AS: EJEMPLOS

4. Métodos de Solución PPL : Solución Algebraica: METODO SIMPLEX Primera Parte

P. A. U. LAS PALMAS 2005

Requisitos para formular un problema de programación lineal UNIDAD III. INVESTIGACIÓN DE OPERACIONES APLICADA A LOS NEGOCIOS

PLs no acotados El método símplex en dos fases PLs no factibles. Investigación Operativa, Grado en Estadística y Empresa, 2011/12

Sistemas de Ecuaciones Lineales

Sistemas de ecuaciones lineales 4

Polinomios. 1.- Funciones cuadráticas

METODO SIMPLEX NOTAS DE CLASE: INVESTIGACIÓN DE OPERACIONES I UNIVERSIDAD CENTRAL PROFESOR CARLOS DÍAZ. Max Z= 12X X 2

1. RESOLVER el siguiente problema de programación lineal. max z =15x x 2 suj.a : 2x 1 + x x 1 + x x 1 500

1.4 SISTEMAS HOMOGÉNEOS DE ECUACIONES. 36 CAPÍTULO 1 Sistemas de ecuaciones lineales y matrices

Programación lineal: Algoritmo del simplex

Programación Lineal. Unidad 1 Parte 2

Propuesta A. 2 0 b) Dada la ecuación matricial: X = , despeja y calcula la matriz X. (0.75 ptos) 2 1

PROBLEMAS de Programación Lineal : Resolución Gráfica

Práctica 1: Introducción a SPSS 1

En el siguiente capítulo se hará un repaso de algunas propiedades básicas de conjuntos convexos, para después explicar el método simplex.

(2.c) RESOLUCIÓN DE MODELOS LINEALES. ALGORITMO DEL SIMPLEX

PREPARANDO EL MODELO PARA ADAPTARLO AL MÉTODO SIMPLEX. a21 x1 + a22 x a2n xn = b2... am1 x1 + am2 x amn xn = bm x1,...

Programación Lineal. María Muñoz Guillermo Matemáticas I U.P.C.T. M. Muñoz (U.P.C.T.) Programación Lineal Matemáticas I 1 / 13

PROBLEMAS DE OPTIMIZACIÓN LINEAL

Método Simplex: Encontrado una SBF

84 Tema 3. Dualidad. todas las restricciones son del tipo, todas las variables son no negativas.

Forma estándar de un programa lineal

PROBLEMA DEL TRANSPORTE VRP (VEHICLE ROUTING PROBLEM)

Forma estándar de un PPL con m restricciones y n variables. (b 0)

Problemas de transporte, asignación y trasbordo

La solución inicial puede ser óptima o no, la forma de saberlo es realizando la prueba de optimalidad que consiste en los siguientes pasos:

5.1. Algoritmo en modelos de maximización

TEMA 11. Autovalores y autovectores. Diagonalización y formas canónicas.

MENORES, COFACTORES Y DETERMINANTES

RESOLUCIÓN DE ECUACIONES E INECUACIONES

PROGRAMACIÓN LINEAL CON EXCEL: ESTABILIDAD DE LA SOLUCIÓN

Programación Lineal. Optimización de la combinación de cifras comerciales en una red lineal de distribución de agua.

Matrices escalonadas y escalonadas reducidas

EJERCICIOS DE INECUACIONES

Programación Lineal. - Si no: Sea j tal que c

Líneas y Planos en el Espacio

RESOLUCIÓN DE PROBLEMAS DE PROGRAMACIÓN LINEAL CON LA CALCULADORA

MÁXIMOS Y MINIMOS. Marco Antonio Cruz Chávez

LA MAXIMIZACION DE BENEFICIOS CON UN INSUMO VARIABLE

Transcripción:

Optimización lineal con R José R. Berrendero Introducción Veamos cómo se pueden resolver problemas de optimización lineal con R a través de algunos ejemplos sencillos. La mayor parte de las funciones necesarias pueden encontrarse en el paquete lpsolve (Berkelaar et al, 2014) que a su vez esta basado en el proyecto de código abierto lp_solve. Otro paquete alternativo que también se puede usar es linprog. El paquete lpsolve Un problema en forma canónica Como ejemplo vamos a usar el siguiente problema: Un pastelero dispone de 150 kg de harina, 22 kg de azúcar y 27.5 kg de mantequilla para elaborar dos tipos de pasteles (A y B). Cada caja de pasteles de tipo A requiere 3 kg de harina, 1 kg de azúcar y 1 kg de mantequilla y su venta le reporta un beneficio de 20 euros. Cada caja de pasteles de tipo B requiere 6 kg de harina, 0.5 kg de azúcar y 1 kg de mantequilla y su venta le reporta un beneficio de 30 euros. Cuántas cajas de cada tipo debe elaborar el pastelero de manera que se maximicen sus ganancias? (Se supone en principio que también puede elaborar cajas incompletas, es decir, que no se trata de un problema de programación entera.) La forma canónica de un problema de optimización lineal es max c x s.a. Ax b, x 0. La forma canónica del problema que vamos a resolver como ejemplo es: max 20x 1 + 30x 2 s.a. 3x 1 + 6x 2 150 x 1 + 0.5x 2 22 x 1 + x 2 27.5 x 1 0, x 2 0. Para resolverlo basta llamar a la función lp y pasarle como argumentos de forma ordenada los parámetros que definen el problema. El orden de los parámetros es el siguiente: 1. 'min' o 'max' en función de si el problema es de minimización o maximización. 2. El vector de coeficientes de la función objetivo. En el ejemplo c = (20, 30). 3. La matriz de coeficientes de las variables en las ecuaciones que definen las restricciones. En el ejemplo, A = 3 6 1 0.5 1 1 4. Un vector que determina la dirección de las restricciones: <=, >= o =. En el ejemplo las tres desigualdades son del tipo <=.. 1

5. El vector con los términos independientes de las restricciones. En el ejemplo b = (150, 22, 22.5). Por defecto se supone que las variables de decisión no pueden ser negativas. El siguiente código define todos los parámetros del problema y se los pasa como argumentos a la función lp en el orden que hemos indicado: library(lpsolve) # Parametros del problema coef <- c(20, 30) A <- matrix(c(3, 1, 1, 6, 0.5, 1), ncol=2) b <- c(150, 22, 27.5) dir <- rep('<=', 3) # Solucion solucion <- lp('max', coef, A, dir, b) El objeto solucion que hemos generado al ejecutar la última línea es una lista con diversos elementos entre los cuáles los más importantes son objval, el valor objetivo óptimo, y solution, las coordenadas de la solución factible óptima del problema: solucion$objval [1] 775 solucion$solution [1] 5.0 22.5 Esto significa que la producción óptima del pastelero es de 5 cajas de A y 22.5 cajas de B, con lo que tendrá el máximo beneficio posible de 775 euros. Programación entera Supongamos ahora que el pastelero solo puede fabricar un numero entero de cajas de cada tipo, es decir, que las variables x 1 y x 2 solo pueden tomar valores enteros. La forma de indicar esta restricción adicional es añadiendo en la función lp el argumento all.int=true (también existe la posibilidad de restringir únicamente un subconjunto de las variables): solucion <- lp('max', coef, A, dir, b, all.int=true) solucion$objval [1] 770 solucion$solution [1] 4 23 En este caso, la producción óptima del pastelero es de 4 cajas de A y 23 cajas de B, y el beneficio de 770 euros. 2

Problema de transporte El paquete lpsolve incluye también la función lp.transport para resolver el problema de transporte. Como ejemplo, vamos a resolver el problema de transporte definido por los siguientes datos: 3 4 6 8 9 30 2 2 4 5 5 80 2 2 2 3 3 10 3 3 2 4 2 60 10 50 20 80 20 Las filas corresponden a los lugares de origen y las columnas a los lugares de destino. Los valores de la matriz son los costes de transporte desde cada origen a cada destino. El último elemento de cada fila es la oferta de producto en cada origen. El último elemento de cada columna es la demanda total en cada destino. A continuación definimos todos los parámetros del problema y los pasamos como argumentos de lp.transport en el orden adecuado: cost <- matrix(c(3, 2, 2, 3, 4, 2, 2, 3, 6, 4, 2, 2, 8, 5, 3, 4, 9, 5, 3, 2), ncol=5) direction <- 'min' row.signs <- rep('=', 4) row.rhs <- c(30, 80, 10, 60) col.signs <- rep('=', 5) col.rhs <- c(10, 50, 20, 80, 20) lp.transport(cost, direction, row.signs, row.rhs, col.signs, col.rhs) Success: the objective function is 610 lp.transport(cost, direction, row.signs, row.rhs, col.signs, col.rhs)$solution [,1] [,2] [,3] [,4] [,5] [1,] 10 20 0 0 0 [2,] 0 30 0 50 0 [3,] 0 0 0 10 0 [4,] 0 0 20 20 20 La solución óptima del problema es transportar 10 desde el origen 1 hasta el destino 1, 20 desde el origen 1 hasta el destino 2, 30 desde el origen 2 hasta el destino 2, etc. Esta solución óptima conlleva un coste de 610. Problema de asignación Para resolver el problema de asignación el paquete lpsolve incluye la función lp.assign. Como ejemplo, vamos a resolver el problema de asignación definido por la matriz: 15 10 9 9 15 10 10 12 8 Las filas corresponden a los trabajadores y las columnas a las tareas. Cada elemento de la matriz representa el coste de asignar la tarea i al trabajador j. A continuación definimos la matriz de costes, que es el unico argumento de lp.assign: 3

cost <- matrix(c(15, 9, 10, 10, 15, 12, 9, 10, 8), nrow=3) lp.assign(cost) Success: the objective function is 27 lp.assign(cost)$solution [,1] [,2] [,3] [1,] 0 1 0 [2,] 1 0 0 [3,] 0 0 1 La solución óptima es asignar la tarea 1 al trabajador 2, la tarea 2 al trabajador 1 y la tarea 3 al trabajador 3. El coste de esta solución es 27. El paquete linprog Una alternativa a la función lp de lpsolve es la función solvelp del paquete linprog. Su funcionamiento es similar, aunque el rango de problemas que puede resolver es menor. Por ejemplo, no trata adecuadamente problemas en forma estándar con restricciones de igualdad. El orden por defecto en el que hay que pasar los argumentos es diferente al de lp: 1. Coeficientes de la función objetivo c. 2. Términos independientes de las restricciones b. 3. Matriz de coeficientes de las variables en las restricciones A. 4. Determinar si queremos maximizar o minimizar (maximum=true o maximum=false). 5. Vector que determina la dirección de las restricciones: <=, >= o =. library(linprog) # Parametros del problema coef <- c(20, 30) A <- matrix(c(3, 1, 1, 6, 0.5, 1), ncol=2) b <- c(150, 22, 27.5) dir <- rep('<=', 3) # Solucion solucion <- solvelp(coef, b, A, maximum=true, dir) summary(solucion) Results of Linear Programming / Linear Optimization Objective function (Maximum): 775 Solution opt 1 5.0 2 22.5 4

La función solvelp tiene la ventaja sobre lp de dar más información sobre los pasos intermedios del algoritmo simplex utilizado para resolver el problema. Para el máximo nivel de detalle se usa la opción verbose=4. solvelp(coef, b, A, maximum=true, dir, verbose=4) [1] "initial Tableau" 1 2 S 1 S 2 S 3 P0 1 3 6.0 1 0 0 150.0 2 1 0.5 0 1 0 22.0 3 1 1.0 0 0 1 27.5 Z-C -20-30.0 0 0 0 0.0 Pivot Column: 2 ( 2 ) Pivot Row: 1 ( 1 ) 1 2 S 1 S 2 S 3 P0 2 0.50 1 0.16667 0 0 25.0 2 0.75 0-0.08333 1 0 9.5 3 0.50 0-0.16667 0 1 2.5 Z-C -5.00 0 5.00000 0 0 750.0 Pivot Column: 1 ( 1 ) Pivot Row: 3 ( 3 ) 1 2 S 1 S 2 S 3 P0 2 0 1 0.3333 0-1.0 22.50 2 0 0 0.1667 1-1.5 5.75 1 1 0-0.3333 0 2.0 5.00 Z-C 0 0 3.3333 0 10.0 775.00 Results of Linear Programming / Linear Optimization Objective function (Maximum): 775 Iterations in phase 1: 0 Iterations in phase 2: 2 Solution opt 1 5.0 2 22.5 Basic Variables opt 1 5.00 2 22.50 S 2 5.75 Constraints actual dir bvec free dual dual.reg 1 150.00 <= 150.0 0.00 3.33333 34.50 2 16.25 <= 22.0 5.75 0.00000 5.75 5

3 27.50 <= 27.5 0.00 10.00000 2.50 All Variables (including slack variables) opt cvec min.c max.c marg marg.reg 1 5.00 20 15 30.00000 NA NA 2 22.50 30 20 40.00000 NA NA S 1 0.00 0 -Inf 3.33333-3.33333 34.5 S 2 5.75 0-20 6.66667 0.00000 NA S 3 0.00 0 -Inf 10.00000-10.00000 2.5 Algunas observaciones sobre estos resultados: La última fila está cambiada de signo respecto a como aparece en la mayoría de los libros de programación lineal, es decir, aparece c j z j en lugar de z j c j. Aunque en el ejemplo anterior no se observa, en general no entra en la base la variable con el valor más negativo de c j z j. Se utiliza otro criterio (véase el primer ejercicio). La columna de la derecha contiene los valores b = B 1 b. El último elemento de esta columna da el valor objetivo para la base correspondiente a cada iteración, es decir, c B b. Ejercicios 1. Resuelve el siguiente problema de programación lineal para los valores θ {2.9, 3, 3.1}: Maximizar x 1 + θx 2 sujeto a 2x 1 + 3x 2 6 x 1 + x 2 1 x i 0, i = 1, 2 Usa el paquete linprog de forma que obtengas la máxima información posible sobre las distintas iteraciones del método simplex. Observa qué variable entra en la base en la primera iteración y trata de deducir el criterio de entrada. 2. Resuelve el siguiente problema de optimización lineal: Minimizar x 2 3x 3 + 2x 5 sujeto a x 1 + 3x 2 x 3 + 2x 5 = 7 2x 2 + 4x 3 + x 4 = 12 4x 2 + 3x 3 + 8x 5 + x 6 = 10 x i 0, i = 1,..., 6 Usa el paquete linprog de forma que obtengas la máxima información posible sobre las distintas iteraciones del método simplex. 3. Resuelve usando el paquete lpsolve el siguiente problema en el que las variables x 1 y x 2 solo pueden tomar valores enteros. Compara la solución con la que se obtiene si no se fuerza a las variables a tomar valores enteros. Maximizar x 1 + x 2 sujeto a 2x 1 + 2x 2 1 16x 1 14x 2 7 x i 0, i = 1, 2 6

4. Resuelve el siguiente problema de transporte: 10 5 6 7 25 8 2 7 6 25 9 3 4 8 50 15 20 30 35 5. Escribe un programa que utilice técnicas de optimización lineal para, dada una muestra de datos y 1,..., y n, encontrar el valor de θ que minimiza n i=1 y i θ. Referencias Berkelaar, M. et al (2014) lpsolve: Interface to Lpsolve v. 5.5 to solve linear-integer programs. R package version 5.6.10. 7