| 1 | TolGlpk: Interfaz Tol para resolver problemas de programación lineal |
| 2 | |
| 3 | Los problemas de programación lineal son muy frecuentes en la práctica. El paquete |
| 4 | TolGlpk brinda una interfaz para resolver este tipo de problemas desde Tol basado en la |
| 5 | biblioteca Glpk. Permite especificar el tipo de las variables: binarias, enteras o continuas; y |
| 6 | opcionalmente se puede definir un criterio de parada: el número máximo de iteraciones o el |
| 7 | tiempo máximo de ejecución. |
| 8 | |
| 9 | Supongamos por ejemplo el siguiente problema: |
| 10 | |
| 11 | maximize: |
| 12 | |
| 13 | subject to: 3 x_1 + 4 x_2 + 2 x_3 ≤ 60 |
| 14 | |
| 15 | 2 x_1 + 4 x_2 + 3 x_3 |
| 16 | |
| 17 | 2 x_1 + |
| 18 | |
| 19 | x_1 + 3 x_2 + 2 x_3 ≤ 80 |
| 20 | |
| 21 | x_2 + 2 x_3 ≤ 40 |
| 22 | |
| 23 | x_1, x_2, x_3 are non-negative real numbers |
| 24 | |
| 25 | Su solución a través de TolGplk: |
| 26 | |
| 27 | #Require TolGlpk; |
| 28 | |
| 29 | Matrix C = Col(2, 4, 3); |
| 30 | |
| 31 | Matrix A = Col(3, 2, 1) | Col(4, 1, 3) | Col(2, 2, 2); |
| 32 | |
| 33 | Matrix L = Constant(3, 1, -Inf); |
| 34 | |
| 35 | Matrix U = Col(60, 40, 80); |
| 36 | |
| 37 | Matrix Lx = Constant(3, 1, 0); |
| 38 | |
| 39 | Matrix Ux = Constant(3, 1, Inf); |
| 40 | |
| 41 | Set Options = [[ Real Maximize = 1; Real maxSec = 30*60 ]]; |
| 42 | |
| 43 | Set result = TolGlpk::solveLP(C, A, L, U, Lx, Ux, Options); |
| 44 | |
| 45 | Para una formulación general de un problema de programación lineal: |
| 46 | |
| 47 | z = Ct*Xs, sujeto a las restricciones: Xa=A*Xs, L≤Xa≤U, Lx≤Xs≤Ux; donde z es la función objetivo, |
| 48 | C es el vector de costos, Xs son las variables estructurales (Matriz mx1), Xa son las variables |
| 49 | auxiliares (Matriz nx1), L y U son las cotas inferiores y superiores (si existen) de las variables |
| 50 | auxiliares, Lx y Ux son las cotas inferiores y superiores (si existen) de las variables estructurales |
| 51 | y A es la matriz de restricciones (matriz mxn). |
| 52 | |
| 53 | Su solución por medio de TolGlpk: |
| 54 | |
| 55 | Set result = TolGlpk::solveLP(C, A, L, U, Lx, Ux, Options); |