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