opl, un lenguaje de programación de restricciones

41
1 OPL, un lenguaje de programación de restricciones. Nacho Castiñeiras Grupo de programación declarativa

Upload: votuong

Post on 08-Jan-2017

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OPL, un lenguaje de programación de restricciones

1

OPL, un lenguaje de programación de restricciones.

Nacho CastiñeirasGrupo de programación declarativa

Page 2: OPL, un lenguaje de programación de restricciones

22

Índice

Primeros pasosILOG CPLEXILOG SOLVERILOG SOLVER SCHEDULER

Page 3: OPL, un lenguaje de programación de restricciones

3

Primeros pasos.

Comprender el entorno y empezar a trabajar en él.

Page 4: OPL, un lenguaje de programación de restricciones

4

Objetivo de esta fase previa.

Uhm, ¡cómo me gustaría usar OPL!Lástima que deba conocer la sintaxis

Primeros pasos

¡Sé

lo suficiente para empezar!

Page 5: OPL, un lenguaje de programación de restricciones

55

Primeros pasos

Motivación

Mapa de componentes.

Sintaxis mínima OPL

Page 6: OPL, un lenguaje de programación de restricciones

66

Motivación

¿Qué queremos?

Resolver problemas de :Satisfacción de restricciones.Optimización de restricciones.

Búsqueda del valor óptimo.

Page 7: OPL, un lenguaje de programación de restricciones

7

Motivación

¿Cómo resolverlos?

Ciclo de vida

Descripción ‘en Castellano’del problema

Modelarlo Algoritmo(modelo) solución

Page 8: OPL, un lenguaje de programación de restricciones

88

Mapa de componentes

¿Qué nos ofrece ILOG?

Resolutores especializados. Un lenguaje de modelado: OPL

Orientado a naturaleza de estos problemas.Reduce salto modelo-algoritmo.

Page 9: OPL, un lenguaje de programación de restricciones

9

Mapa de componentes

ModeloOPL

Resolutor(modelo) solución

Descripción ‘en Castellano’del problema

Page 10: OPL, un lenguaje de programación de restricciones

1010

Mapa de componentes

Código OPL

OPL Studio 3.7

ILOG CPLEX ILOG SOLVER

ILOG SCHEDULER

Page 11: OPL, un lenguaje de programación de restricciones

1111

OPL Studio 3.7

IDE.¿Cómo…Abrir/Crear

Modelar

Resolver/Ver resultados?

Page 12: OPL, un lenguaje de programación de restricciones

12

Sintaxis mínima OPL

Estructura de un modelo OPL.

1.

Datos2.

Variables

3.

Función de óptimo4.

Restricciones

5.

Procedimiento búsqueda

Page 13: OPL, un lenguaje de programación de restricciones

13

Sintaxis mínima OPL.

DatosTipos básicos.

int, float, enumTipos estructurados.

range, array, struct, set

Page 14: OPL, un lenguaje de programación de restricciones

14

Datos. Tipos básicos

intint numero1 = 2;int numero2 = numero1 * numero1 + 1;int numero3 = ...;int dimeTu << "Pasame un entero";

Page 15: OPL, un lenguaje de programación de restricciones

15

Datos. Tipos básicos

floatfloat real = -3.2;float+ real_positivo = 4.27;

Page 16: OPL, un lenguaje de programación de restricciones

16

Datos. Tipos básicos.

enumenum Color { Azul, Grana, Naranja };enum Days { Lunes, Miercoles, Viernes, Domingo};

//Color mi_color = Azul;

Page 17: OPL, un lenguaje de programación de restricciones

17

Datos. Tipos estructurados

rangerange coches 1..6;range numeros [2*numero1..2*numero2];

Page 18: OPL, un lenguaje de programación de restricciones

18

Datos. Tipos estructurados

arraysDos aspectos a estudiar

IndexaciónInicialización

Page 19: OPL, un lenguaje de programación de restricciones

19

Datos. Tipos estructurados

arraysint

mi_array[2..5] = [10, 20, 30, 40];

//int

a1 = mi_array[3];

Color concesionario[coches] = [Azul, Grana, Naranja, Naranja, Azul, Azul];

//int

me_gusta[Days] = [0,3,6,3];

Page 20: OPL, un lenguaje de programación de restricciones

20

Datos. Tipos estructurados

arraysint

camisetas[i

in

1..3] = i+1;

int

feliz[Days,1..3] = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12] ];

int

muy_elegante[Days, Color] = …;

Page 21: OPL, un lenguaje de programación de restricciones

21

Datos. Tipos estructurados

int muy_elegante[Days, Color] = ...;//Instanciamuy_elegante

= #[

Lunes : #[Azul : 4,Naranja : 2,Grana : 3 ]#,

Miercoles

