ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida...

112
ILOG CPLEX Problemas de: programación lineal, entera y lineal-entera

Transcript of ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida...

Page 1: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

ILOG CPLEX

Problemas de: programación lineal, entera y lineal-entera

Page 2: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

2

Ciclo de vida

ModeloOPL

Resolutor CPLEX(modelo) solución

Descripción problema deprog. lineal,

entera o mixto

Page 3: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

3

Índice

Ejemplo sencillo: LP, IP, MILPEtapa resolución

Ejemplos más complicados: LP, IP, MILPEtapa modelado

Page 4: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

4

Ejemplo sencillo

DescripciónIndustria con stock de N, H y ClSe combinan para formar NH3

y NH4

Cl.NH3

y NH4

Cl

dan distintos beneficios.

Con el stock que tenemos, ¿qué

producción nos dará

más beneficio?

Page 5: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

5

Modelo. Datos del problema

enum

Componentes { N, H, Cl

};enum

Productos { NH3, NH4Cl

};

int

stock[Componentes] = [7, 24, 4];

int

requieren[Productos, Componentes] = [ [1, 3, 0], [1, 4, 1] ];

float+ beneficio[Productos] = [30, 40];

Page 6: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

6

Modelo. Variables de decisión

Programación linealvar

float

x1;

var

float

x2;Programación entera

var

int

x1 in minint..maxint;var

int

x2 in minint..maxint;

Programación entera-lineal mixtavar

int

x1 in minint..maxint;

var

float

x2;

Page 7: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

7

Modelo. Función de óptimo

maximize30*x1 + 40*x2

Page 8: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

8

Modelo. Restricciones

subject to {1*x1 + 1*x2 <= 7;3*x1 + 4*x2 <= 24;0*x1 + 1*x2 <= 4;

x1 >= 0;x2 >= 0;

};

Page 9: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

9

Programación lineal

Resolución usando CPLEX1.

Región factible.

2.

Evaluar vértices.Ideas apoyo

Restricciones redundantesPosibilidad de ∞ solucionesElegir entre Simplex y Barrera.“

setting

Lpmethod

= barrier; “

Page 10: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

10

Programación lineal

Resolvemos el área usando simplex:B(0,4)

A(0,0) E(7,0)

C(2’66,4)D(4,3)

Page 11: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

11

Resultados OPL

SolutionsOptimal Solution with Objective Value: 240.0000x1 = 2.6667x2 = 4.0000LogRunninglinear programmingdisplaying solution ...

Page 12: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

12

Resultados OPL

CPLEXUtilizó

Simplex.

Variables: 2.Constraints: 5.Solver

Memory: 171860

Solving

time: 91.95

Page 13: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

13

Programación entera

Discusión…1. Todas las variables son enteras2. OPL exige rango para var

int…

Conclusión:¿Programación entera = dominios finitos?

¡No!=, <=, >= | <>, <, >

Page 14: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

14

Programación entera

var

int

x1, x2 in minint..maxint;

maximize3*x1 + 2*x2

subject

to

{x1 + x2 <

4;

2*x1 + x2 <

5;-x1 + 4*x2 >

2;

x1 >= 0;x2 >= 0;

};

Page 15: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

15

Resultados OPL

SolutionsOptimal Solution with Objective Value: 7x1 = 1,

x2 = 2

Log

SolverRunning

Variables: 2 Constraints: 5

Solver

Failures: 0 Choice

Points: 3displaying

solution

...

Solver

memory: 163840

Solving

time: 0.24

Page 16: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

16

Programación entera

var

int

x1, x2 in minint..maxint;

maximize3*x1 + 2*x2

subject

to

{x1 + x2 <=

4;

2*x1 + x2 <=

5;-x1 + 4*x2 >=

2;

x1 >= 0;x2 >= 0;

};

Page 17: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

17

Resultados OPL

SolutionsOptimal Solution with Objective Value: 9x1 = 1,

x2 = 3

Log

CPLEXRunning

Variables: 2

integer

programming

(CPLEX MIP) Constraints: 5displaying

solution

...

S.memory: 171860

