Programació lineal en R

1. Cicle de vida

2. Tipologia

3. Àmbit d'aplicació

4. Llenguatge de programació

Descripció

La programació lineal consisteix a maximitzar o minimitzar una funció objectiu subjecta a unes restriccions imposades sobre les variables que en formen part, ja sigui en forma d’inequacions o bé d’altres restriccions, com el fet que siguin senceres.

R proporciona una gran quantitat de paquets per a resoldre problemes mitjançant programació lineal. Un dels més senzills és linprog, que usa l’algorisme Simplex per a resoldre el problema proposat mitjançant una notació matricial per a la funció objectiu i les restriccions. També permet llegir i escriure fitxers en format MPS, l’estàndard de facto per a problemes de programació lineal.

Una altra opció és el paquet Rglpk, que és una interfície R per a usar la llibreria de GNU per a resoldre problemes mitjançant programació lineal, la qual ha d’estar ja instal·lada prèviament. Aquest paquet solament proporciona dues funcions, una per a llegir un fitxer que contengui la descripció del problema per resoldre (inclòs, entre altres, el format MPS) i una altra per a resoldre el problema.

Enllaç al recurs

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

Exemple d’ús

Usant Rglpk podem resoldre fàcilment problemes com el següent:

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 aquest ordre, es defineix la funció objectiu mitjançant un vector (obj) que conté els pesos de cada variable; després es defineix la matriu (mat) que conté la part esquerra de les inequacions que descriuen les restriccions; seguidament, es descriu l’adreça (dir) de cada inequació; a continuació, la part dreta de les inequacions (rhs), i, finalment, s’indica que es tracta d’un problema de maximització (max). Per acabar, es crida la funció que fa d’interfície per a resoldre el problema mitjançant la llibreria GNU per a programació lineal.

Enllaços relacionats

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

Algorisme Simplex: https://es.wikipedia.org/wiki/símplex

Format 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/