: #[Azul : 3,Naranja : 3,Grana : 4 ]#

… ]#;

Page 22: OPL, un lenguaje de programación de restricciones

22

Datos. Tipos estructurados

structstruct Conexion {

int

origen;int

destino;

};Conexion

c = <2,3>;

//int

orig

= c.origen;

Page 23: OPL, un lenguaje de programación de restricciones

23

Datos. Tipos estructurados

sets{int} pares_hasta4

= {0,2,4};

{Conexion} conexiones = {<1,2>, <1,3>, <2,3>};

//Array

indexado por los elementos de un conjunto. Estos elementos son estructuras.int

valores[conexiones] = [3,4,5];

Page 24: OPL, un lenguaje de programación de restricciones

24

Sintaxis mínima OPL

Estructura de un modelo OPL.

1.

Datos2.

Variables

3.

Función de óptimo4.

Restricciones

5.

Procedimiento búsqueda

Page 25: OPL, un lenguaje de programación de restricciones

25

Sintaxis mínima OPL

Variables de decisiónintfloatenum

Page 26: OPL, un lenguaje de programación de restricciones

26

Variables de decisión

intvar int entero1 in 0..5;var int nuevo_concesionario1[coches] in 0..1;

enumvar Color nuevo_concesionario2[coches];

Page 27: OPL, un lenguaje de programación de restricciones

27

Variables de decisión

floatvar float x3;var float+ x4;var float+ real1[1..3];

Page 28: OPL, un lenguaje de programación de restricciones

28

Sintaxis mínima OPL

assertRestricciones dependientes únicamente de

datos de entrada.

assertnum_reinas

>= 3;

Page 29: OPL, un lenguaje de programación de restricciones

29

Sintaxis mínima OPL

Estructura de un modelo OPL.

1.

Datos2.

Variables

3.

Función de óptimo4.

Restricciones

5.

Procedimiento búsqueda

Page 30: OPL, un lenguaje de programación de restricciones

30

Sintaxis mínima OPL

Función de óptimominimize

2*x3 + 3*x4

maximize3*x3 + 2*x4

Page 31: OPL, un lenguaje de programación de restricciones

31

Sintaxis mínima OPL

Estructura de un modelo OPL.

1.

Datos2.

Variables

3.

Función de óptimo4.

Restricciones

5.

Procedimiento búsqueda

Page 32: OPL, un lenguaje de programación de restricciones

32

Sintaxis mínima OPL

RestriccionesLinealesNo lineales

Page 33: OPL, un lenguaje de programación de restricciones

33

Restricciones

Lineales3*x3 + x4 <= 11;-x3 + 2*x4 <= 5;

Page 34: OPL, un lenguaje de programación de restricciones

34

Restricciones

No linealesx1 + x2 < 12;entero1 <> 3;

Page 35: OPL, un lenguaje de programación de restricciones

35

Sintaxis mínima OPL

Estructura de un modelo OPL.

1.

Datos2.

Variables

3.

Función de óptimo4.

Restricciones

5.

Procedimiento búsqueda

Page 36: OPL, un lenguaje de programación de restricciones

36

Sintaxis mínima OPL

Procedimientos de búsquedasearch{

tryall(j

in

0..5 ordered by decreasing

j)entero1 = j;

};

Page 37: OPL, un lenguaje de programación de restricciones

37

Sintaxis mínima OPL

Operadores.

Sobre grupo elementos. sum, prod, max, minRelacionales. =, <>, <, <=, >, >=Lógicos. \/, &, not, =>, <=>Binarios. +, -, *, /, modSobre conjuntos. in, not in, union, diff, inter

Page 38: OPL, un lenguaje de programación de restricciones

38

Sintaxis mínima OPL

Condiciones//filtrado de un conjunto{Conexion} nuevas_conexiones

= { p | p in

conexiones : p.origen

+ p.destino

= 4};

{int} modulos[i in 3..4] = { e | e in 1..10 : e mod i = 0 };modulos[3] = {3,6,9}modulos[4] = {4,8}

Page 39: OPL, un lenguaje de programación de restricciones

39

Sintaxis mínima OPL

forallforall(i

in 1..8){

reinas[i] >= 1;reinas[i] <= 8;

}sumsum(i

in 1..8) reinas[i] = (8*(8+1))/2

Page 40: OPL, un lenguaje de programación de restricciones

40

Sintaxis mínima OPL

Ideas extra sobre restricciones//Restricciones de orden superior

forall(i

in

Range)s[i] = sum(j

in

Range) (s[j] = i);

//Array indexado con posición de otro arrayforall(m

in

Men)

husband[wife[m]] = m;

//Restricciones globalesalldifferent(entero2);

Page 41: OPL, un lenguaje de programación de restricciones

41

Fin