Solving

time: 0.92

Page 18: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

18

Modelo. Programación entera

var

int

x1 in minint..maxint;var

int

x2 in minint..maxint;

subject to {1*x1 + 1*x2 <= 7;3*x1 + 4*x2 <= 24;0*x1 + 1*x2 <= 4; x1 >= 0;x2 >= 0;

};

Page 19: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

19

Programación entera

Resolución usando CPLEX1.

Región factible.

2.

Evaluar vértices.3.

Solución no válidaIdea…

¿Nueva técnica para Prog.Entera?¡Reutilizar lo que ya funciona: Branch&Bound!

Page 20: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

20

Árbol Branch&Bound

Resolvemos el área usando simplex:B(0,4)

A(0,0) E(7,0)

C(2’66,4)D(4,3)

Page 21: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

21

Árbol Branch&Bound

Encontramos la solución:

¡No es entera!Bifurcar sobre X1

X1 = 2.66X2 = 4.00

240.00

Page 22: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

22

Árbol Branch&Bound

Con la bifurcación sobre X1:B(0,4)

A(0,0) E(7,0)

C(2’66,4)D(4,3)

Page 23: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

23

Árbol Branch&Bound

X1 = 2.66X2 = 4.00

240.00

?

?

?

?

X1 <= 2 X1 >= 3

Page 24: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

24

Árbol Branch&Bound

Resolvemos el área usando simplex:

A(0,0)

B(0,4)

F(2,0)

G(2,4)

Page 25: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

25

Árbol Branch&Bound

¡Solución entera! Guardamos óptimo

X1 = 2.66X2 = 4.00

240.00

X1 = 2.00X2 = 4.00

220

?

?

X1 <= 2 X1 >= 3

Page 26: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

26

Árbol Branch&Bound

Resolvemos el área usando simplex:

H(3,3’75) D(4,3)

E(7,0)I (3,0)

Page 27: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

27

Árbol Branch&Bound

X1 = 2.66X2 = 4.00

240.00

X1 = 2.00X2 = 4.00

220

X1= 3.00X2= 3.75

240

X1 <= 2 X1 >= 3

¡Supera, pero no es entera.Bifurcar sobre X2

Page 28: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

28

Árbol Branch&Bound

Con la bifurcación sobre X2:

H(3,3’75) D(4,3)

E(7,0)I (3,0)

Page 29: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

29

Árbol Branch&Bound

X1 = 2.66X2 = 4.00

240.00X1 = 2.00X2 = 4.00

220

X1= 3.00X2= 3.75

240

X1 <= 2 X1 >= 3

???

???

X2 <= 3 X2 >= 4

Page 30: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

30

Árbol Branch&Bound

Resolvemos el área usando simplex:

I (3,0)

J(3,3)

E(7,0)

D(4,3)

Page 31: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

31

Árbol Branch&Bound

X1 = 2.66X2 = 4.00

240.00X1 = 2.00X2 = 4.00

220

X1= 3.00X2= 3.75

240

X1 <= 2 X1 >= 3

X1 = 4.00X2 = 3.00

240

???

X1 <= 2 X2 >= 4¡Solución óptima!Guardamos óptimo

Page 32: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

32

Árbol Branch&Bound

Para X1>= 3 y X2 >=4 no existe ninguna solución ya que nos hemos salido del área satisfactible

Page 33: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

33

Árbol Branch&Bound

X1 = 2.66X2 = 4.00

240.00X1 = 2.00X2 = 4.00

220

X1= 3.00X2= 3.75

240

X1 <= 2 X1 >= 3

X1 = 4.00X2 = 3.00

240

Insatisfactible

-

X1 <= 2 X2 >= 4¡Solución óptima!Guardamos óptimo

Page 34: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

34

Árbol Branch&Bound

¡La solución óptima es por lo tanto!X1 = 4.00X2 = 3.00

240

Page 35: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

35

Resultados OPL

SolutionsOptimal Solution with Objective Value: 240x1 = 4x2 = 3LogRunninginteger programming (CPLEX MIP)displaying solution ...

Page 36: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

