Programación lineal en R

1. Ciclo de vida

2. Tipología

3. Ámbito de aplicación

4. Lenguaje de programación

Descripción

La programación lineal consiste en maximizar o minimizar una función objetivo sujeta a unas restricciones impuestas sobre las variables que forman parte de la misma, ya sea en forma de inecuaciones o bien otras restricciones, como el hecho de que sean enteras.

R proporciona una gran cantidad de paquetes para resolver problemas mediante programación lineal. Uno de los más sencillos es linprog, que usa el algoritmo Simplex para resolver el problema propuesto mediante una notación matricial para la función objetivo y las restricciones. También permite leer y escribir ficheros en formato MPS, el estándar de facto para problemas de programación lineal.

Otra opción es el paquete Rglpk, que es una interfaz R para usar la librería de GNU para resolver problemas mediante programación lineal, la cual debe estar ya instalada previamente. Este paquete solo proporciona dos funciones, una para leer un fichero que contenga la descripción del problema por resolver (incluyendo, entre otros, el formato MPS) y otra para resolver el problema.

Enlace al recurso

https://cran.r-project.org/web/views/Optimization.html

Ejemplo de uso

Usando Rglpk podemos resolver fácilmente problemas como el siguiente:

Simple linear program.
maximize: 2 x_1 + 4 x_2 + 3 x_3
## subject to: 3 x_1 + 4 x_2 + 2 x_3 <= 60
##             2 x_1 +   x_2 + 2 x_3 <= 40
##               x_1 + 3 x_2 + 2 x_3 <= 80
## x_1, x_2, x_3 are non-negative real numbers

obj <- c(2, 4, 3)
mat <- matrix(c(3, 2, 1, 4, 1, 3, 2, 2, 2), nrow = 3)
dir <- c("<=", "<=", "<=")
rhs <- c(60, 40, 80)
max <- TRUE

Rglpk_solve_LP(obj, mat, dir, rhs, max = max)

En este orden, se define la función objetivo mediante un vector (obj) que contiene los pesos de cada variable; después se define la matriz (mat) que contiene la parte izquierda de las inecuaciones que describen las restricciones; seguidamente, se describe la dirección (dir) de cada inecuación; a continuación, la parte derecha de las inecuaciones (rhs), y, finalmente, se indica que se trata de un problema de maximización (max). Para acabar, se llama a la función que hace de interfaz para resolver el problema mediante la librería GNU para programación lineal.

Enlaces relacionados

Programación lineal: https://es.wikipedia.org/wiki/Programación_lineal

Algoritmo simplex: https://es.wikipedia.org/wiki/Símplex

Formato MPS: https://en.wikipedia.org/wiki/MPS_(format)

Package linprog: https://cran.r-project.org/web/packages/linprog/

Package Rglpk: https://cran.r-project.org/web/packages/Rglpk/index.html

GLPK: https://www.gnu.org/software/glpk/