MA37A Sesión #6 Software para Programación Lineal

Anuncio
MA37A
Sesión #6
Software para Programación Lineal
Oscar Peredo
29 de Octubre del 2008
Esquema
1
Programación Lineal
2
Lenguajes de alto nivel
MATLAB/OCTAVE
AMPL
GAMS
3
Solvers
CPLEX
GLPK
4
Otras alternativas
Microsoft Excel Solver
5
Conclusiones
Esquema
1
Programación Lineal
2
Lenguajes de alto nivel
MATLAB/OCTAVE
AMPL
GAMS
3
Solvers
CPLEX
GLPK
4
Otras alternativas
Microsoft Excel Solver
5
Conclusiones
Objetivos
Para ramos futuros y mundo laboral, puede ser útil saber
utilizar un software para PL (aplicaciones en practicamente
todas las ramas de la ingenierı́a).
PL es la rama de la Optimización más entendible (y por lo
tanto más personas e instituciones la utilizan).
Matemáticas, Computación e Industrias.
Problema
Para c ∈ Rn , A ∈ Rm×n y b ∈ Rm , nos interesa resolver

cT x
 minx∈Rn
s.a
Ax = b
(PL)

x ≥0
Diagrama de Software para PL
Esquema
1
Programación Lineal
2
Lenguajes de alto nivel
MATLAB/OCTAVE
AMPL
GAMS
3
Solvers
CPLEX
GLPK
4
Otras alternativas
Microsoft Excel Solver
5
Conclusiones
MATLAB/OCTAVE
Software orientado al cálculo
numérico (matrices).
Desarrollados desde 1984
(MATLAB) y 1992 (OCTAVE),
software comercial (MATLAB) y
libre (OCTAVE).
Soportan lenguaje M,
desarrollado a partir de 1970.
Diversas herramientas para
Optimización: Optimization
Toolbox, funciones propias, etc.
AMPL
A Mathematical Programming
Language
Desarrollado en Bell Labs.
posterior al 2000 por Fourer,
Gay & Kernighan.
AMPL
|P|
X
minx∈R|P|
c j xj
j=1
|P|
s.a
X 1
xj ≤ b
aj
j=1
xj ∈ [0, uj ], j = 1, . . . , |P|
set P;
param a {j in P};
param b;
param c {j in P};
param u {j in P};
var X {j in P};
maximize Total_Profit: sum {j in P} c[j] * X[j];
subject to Time: sum {j in P} (1/a[j]) * X[j] <= b;
subject to Limit {j in P}: 0 <= X[j] <= u[j];
GAMS
General Algebraic Modeling
System
Desarrollado por el Banco
Mundial desde 1975 y por
GAMS Development
Corporation desde 1987, con la
participación de diversos
economistas y matemáticos
(premios Nobel).
GAMS
minx∈R|P|
|P|
X
c j xj
j=1
|P|
s.a
X 1
xj ≤ b
aj
j=1
xj ∈ [0, uj ], j = 1, . . . , |P|
Sets
j
indice /1,2,3,4/;
Parameters
a(j) coeficientes
/ 1 23
2 12
3 5
4 1.4 /
u(j) cota superior
/ 1 100
2 100
3 100
4 100 / ;
Scalar b
lado derecho /90/;
Variables
x(j) variables;
Positive Variable x ;
Equations
objetivo
define funcion objectivo
restr(j)
restriccion j ;
objetivo ..
z =e= sum(j, c(j)*x(j)) ;
restr(j) ..
sum(j, (1/a(j))*x(j)) =l= b ;
Model ejemplo /all/ ;
Solve ejemplo using lp minimizing z ;
Display x.l, x.m ;
Esquema
1
Programación Lineal
2
Lenguajes de alto nivel
MATLAB/OCTAVE
AMPL
GAMS
3
Solvers
CPLEX
GLPK
4
Otras alternativas
Microsoft Excel Solver
5
Conclusiones
CPLEX
CPLEX=C+Simplex (hoy
contiene diversos métodos,
además de Simplex)
Desarrollado por Robert E.
Bixby y vendido vı́a CPLEX
Optimization Inc., adquirida por
ILOG in 1997.
Diversas empresas y
universidades utilizan este solver
comercial.
Librerı́a llamable desde el
lenguaje C.
CPLEX
#include <ilcplex/cplex.h>
#include <stdlib.h>
...
int
main (int argc, char **argv)
{
...
env = CPXopenCPLEX (&status);
...
status = CPXsetintparam (env, CPX_PARAM_SCRIND, CPX_ON);
...
status = CPXsetintparam (env, CPX_PARAM_DATACHECK, CPX_ON);
...
lp = CPXcreateprob (env, &status, "lpex1");
...
status = CPXlpopt (env, lp);
...
status = CPXsolution (env, lp, &solstat, &objval, x, pi, slack, dj);
...
status = CPXwriteprob (env, lp, "lpex1.lp", NULL);
...
}
GLPK
GNU Linear Programming Kit
Desarrollado como proyecto
GNU por Andrew Makhorin
desde el año 2000.
Librerı́a llamable desde el
lenguaje C.
GLPK
#include <stdio.h>
#include <stdlib.h>
#include "glpk.h"
int main(void)
{
LPX *lp;
int ia[1+1000], ja[1+1000];
double ar[1+1000], Z, x1, x2, x3;
lp = lpx_create_prob();
lpx_set_prob_name(lp, "sample");
lpx_set_obj_dir(lp, LPX_MAX);
lpx_add_rows(lp, 3);
lpx_set_row_name(lp, 1, "p");
lpx_set_row_bnds(lp, 1, LPX_UP, 0.0, 100.0);
...
lpx_add_cols(lp, 3);
lpx_set_col_name(lp, 1, "x1");
lpx_set_col_bnds(lp, 1, LPX_LO, 0.0, 0.0);
...
lpx_load_matrix(lp, 9, ia, ja, ar);
lpx_simplex(lp);
Z = lpx_get_obj_val(lp);
x1 = lpx_get_col_prim(lp, 1);
...
lpx_delete_prob(lp);
return 0;
}
Esquema
1
Programación Lineal
2
Lenguajes de alto nivel
MATLAB/OCTAVE
AMPL
GAMS
3
Solvers
CPLEX
GLPK
4
Otras alternativas
Microsoft Excel Solver
5
Conclusiones
Microsoft Excel Solver
Orientado a la planilla de cálculo (worksheet).
Sirve para problemas pequeños.
Posee poca escalabilidad (cuando el problema crece) y su
interacción con otros sistemas es pobre (no es un sistema
dedicado a la Optimización, está dedicado a la Gestión).
Se puede complementar con Macros (VBA: Visual Basic for
Applications)
Excel
Sub SolverMacro()
’ Example Solver VBA Macro
SolverReset
SolverOk SetCell:="$B$24", _
MaxMinVal:=2, _
ValueOf:="0", _
ByChange:="$B$16:$B$17"
SolverSolve userFinish:=True
End Sub
Esquema
1
Programación Lineal
2
Lenguajes de alto nivel
MATLAB/OCTAVE
AMPL
GAMS
3
Solvers
CPLEX
GLPK
4
Otras alternativas
Microsoft Excel Solver
5
Conclusiones
Conclusiones
Existen muchas alternativas de software para Optimización en
PL.
¿Cómo se utiliza la Optimización en las empresas?
Cada empresa modela e implementa de acuerdo a sus
necesidades.
Se debe utilizar la mejor alternativa de la que se disponga
($,tiempo,recurso humano).
FIN
Descargar