36

Resultados OPL

CPLEXVariables: 2.Constraints: 5.Solver

Memory: 171860

Solving

time: 0.03

Page 37: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

37

Programación entera

Procedimientos de búsqueda.

¿Qué

información añadir en el modelo OPL?Que variable poner en cada nivel del árbolOrden de exploración en los hijos

Page 38: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

38

Programación entera

setting

mipsearch{forall( v in vars)

setPriority(v, PRIORIDAD);setBranchingDirection(v, branchDir*);

}

*Low, Up, Global

Page 39: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

39

Modelo. Programación entera mixta

var int x1 in minint..maxint;var float x2;

subject to {1*x1 + 1*x2 <= 7;3*x1 + 4*x2 <= 24;0*x1 + 1*x2 <= 4;x1 >= 0;x2 >= 0;

};

Page 40: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

40

Programación lineal-entera

Resolución usando CPLEX1.

Región factible.

2.

Evaluar vértices.3.

Relajar problema + Branch&Bound

No bifurcar sobre variables float

:-)

Page 41: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

41

Resultados OPL

Solutions

LogOptimal Solution with RunningObjective Value: 240.0000 mixed integer programming x1 = 4 (CPLEX MIP)x2 = 3.0000

displaying solution ...

CPLEXVariables: 3Restricciones: 6Solver

Memory: 171860

Solving

time: 0.00

Page 42: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

42

Ejemplos modelado

Programación lineal Problema del transporte.

Programación entera Problema de la mochila.Problema del producto.

Programación lineal-entera mixta Problema de la receta.

Page 43: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

43

LP Problema del transporte

Teoría de fondo.Tamaño de los problemas combinatorios.Salto entre tamaño máximo LP –

IP.

Dentro de LP…¿Cómo aumentar la eficiencia?

Explotar la dispersión de datos.

Page 44: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

44

Descripción

-

Tenemos un conjunto de ciudades Gallegas y un conjunto de productos del mar.

-

Cada ciudad produce

y demanda

una cierta cantidad de cada producto.

-

Todas las ciudades están conectadas por carretera.

Page 45: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

45

Descripción

-

Tabla de coste depende de la ciudad origen, destino y producto transportado.

-

Gobierno impone un límite en el transporte total (∑

productos) que se puede realizar

entre cada par de ciudades.-

Minimizar el coste total del transporte.

Page 46: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

46

1. Transporte gallego sin explotar

Consideramos que todas las ciudades están conectadas y que toda ciudad transporta todo producto a las demás ciudades.

Page 47: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

47

Modelado. Datos del problema

enum

Ciudades ...;enum

Productos ...;

float+ maximo

= ...;

float+ suministra[Productos,Ciudades] = ...;float+ demanda[Productos,Ciudades] = ...;float+ cuesta[Productos,Ciudades,Ciudades] = ...;

Page 48: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

48

Modelado. Datos del problema

Ciudades = { A_coruna, Lugo, Orense, Pontevedra, Cebreiro, Melide, Santiago, Viveiro, Ortigueira, Ribadiso

};

Productos = { Centollos, Pulpo, Vieras };

maximo

= 625;

Page 49: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

49

Modelado. Datos del problema

suministra

= #[Centollos: #[ A_coruna: 400, Lugo: 700,

Orense: 800, Pontevedra: 0,Cebreiro: 0, Melide: 0,Santiago: 0, Viveiro: 0,Ortigueira: 0, Ribadiso: 0 ]#

Pulpo: #[...]#Vieras: #[...]#]# ;

Page 50: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

50

Modelado. Datos del problema

demanda = #[Centollos: #[ A_coruna: 0, Lugo: 0,

Orense: 0, Pontevedra: 300,Cebreiro: 300, Melide: 100,Santiago: 75, Viveiro: 650,

Ortigueira: 225, Ribadiso: 250 ]#Pulpo: #[...]#Vieras: #[...]#]# ;

Page 51: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

51

Modelado. Datos del problema

cuesta

= #[Centollos: #[

A_coruna: #[ A_coruna: 0, Lugo: 0, Orense: 0, Melide: 8, Pontevedra: 30, Cebreiro: 10, Ortigueira: 71, Santiago: 10, Viveiro: 11, Ribadiso: 6 ]#

Lugo: #[ ...]#...

]#Vieras: #[...]#Pulpos: #[...]#

]#

Page 52: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

52

Modelado. Datos del problema

El problema exige a los datos de entrada cumplan que para cada producto la suma total demandada sea igual a la suma total producida.

assertforall(p

in Productos)

sum(o

in Ciudades) suministra[p,o] = sum(d

in Ciudades) demanda[p,d];

Page 53: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

53

Variables de decisión

Solución al problema:“Cuánta cantidad de producto transportar entre

cada ciudad suministradora y consumidora.”

var

float+ trans[Productos,Ciudades,Ciudades];

Page 54: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

54

Función de óptimo

Minimizar el coste de transportar todos los productos entre todas las ciudades.

minimizesum(p

in Productos & o,d

in Ciudades)

cuesta[p,o,d] * trans[p,o,d]

Page 55: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

55

Restricciones

-

Una ciudad ‘o’

transporta una cantidad de producto ‘p’ a cada ciudad ‘c’, en total transportará

‘y’.

-

Esa ciudad produce ‘x’

cantidad de ese producto.- x = y

forall(p

in Productos & o in Ciudades) sum(d

in Ciudades) trans[p,o,d] = suministra[p,o];

Page 56: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

56

Restricciones

-

Una ciudad ‘d’

recibirá

una cantidad de producto ‘p’ de cada ciudad ‘c’, en total recibirá

‘y’.

-

Esa ciudad tiene una demanda ‘x’

de ese producto.- x = y

forall(p

in Productos & d in Ciudades) sum(o

in Ciudades) trans[p,o,d] = demanda[p,d];

Page 57: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

57

Restricciones

-

Una ciudad ‘o’

transportará

una cantidad ‘k’

de cada producto a otra ciudad ‘d’, en total transportará

‘y’.

-

Hay un límite máximo de transporte entre ciudades-

y <= limite

forall(o, d in Ciudades)sum(p

in Productos) trans[p,o,d] <= maximo;

Page 58: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

58

Mostrar resultados

display

cuesta;display

trans;

Page 59: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

59

Resultados OPL

SolutionsOptimal

Solution

with

Objective

Value: 199500.0000

trans[Centollos,Lugo,Orense] = 0.0000trans[Centollos,Lugo,Pontevedra] = 225.0000trans[Centollos,Lugo,Cebreiro] = 0.0000trans[Centollos,Lugo,Melide] = 0.0000…Log

CPLEX

Running

Variables: 300

Restricciones: 160linear programming

Solver

memory:344720

Solving

Time: 0.02

displaying solution ...

Usó

simplex

Page 60: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

60

2. Transporte gallego optimizado

¿Cómo explotar la estructura del problema?Extraer de la matriz cuesta[p,o,d] que elementos son <> 0 RutasExtraer de cada ruta:

La pareja de ciudades ConexionesLa pareja producto, origen SuministraLa pareja producto, destino Demanda

Page 61: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

61

Modelado. Datos del problema

struct Conexion { Ciudad o; Ciudad d;

};struct Ruta {

Producto p; Conexion

e;

};{Ruta} Rutas = ...;float+ cuesta[Rutas] = ...;

Page 62: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

62

Modelo. Datos del problema

Rutas = {<Centollos, <A_coruna, Pontevedra> >,<Centollos, <A_coruna, Cebreiro> >,<Centollos, <A_coruna, Melide> >,<Centollos, <A_coruna, Santiago> >,<Centollos, <A_coruna, Viveiro> >, …

};

Page 63: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

63

Modelo. Datos del problema

Extraer de cada ruta cada pareja de ciudades conectadas.{Conexion} Conexiones = { c | <p,c> in Rutas };

¿Cómo hace el filtrado?MulticonjuntoConjunto

Page 64: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

64

Modelo. Datos del problema

Extraer las parejas <producto, ciudad origen>struct

Suministra {

Producto p; Ciudad o;

};{Suministra} Suministros = {<p,c.o>|<p,c> in Rutas };float+ suministra[Suministros] = ...;

Page 65: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

65

Modelo. Datos del problema

suministra = #[<Centollos, A_coruna>: 400<Pulpo, A_coruna>: 800<Vieras, A_coruna>: 200<Centollos, Lugo>: 700<Pulpo, Lugo>: 1600<Vieras, Lugo>: 300<Centollos, Orense>: 800<Pulpo, Orense>: 1800<Vieras, Orense>: 300]#;

Page 66: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

66

Modelo. Datos del problema

Extraer las parejas <producto, ciudad destino>struct

Demanda {

Producto p; Ciudad o;

};{Demanda} Demandas = {<p,c.d>|<p,c> in Rutas };float+ demanda[Demandas] = ...;

Page 67: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

67

Modelo. Datos del problema

demanda = #[<Centollos, Pontevedra>: 300<Pulpo, Pontevedra>: 500<Vieras, Pontevedra>: 100<Centollos, Cebreiro>: 300<Pulpo, Cebreiro>: 750<Vieras, Cebreiro>: 100<Centollos, Melide>: 100

...]# ;

Page 68: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

68

Modelo. Datos del problema

¿Cómo explotar la estructura del problema?Para cada producto saber…

¿Qué ciudades lo producen?¿Qué ciudades lo demandan?¿Qué conexiones concretas se establecen?

{Ciudad} orig[p

in Producto] = { c.o

| <p,c> in Rutas };{Ciudad} dest[p

in Producto] = { c.d

| <p,c> in Rutas };

{Conexion} CP[p

in Producto] = { c | <p,c> in Rutas };

Page 69: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

69

Modelo. Datos del problema

El problema exige a los datos de entrada cumplan que para cada producto la suma total demandada sea igual a la suma total producida.

assert

forall(p

in Producto) sum(o

in orig[p]) suministra[<p,o>] = sum(d

in dest[p]) demanda[<p,d>];

Page 70: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

70

Variables de decisión

var

float+ trans[Rutas];

1.Transporte sin optimizar 300 variables.2.Transporte optimizado 63 variables.

Page 71: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

71

Función de óptimo

minimizesum(l

in Rutas) cuesta[l] * trans[l]

Page 72: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

72

Restricciones

-

Una ciudad ‘o’

transporta una cantidad de producto ‘p’ a cada ciudad ‘c’, en total transportará

‘y’.

-

Esa ciudad produce ‘x’

cantidad de ese producto.- x = y

forall(p

in Producto & o in orig[p]) sum(<o,d> in CP[p]) trans[< p,<o,d> >] =

suministra[<p,o>];

Page 73: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

73

Restricciones

-

Una ciudad ‘d’

recibirá

una cantidad de producto ‘p’ de cada ciudad ‘c’, en total recibirá

‘y’.

-

Esa ciudad tiene una demanda ‘x’

de ese producto.- x = y

forall(p

in Producto & d in dest[p]) sum(<o,d> in CP[p]) trans[< p,<o,d> >] =

demanda[<p,d>];

Page 74: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

74

Restricciones

-

Una ciudad ‘o’

transportará

una cantidad ‘k’

de cada producto a otra ciudad ‘d’, en total transportará

‘y’.

-

Hay un límite máximo de transporte entre ciudades-

y <= limite

forall(c

in Conexiones)sum(<p,c> in Rutas) trans[<p,c>] <= maximo;

Page 75: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

75

Resultados OPL

SolutionsOptimal Solution with Objective Value: 199500.0000trans[#<p:Centollos,e:#<o:A_coruna,d:Viveiro>#>#] = 400.0000trans[#<p:Centollos,e:#<o:A_coruna,d:Ortigueira>#>#] = 0.0000trans[#<p:Centollos,e:#<o:Lugo,d:Pontevedra>#>#] = 225.0000…Log

CPLEX

Running

Variables: 63

Restricciones: 51linear programming Solver

memory: 224120Solving time: 0.01

displaying solution ... Usó

simplex

Page 76: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

76

Resultados OPL

SolutionsOptimal

Solution

with

Objective

Value: 199500.0000

trans[Centollos,Lugo,Orense] = 0.0000trans[Centollos,Lugo,Pontevedra] = 225.0000trans[Centollos,Lugo,Cebreiro] = 0.0000trans[Centollos,Lugo,Melide] = 0.0000…Log

CPLEX

Running

Variables: 300

Restricciones: 160linear programming

Solver

memory:344720

Solving

Time: 0.02

displaying solution ...

Usó

simplex

Page 77: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

77

Ejemplos modelado

Programación lineal Problema del transporte.

Programación entera Problema de la mochila.Problema del producto.

Programación lineal-entera mixta Problema de la receta.

Page 78: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

78

IP Problema de la mochila

DescripciónTenemos una mochila con una cierta capacidad: (Peso máximo, Volumen, …) y varias clases de objetos: (Libros, botas, bocatas, …).Cada objeto tiene un valor y un cierto ‘uso’ de la mochila(peso, volumen,…)

Maximizar el valor de los objetos elegidos respetando la capacidad que tiene la mochila.

Page 79: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

79

Modelado. Datos del problema

int

num_objetos

= ...;int

num_caracteristicas

= ...;

range objetos 1..num_objetos;range caracteristicas

1..num_caracteristicas;

//Instancianum_objetos

= 12;

num_caracteristicas

= 7;

Page 80: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

80

Modelo. Datos del problema

int

maximo[caracteristicas] = ...;int

valor[objetos] = ...;

int

max_objetos

= max(c

in caracteristicas) maximo[c];

//Instanciamaximo

= [ 18209, 7692, 1333, 924, 26638, 61188,

13360

];

valor = [ 96, 76, 56, 11, 86, 10, 66, 86, 83, 12, 9, 81

];

Page 81: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

81

Modelo. Datos del problema

int

uso[caracteristicas, objetos] = ...;//Instanciauso = [ [ 19, 1, 10, 1, 1, 14, 152, 11, 1, 1, 1, 1 ],

[ 0, 4, 53, 0, 0, 80, 0, 4, 5, 0, 0,

0 ],[ 4, 660, 3, 0, 30, 0, 3, 0, 4, 90, 0,

0],

[ 7, 0, 18, 6, 770, 330, 7, 0, 0, 6, 0,

0],[ 0, 20, 0, 4, 52, 3, 0, 0, 0, 5, 4,

0],

[ 0, 0, 40, 70, 4, 63, 0, 0, 60, 0, 4,

0],[ 0, 32, 0, 0, 0, 5, 0, 3, 0, 660, 0,

9] ];

Page 82: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

82

Variables de decisión

Cuantos objetos guardar de cada tipo

var

int

guarda[objetos] in 0..max_objetos;

Page 83: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

83

Función de óptimo

Maximizar el

beneficio obtenido

por los

objetos llevados.

maximizesum(o in objetos) valor[o] * guarda[o]

Page 84: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

84

Restricciones

El conjunto de objetos elegidos no debe

sobrepasar (peso, volumen, ...) de la

mochila.

subject

toforall(c in caracteristicas)

sum(o in objetos) uso[c, o] * guarda[o] <= maximo[c];

Page 85: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

85

Resultados OPL

SolutionsOptimal Solution with Objective Value: 261922guarda[1] = 0,

guarda[2] = 0,

guarda[3] = 0,

guarda[4] = 154,guarda[5] = 0,

guarda[6] = 0,

guarda[7] = 0,

guarda[8] = 913 , guarda[9] = 333,

guarda[10] = 0,

guarda[11] = 6499, guarda[12] = 1180

Log

CPLEX Usó

MIPRunning

Variables: 12

Restricciones: 7

integer programming (CPLEX MIP) Solver memory: 191960 displaying solution ...

Solving

time: 0.05

Page 86: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

86

Ejemplos modelado

Programación lineal Problema del transporte.

Programación entera Problema de la mochila.Problema del producto.

Programación lineal-entera mixta Problema de la receta.

Page 87: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

87

Problema del producto

DescripciónPara elaborar un producto hacen falta un número n de

tareas.Contratamos para ello a un número m de trabajadores.

Cada trabajador está

capacitado para realizar un subconjunto de las n tareas.

Cada trabajador tiene un sueldo.

Page 88: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

88

Problema del producto

Descripción

Contratar a los trabajadores necesarios para poder realizar todas las tareas. Minimizar el coste de contratación

Page 89: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

89

Modelo. Datos del problema

Identificamos a cada trabajador con un entero.Creamos un rango para identificar a cada uno de ellos.

int

num_Trabajadores

= ...;range Trabajadores

1..num_Trabajadores;

Page 90: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

90

Modelo. Datos del problema

Tendremos también un conjunto de tareas.enum

Tareas ...;

//InstanciaTareas = { albanileria, carpinteria, tuberias, techos,

electricidad, calefaccion, insonorizacion, tejados, pintura, ventanas, fachada, jardines, garaje, parking, mudanza };

Page 91: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

91

Modelo. Datos del problema

El sueldo y capacidad de cada trabajador…{Trabajadores} pueden_hacer[Tareas] = ...;int

sueldo[Trabajadores] = ...;

Page 92: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

92

Modelo. Datos del problema

//Instaciapueden_hacer

= [

{ 1 9 19 22 25 28 31 }{ 2 12 15 19 21 23 27 29 30 31 32 }{ 3 10 19 24 26 30 32 }{ 4 21 25 28 32 }{ 5 11 16 22 23 27 31 }{ 6 20 24 26 30 32 }…

];sueldo = [ 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 6

6 6 7

8 9 ];

Page 93: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

93

Modelo. Variables de decisión

La solución será

saber para cada trabajador si lo cogemos o no.

var

int

contratamos[Trabajadores] in 0..1;

Page 94: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

94

Modelo. Función de óptimo

Minimizar el coste de contrataciónminimize

sum(c

in Trabajadores)sueldo[c]*contratamos[c]

Page 95: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

95

Modelo. Restricciones

Que toda tarea pueda ser realizada al menos por uno de los trabajadores contratados.

forall(j

in Tareas)sum(c

in pueden_hacer[j]) contratamos[c] >= 1;

Page 96: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

96

Resultados OPL

SolutionsOptimal

Solution

with

Objective

Value: 14

contratamos[23] = 1contratamos[25] = 1contratamos[26] = 1Log

CPLEX

Running

Variables: 32 integer programming (CPLEX MIP)

Restricciones: 15

displaying solution ...

Solver memory: 204020Solving

time: 1.81

Page 97: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

97

Ejemplos modelado

Programación lineal Problema del transporte.

Programación entera Problema de la mochila.Problema del producto.

Programación lineal-entera mixta Problema de la receta.

Page 98: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

98

MILP Problema de la receta

DescripciónPreparación de la poción mágica de Panoramix.La cacerola tiene un volumen v. Hay que llenarla.

¿Con qué?Líquidos: Agua, Zumo, Gatorade.Árboles: Raíces y Hojas.Brebajes: BrebajeA y BrebajeB.Pájaros: Gorrión.

Page 99: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

99

MILP Problema de la receta

La mezcla debe ser buena.Porcentaje mínimo y máximo de cada ingrediente.

Encontrar cada ingrediente tiene un coste:Líquidos: tiempo por litro.Árbol: tiempo extracción por kg (1Kg = 1L)Brebajes: tiempo por litroPájaros: tiempo por unidad.

Page 100: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

100

MILP Problema de la receta

Objetivo: minimizar el tiempo en conseguir todos los ingredientes para una poción cuya mezcla sea buena.

Page 101: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

101

Modelo. Datos del problema

enum

Liquidos

...;enum

Arboles

...;

enum

Brevajes

...;enum

Pajaros

...;

//InstanciaLiquidos

= {Agua, Zumo, Gatorade};

Arboles

= {Raices, Hojas};Brebajes = {Brebaje_A, Brebaje_B};Pajaros

= {Gorriones};

Page 102: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

102

Modelo. Datos del problema

Mezcla

buenafloat+ minimo[Liquidos] = ...;float+ maximo[Liquidos] = ...;int+ volumen

= ...;

//Instanciaminimo

= [0.05, 0.30, 0.60];

maximo

= [0.10, 0.40, 0.80];volumen

= 20;

Page 103: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

103

Modelo. Datos del problema

Porcentaje

de líquidos en

Árbol, Brebajes

y Pájaros.float+ porc_arboles[Liquidos,Arboles] = ...;float+ porc_brevajes[Liquidos,Brevajes] = ...;float+ porc_pajaros[Liquidos,Pajaros] = ...;//Instanciaporc_arboles

= [[ 0.20, 0.01 ], [ 0.05, 0 ], [ 0.05, 0.30 ]];

porc_brebajes

= [ [ 0 , 0.01 ], [ 0.60, 0 ], [ 0.40, 0.70 ] ];porc_pajaros

= [ [ 0.10 ], [ 0.45 ], [ 0.45 ] ];

Page 104: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

104

Modelo. Datos del problema

Tiempo en encontrar cada cosafloat+ tiempo_liquidos[Liquidos] = ...;float+ tiempo_arboles[Arboles] = ...;float+ tiempo_brevajes[Brevajes] = ...;float+ tiempo_pajaros[Pajaros] = ...;//Instanciatiempo_liquidos

= [22, 10, 13];

tiempo_arboles

= [6, 5];tiempo_brevajes

= [ 7, 8];

tiempo_pajaros

= [ 9 ];

Page 105: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

105

Variables de decisión

var

float+ li[Liquidos];var

float+ ar[Arboles];

var

float+ br[Brebajes];var

int+ pa[Pajaros] in 0..maxint;

var

float+ mezcla[l

in Liquidos];

Page 106: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

106

Modelo. Función de óptimo

minimizesum(l

in Liquidos) tiempo_liquidos[l] * li[l]

+sum(a

in Arboles) tiempo_arboles[a] * ar[a]

+sum(b

in Brebajes) tiempo_brebajes[b] * br[b]

+sum(p

in Pajaros) tiempo_pajaros[p] * pa[p]

Page 107: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

107

Modelo. Restricciones

Qué

la cantidad de cada litro sea calculada correctamente

forall(l

in Liquidos)mezcla[l] =

li[l] + sum(a

in Arboles) porc_arboles[l,a] * ar[a] +

sum(b

in Brebajes) porc_brebajes[l,b] * br[b] + sum(p

in Pajaros) porc_pajaros[l,p] * pa[p];

Page 108: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

108

Modelo. Restricciones

Que la mezcla respete el mínimo y máximo de cada líquido.

forall(l

in Liquidos){mezcla[l] >= minimo[l] * volumen;mezcla[l] <= maximo[l] * volumen;

};

Page 109: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

109

Modelo. Restricciones

Que el caldero esté

lleno.

sum(l

in Liquidos) mezcla[l] = volumen;

Page 110: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

110

Resultados OPL

SolutionsOptimal

Solution

with

Objective

Value: 184.1171

li[Agua] = 0.0145,

ar[Raices] = 0.0000,li[Zumo] = 0.0000,

ar[Hojas] = 0.0000,

li[Gatorade] = 0.0000, br[Brebaje_A] = 4.9167,br[Brebaje_B] = 8.5476,

pa[Gorriones] = 9

mezcla[Agua] = 1.0000, mezcla[Zumo] = 7.0000, mezcla[Gatorade] = 12.0000

Page 111: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

111

Resultados OPL

LogRunningmixed integer programming (CPLEX MIP)displaying solution ...CPLEXUsó

MIP.

Variables: 12

Restricciones: 11Solver memory: 183920

Solving time: 0.00

Page 112: ILOG CPLEX - gpd.sip.ucm.esgpd.sip.ucm.es/charlas/200806NachoCasti/CPLEX.pdf · 2 Ciclo de vida Modelo OPL. Resolutor CPLEX (modelo) Æsolución. Descripción . problema de. prog.

112

Fin