Algunos aspectos de la implementación de TOY

88
1/16 Algunos aspectos de la implementación de TOY 1.Arquitectura 2.Restricciones de reales 3.Restricciones de dominio finito 4.Carga de bibliotecas 5.API para restricciones Prolog 6.ACIDE 7.Cooperación de resolutores 8.Trabajo futuro

description

Algunos aspectos de la implementación de TOY. Arquitectura Restricciones de reales Restricciones de dominio finito Carga de bibliotecas API para restricciones Prolog ACIDE Cooperación de resolutores Trabajo futuro. Algunos aspectos de la implementación de TOY. Arquitectura - PowerPoint PPT Presentation

Transcript of Algunos aspectos de la implementación de TOY

Page 1: Algunos aspectos de la implementación de TOY

1/16Algunos aspectos de la implementación de TOY

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

8. Trabajo futuro

Page 2: Algunos aspectos de la implementación de TOY

2/16Algunos aspectos de la implementación de TOY

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

8. Trabajo futuro

Page 3: Algunos aspectos de la implementación de TOY

3/161. Arquitectura

Toy

FD R

SICStus Prolog

H

store

FD R

store store

Page 4: Algunos aspectos de la implementación de TOY

4/16Algunos aspectos de la implementación de TOY

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

8. Trabajo futuro

Page 5: Algunos aspectos de la implementación de TOY

5/16

Programación lineal. Programación lineal entera mixta (MIP). Optimización. MIP en TOY.

2. Restricciones de reales

Page 6: Algunos aspectos de la implementación de TOY

6/16

xc j

n

jj

1Minimizar (Maximizar)

bxa ij

n

jij

1

mi ,...,2,1

nj ,...,2,1,0x j

Sujeto a

21 23 xx

421 xx52 21 xx24 21 xx

0, 21 xx

Ejemplo

Maximizar

Sujeto a

x j

21, xx

Programación lineal

Page 7: Algunos aspectos de la implementación de TOY

7/16

xc j

n

jj

1Minimizar (Maximizar)

bxa ij

n

jij

1

mi ,...,2,1

nj ,...,2,1,0x j

Sujeto a

Programación entera/mixta

21 23 xx

421 xx52 21 xx24 21 xx

0, 21 xx

Ejemplo

Maximizar

Sujeto a

x j

21, xx

Page 8: Algunos aspectos de la implementación de TOY

8/16

X1

X2

A(0,4)

B(1,3)

C(2,1)

D(0,1/2)

Programación lineal

Algoritmo del Simplex (Dantzing 1947)

Algoritmo de barrera (punto interior Karmarkar 1984)

Programación entera/mixta

Algoritmo de ramificación y acotación(branch&bound, branch&cut, …)

xxMaximizar21 23

421 xx

52 21 xx

24 21 xx

X1 = 1,2X2 = 3

Relajación linealdel problema

Relajación linealdel problema + X1 <= 1

Relajación linealdel problema + X1 >= 2

B&B

Page 9: Algunos aspectos de la implementación de TOY

9/16

MIP en Toy

minimize, maximize :: real -> real

Toy(R)> 2*X+Y <= 16, X+2*Y <= 11, X+3*Y <= 15, Z==30*X+50*Y, maximize Z == Z{ X -> 7.00000000000001, Y -> 1.9999999999999956, Z -> 310.00000000000006 }Elapsed time: 0 ms.sol.1, more solutions (y/n/d/a) [y]?noElapsed time: 0 ms.

Page 10: Algunos aspectos de la implementación de TOY

10/16

MIP en Toy

bb_minimize, bb_maximize :: real -> [real ]-> real

Toy(R)> E==40*G+50*C,G+C<=50,3*G+4*C<=180, C<=40,C>=0,G>=0,bb_maximize E [C,G] == E      { E -> 2300,        G -> 20,        C -> 30 }      Elapsed time: 31 ms. sol.1, more solutions (y/n/d/a) [y]?      no      Elapsed time: 0 ms.

Page 11: Algunos aspectos de la implementación de TOY

11/16

Resumen de funciones

minimize, maximizebb_minimize, bb_maximize

Page 12: Algunos aspectos de la implementación de TOY

12/16

Implementación CFLP(R) Módulos

Page 13: Algunos aspectos de la implementación de TOY

13/16

Implementación – Compilación de programas

Compilación

Declaraciones Toy (usuario y predefinidas)

Análisis léxico, sintáctico y (parte del) semántico

Traducción a primer orden

Unión de archivos

Outgenerated

Inferencia de tipos y última etapa de compilaciónplgenerated

Módulos

Archivos

Page 14: Algunos aspectos de la implementación de TOY

14/16

Implementación – Carga de programas

Carga

• toycomm.plPredicados comunes (e.g., hnf)

• primFunct.plDeclaraciones de funciones predefinidas

• primitivCod.plImplementación de funciones predefinidas

:- consult(program)

plgenerated

Page 15: Algunos aspectos de la implementación de TOY

15/16

Implementación – Carga de la biblioteca R

/cflpr

/nocflprArchivos Prolog

Módulos Sicstus

Page 16: Algunos aspectos de la implementación de TOY

16/16

Implementación – Implementación de funciones

$<(X,Y,H,Cin,Cout):- hnf(X,HX,Cin,Cout1), hnf(Y,HY,Cout1,Cout2), (H=true,{HX<HY};H=false,{HX>=HY}), toSolver(HX,Cout2,Cout3), toSolver(HY,Cout3,Cout4), toSolver(H,Cout4,Cout).

$<(X,Y,H,Cin,Cout):- hnf(X,HX,Cin,Cout1), hnf(Y,HY,Cout1,Cout), (number(HX),number(HY) ->

(HX<HY,H=true;HX>=HY,H=false); errPrim).

primitivCod.pl

primitivCodClpr.pl

Page 17: Algunos aspectos de la implementación de TOY

17/16Algunos aspectos de la implementación de TOY

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

8. Trabajo futuro

Page 18: Algunos aspectos de la implementación de TOY

18/16

Abstracción operacional

e.g. x y + z (asignación) es x=y+z (relación),

Carácter multi-disciplinar Resolución de problemas de naturaleza diversa

(no-lineal, cooperativa, optimización, scheduling, timetabling, etc.)

Restricción = relación (ecuacional, simbólica, primitiva, etc.)

2. Restricciones de dominio finito

Page 19: Algunos aspectos de la implementación de TOY

19/16Motivaciones

Marco natural: Declarative Programming DP = LP o FP

Problemas OR

Búsqueda +

Constraints

RelaciónObjetoObjeto

ObjetoConstraint

Page 20: Algunos aspectos de la implementación de TOY

20/16

Estructura de un programa de restricciones (DF)

Declaración de las variables de decisión

Declaración de las restricciones

Especificación del proceso de búsqueda(Optimización)

Definición de los parámetros

Acotación de dominios (domain)

Page 21: Algunos aspectos de la implementación de TOY

21/16Problema de satisfacción de restriccionesX = X1 , X2 , … , Xn

conjunto de variables que toma valores de los respectivos dominios finitos del conjunto

D = D( X1), D( X2) , … , D( Xn)

Una asignación a las variables X1 , X2, … , Xn es una n-tupla de valores

(d1, d2, … , dn) con di D(Xi) i = 1,...n.

Una restricción R(V) con V X, es un subconjunto del producto cartesiano de los dominios:

R( X1, X2, … , Xm) D( X1) x D( X2) x … x D( Xm).

Una asignación (d1, d2, … , dm) satisface la restricción R si:

R(d1 , d2, … , dm) R( X1 , X2, … , Xm)

Una restricción es satisfacible si existe al menos una asignación que la satisface

Page 22: Algunos aspectos de la implementación de TOY

22/16

Ejemplo

Variables: X, Y, Z

Dominios: D(X) = 1, 2, 5, D(Y) = 1, 2, 3, 4, 5, D(Z) = 1, 2, 5, 7

Restricción: R(X, Y, Z) = X < Y Y< Z

Asignaciones: (1, 1, 1) insatisfacible

(1, 2, 5) satisfacible

Problema de satisfacción de restricciones (DOMINIOS FINITOS)

Page 23: Algunos aspectos de la implementación de TOY

23/16

X > Y + Z + 6Y < T + Z

W Y X = W + TX < Z

D(X) = [1..9]D(Y) = [1..9]D(Z) = [1..9]D(T) = [1..9]D(W) = [1..9]

Solution [7]

X = 9Y = 1Z = 1T = 7W = 2

Solution [1]

X = 9Y = 1Z = 1T = 1W = 8

Solution [2]

X = 9Y = 1Z = 1T = 2W = 7

Solution [3]

X = 9Y = 1Z = 1T = 3W = 6

Solution [4]

X = 9Y = 1Z = 1T = 4W = 5

Solution [5]

X = 9Y = 1Z = 1T = 5W = 4

Solution [6]

X = 9Y = 1Z = 1T = 6W = 3

PSR Soluciones del PSR

Problema de satisfacción de restricciones (representación)

Page 24: Algunos aspectos de la implementación de TOY

24/16

D(X) = [1..5]

D(Y) = [3..7]

D(T) = [1..5]

D(W) = [2..5]

D(Z) = [1..9]

Propagador de

X = W + T

Propagador de

X <> Z

Propagador de

Y < T + Z

Propagador de

X > Y + Z + 6

Propagador de

W <> Y

Arquitectura del resolutor de restricciones de dominios finitos

Dominios

Page 25: Algunos aspectos de la implementación de TOY

25/16

Arco consistencia

Una restricción primitiva r es arco-consistente con dominio D si |vars(r)| 2 o vars(r) = {x,y} y para cada d in D(x) existe e en D(y) tal que: , y análogamente para y

Un PSR es arco consistente si todas sus restricciones

primitivas son arco_consitentes

reydx desolución una es },{

Page 26: Algunos aspectos de la implementación de TOY

26/16

Una restricción primitiva r es límite_consistente con dominio D si para cada variable x en vars(r) existen números reales d1, ..., dk para el resto de variables x1, ..., xk tal que es una solución de r, y análogamente para

Un PSR aritmético es límite_consistente si lo son todas sus restricciones primitivas

{ min( , ), , }x D x x d xk dk 1 1

{ max( , )}x D x

Consistencia de límites

Page 27: Algunos aspectos de la implementación de TOY

27/16

Ejemplos de consistencia de límites

No es límite-consistente, ya que para Z=2 (max(D(Z)) no existe solución de X-3Y=10 en D(X) y D(Y)

En cambio, sí es límite-consistente el siguiente dominio:

]2..1[)(],2..0[)(],7..2[)(

53

ZDYDXD

ZYX

]1..0[)(],2..0[)(],7..2[)( ZDYDXD

Page 28: Algunos aspectos de la implementación de TOY

28/16Obtención de la consistencia de límites

Dado un dominio actual D se modifican los puntos extremos de las variables para que resulte límite_consistente

los propagadores o reglas de propagación se encargan de esta tarea

Page 29: Algunos aspectos de la implementación de TOY

29/16

Consideremos la restricción primitiva X = Y + Z que es equivalente a las tres formas

Razonando sobre los valores mínimo y máximo obtenemos las siguientes reglas de propagación:

Reglas de propagación (propagadores)

X D Y D Z X D Y D Z

Y D X D Z Y D X D Z

Z D X D Y Z D X D Y

min( , ) min( , ) max( , ) max( , )

min( , ) max( , ) max( , ) min( , )

min( , ) max( , ) max( , ) min( , )

X Y Z Y X Z Z X Y

Page 30: Algunos aspectos de la implementación de TOY

30/16

Las reglas de propagación determinan que:

Por lo que los dominios pueden reducirse a:

( ) ( )

( ) ( )

( ) ( )

0 2 2 5 3 2

4 2 2 6 8 2

4 3 1 8 8 0

X

Y

Z

D X D Y D Z( ) [ .. ], ( ) [ .. ], ( ) [ .. ] 4 5 2 3 2 2

Reglas de propagación (propagadores)

]2..2[)(],3..0[)(],8..4[)(

ZDYDXD

ZYX

Page 31: Algunos aspectos de la implementación de TOY

31/16

Si el dominio inicial es:

Determinamos que

y el nuevo dominio será:

W P C 9

4

9

3

9

2, ,

4 3 2 9

9

4

3

4

2

49

3

4

3

2

39

2

4

2

3

2

W P C

W D P D C

P D W D C

C D W D P

min( , ) min( , )

min( , ) min( , )

min( , ) min( , )

Reglas de propagación (propagadores)

D W D P D C( ) [ .. ], ( ) [ .. ], ( ) [ .. ] 0 9 0 9 0 9

D W D P D C( ) [ .. ], ( ) [ .. ], ( ) [ .. ] 0 2 0 3 0 4

Page 32: Algunos aspectos de la implementación de TOY

32/16Desigualdades

Las reglas de las desigualdades proporcionan una propagación débil. Sólo hay propagación cuando un miembro toma un valor fijo e igual al mínimo o máximo del otro miembro.

Y Z

]2..2[)(],4..3[)(n propagació]2..2[)(],4..2[)(

npropagaciósin ]3..3[)(],4..2[)(

npropagaciósin ]3..2[)(],4..2[)(

ZDYDZDYD

ZDYD

ZDYD

Page 33: Algunos aspectos de la implementación de TOY

33/16

Multiplicación X Y Z

Si todas las variables son positivas, el propagador sería:

Ejemplo:

se convierte en:

X D Y D Z X D Y D Z

Y D X D Z Y D X D Z

Z D X D Y Z D X D Y

min( , ) min( , ) max( , ) max( , )

min( , ) / max( , ) max( , ) / min( , )

min( , ) / max( , ) max( , ) / min( , )

D X D Y D Z( ) [ .. ], ( ) [ .. ], ( ) [ .. ] 4 8 1 2 1 3

]3..2[)(],2..2[)(],6..4[)( ZDYDXD

Page 34: Algunos aspectos de la implementación de TOY

34/16

Algoritmo general del resolutor

Fase de propagación de consistencia(ejecución de un propagador activo)

¿Inconsistencia?

Retroceso

Fase de búsqueda(imposición del valor de una variable a

uno de los elementos de su dominio actual)

¿Existendominios no

vacíos?

¿Son todos losdominiosunitarios?

FIN(con solución)

FIN(sin solución)

síno

nosí no sí

Page 35: Algunos aspectos de la implementación de TOY

35/16

C(L)P ? (Jaffar y Lassez, 87)

CLP Expresividad LP + Eficiencia CP

Instancias según dominio de computación CLP(FD), CLP(Sets), CLP(), CLP(Bool),....

LP - Unificación

+ Resolución de restricciones

CLP

Motivaciones

Page 36: Algunos aspectos de la implementación de TOY

36/16

Ningún intento convincente en FP, sí en en el contexto multiparadigma.

(Arenas et. al, 1996)l (López-Fraguas y Sánchez Hernández,1999) (Lux, 2001) (Smolka,1994) (Antoy y Hanus, 2000)

¿ Y DOMINIOS FINITOS (FD) ?

CFP ?

Page 37: Algunos aspectos de la implementación de TOY

37/16

Antonio J. Fernández, Teresa Hortalá-González, Fernando Sáenz-Perez

PADL’2003, ES’2002

Nuestra propuesta

Antonio J. Fernández, Teresa Hortalá-González, Fernando Sáenz-Perez y Rafael del Vado Vírseda

TPLP’07

Page 38: Algunos aspectos de la implementación de TOY

38/16El Modelo Opaco(Black box!) Ventajas: Eficiencia

Específico de la aplicación Semántica operacional oculta

Desventajas

Restricciones “hard wired” Carencia adaptabilidad

Constraint

Restricción Opaca

Entrada Salida

Page 39: Algunos aspectos de la implementación de TOY

39/16

Variables

Lógicas

No

determinismo

FD

Propagación

restricciones

Labeling Funciones

HO PerezaComposición

restricciones

Patrones TiposAplicaciones

parciales

CFLP

sobre

FD

Page 40: Algunos aspectos de la implementación de TOY

40/16TOY(FD)

Lenguaje fuente FLPTOY

Resolutor(SICStus)

Modelado problemaEvaluación perezosa

Almacén de restriccionesResolución restricciones

Page 41: Algunos aspectos de la implementación de TOY

41/16TOY(FD): Restricciones FD = Funciones

Page 42: Algunos aspectos de la implementación de TOY

42/16

Sintaxis ‘azucarada’ para los predicados

lógicos:

p t1...tn :- C1, ..., Ck

p t1...tn = true C1, ..., Ck noOverlaps :: task -> task -> bool noOverlaps T1 T2 :- precedes T1 T2 noOverlaps T1 T2 :- precedes T2 T1

TOY(FD)

Page 43: Algunos aspectos de la implementación de TOY

43/16

Resolución CFLP(FD)

Resolución (tres fases)

+ narrowing (reducción de dominios)

+ propagación

+ técnicas de splitting (labeling)Repetitivas

Fases: (1) selección variable (2) selección valor

Page 44: Algunos aspectos de la implementación de TOY

44/16CFLP(FD) vs. CLP(FD)

smm :: int int int int int int int int [labelType] boolsmm S E N D M O R Y Label :- domain [S,E,N,D,M,O,R,Y] 0 9, S #> 0, M #> 0, all_different [S,E,N,D,M,O,R,Y], add S E N D M O R Y, labeling Label [S,E,N,D,M,O,R,Y]

add :: int int int int int int int int booladd S E N D M O R Y :- 1000#*S #+ 100#*E #+ 10#*N #+ D #+ 1000#*M #+ 100#*O #+ 10#*R #+ E #= 10000#*M #+ 1000#*O #+ 100#*N #+ 10#*E #+ Y

CLP(FD) CFLP(FD)

Page 45: Algunos aspectos de la implementación de TOY

45/16

CFLP(FD): Capacidades adicionales

• Tipos: ventajas ya conocidas• Notación funcional: domain [X] 1 (10-N)• Aplicaciones parciales, HO y polimorfismo

map (3#<) [X,Y] = [3#<X, 3#< Y] = [true,true]

map :: (A B) [A] [B]map F [ ] = [] map F [X|Xs]] = [(F X) | (map F Xs)]

X,Y [4,sup]

CFLP(FD) vs. CLP(FD)

Page 46: Algunos aspectos de la implementación de TOY

46/16

Pereza:Abre nuevas posibilidades a la Resolución de restricciones

generateFD :: int -> [int]generateFD N = [X | generateFD N] <== domain [X] 0 (N-1)

lazymagic :: int -> [int]lazymagic N = L <== take N (generateFD N) == L, constrain L L 0 Cs, sum L (#=) N, scalar_product Cs L (#=) N, labeling [ff] L

Evaluación perezosa.Listas infinitas !!

CFLP(FD) vs. CLP(FD)CFLP(FD): Capacidades adicionales

Page 47: Algunos aspectos de la implementación de TOY

47/16

CFLP(FD): Pereza

(.):: (B -> C) -> (A -> B) -> (A -> C)(F . G) X = F (G X)

from :: int [int]from N = [N|from (N+1)]

lazyseries :: int [[int]]lazyseries = map lazymagic.from

take 3 (lazyseries 7) [ [3,2,1,1,0,0,0], [4,2,1,0,1,0,0,0],

[5,2,1,0,0,1,0,0,0] ]

CFLP(FD) vs. CLP(FD)

Page 48: Algunos aspectos de la implementación de TOY

48/16

Sumario

• CLP(FD) CFLP(FD)

• + notación funcional,• + tipos,• + HO, • + Parcialización,• + Evaluación perezosa,• + composición de funciones (restricciones)

• + ????

CFLP(FD) vs. CLP(FD)

Page 49: Algunos aspectos de la implementación de TOY

49/16Aplicaciones

Page 50: Algunos aspectos de la implementación de TOY

50/16

data taskName = t1 | t2 | t3 | t4 | t5 | t6data resourceName = m1 | m2type precedencesType = [taskName]type resourcesType = [resourceName]type task = (taskName, durationType, precedencesType, resourcesType, startType)

Tasks == [ (t1,3,[], [m1],S1), (t2,8,[], [m1],S2), (t3,8,[t4,t5],[m1],S3), (t4,6,[], [m2],S4), (t5,3,[t1], [m2],S5), (t6,4,[t1], [m2],S6)], schedule Tasks 1 20, labeling [] [S1,S2,S3,S4,S5,S6]

SOLVE!!

Planificación

Page 51: Algunos aspectos de la implementación de TOY

51/16

scheduleTasks :: [task] -> [task] -> boolscheduleTasks [] TL = truescheduleTasks [(N, D, P, R, S)|Ts] TL :- precedeList (N, D, P, R, S) P TL, requireList (N, D, P, R, S) R TL, scheduleTasks Ts TL

precedeList :: task -> [taskName] -> [task] -> boolprecedeList T [] TL = trueprecedeList T1 [TN|TNs] TL :- belongs (TN, D, P, R, S) TL, precedes (TN, D, P, R, S) T1, precedeList T1 TNs TL

precedes :: task -> task -> boolprecedes T1 T2 = (start T1) #+ (duration T1) #<= (start T2)

Recursión

Restricciones FD

Planificación

Page 52: Algunos aspectos de la implementación de TOY

52/16

NOT, AND, and OR gates Three-input, one-output circuits

A Hardware Design Problem

Page 53: Algunos aspectos de la implementación de TOY

53/16

Circuitos Simples FLP (1)type behavior = bool -> bool -> bool -> bool

i0,i1,i2 :: behaviori0 I2 I1 I0 = I0 -- Input 0 Modulei1 I2 I1 I0 = I1 -- Input 1 Modulei2 I2 I1 I0 = I2 -- Input 2 Module

notGate :: behavior -> behavior notGate B I2 I1 I0 = not (B I2 I1 I0)

andGate,orGate :: behavior -> behavior -> behaviorandGate B1 B2 I2 I1 I0 = and (B1 I2 I1 I0) (B2 I2 I1 I0) orGate B1 B2 I2 I1 I0 = or (B1 I2 I1 I0) (B2 I2 I1 I0)

Page 54: Algunos aspectos de la implementación de TOY

54/16

i0

i1

i2

Funciones de Orden Superior Patterns: Topologías Patterns aplicados a entradas: salidas orGate (andGate i0 (notGate i2)) (andGate i1 i2)

Circuitos Simples FLP

Page 55: Algunos aspectos de la implementación de TOY

55/16

i0

i1

i2

P == orGate (andGate i0 (notGate i2)) (andGate i1 i2),O == P true false true

se evalua a verdadero y produce 0 == false

Pattern: ciudadano de primera Clase y HO

Circuitos Simples FLP

Page 56: Algunos aspectos de la implementación de TOY

56/16Factores Físicos: Disipación de Potencia (1)

power :: behavior -> int

power i0 = 0

power i1 = 0

power i2 = 0

power (notGate C) = notGatePower + (power C)

power (andGate C1 C2) =

andGatePower + (power C1) + (power C2)

power (orGate C1 C2) =

orGatePower + (power C1) + (power C2)

Reglas para limitar la disipación de potencia

Page 57: Algunos aspectos de la implementación de TOY

57/16

      Construcción de circuitos con potencia limitada

  power B == P, P < maxPower

 

  

power/1 usado como Generador de comportamiento

Factores Físicos: Disipación de Potencia (2)

Page 58: Algunos aspectos de la implementación de TOY

58/16

Un enfoque restringido• Circuito caracterizadom por el estado:

•Idea: Empareja un estado a un circuito en construcción de manera que las variables de estado reflejen el estado actual del circuito durante su generación

• Estado representado por variables de dominio reducción de dominios por la limitación de factores durante la generación

< area, power, cost, delay >

No (Generate and Test) Test when Generating

Page 59: Algunos aspectos de la implementación de TOY

59/16Ejemplo: el factor área type area, power, cost, delay = inttype state = (area, power, cost, delay)type circuit = (behavior, state)

genCir :: state -> circuitgenCir (A, P, C, D) = (i0, (A, P, C, D))genCir (A, P, C, D) = (i1, (A, P, C, D))genCir (A, P, C, D) = (i2, (A, P, C, D))genCir (A, P, C, D) = (notGate B, (A, P, C, D)) <== domain [A] ((fd_min A) + notGateArea) (fd_max A), genCir (A, P, C, D) == (B, (A, P, C, D))genCir (A, P, C, D) = (andGate B1 B2, (A, P, C, D))<== domain [A] ((fd_min A) + andGateArea) (fd_max A), genCir (A, P, C, D) == (B1, (A, P, C, D)), genCir (A, P, C, D) == (B2, (A, P, C, D))genCir (A, P, C, D) = (orGate B1 B2, (A, P, C, D)) <== domain [A] ((fd_min A) + orGateArea) (fd_max A), genCir (A, P, C, D) == (B1, (A, P, C, D)), genCir (A, P, C, D) == (B2, (A, P, C, D))

Funcion de reflexión

Constraint

Page 60: Algunos aspectos de la implementación de TOY

60/16

Switching Function: Ejemplo

• Devuelve el resultado de un”comportamiento” B para todas sus combinaciones de entrada

data functionality = [bool]

switchF :: behavior -> functionality switchF Behavior = [Out1,Out2,Out3,Out4,Out5,Out6,Out7,Out8] <== (Behavior false false false) == Out1, (Behavior false false true) == Out2,

(Behavior false true false) == Out3, (Behavior false true true) == Out4,

(Behavior true false false) == Out5, (Behavior true false true) == Out6,

(Behavior true true false) == Out7, (Behavior true true true) == Out8

Page 61: Algunos aspectos de la implementación de TOY

61/16Generando un Circuito NOR domain [A] 0 maxArea, domain [P] 0 maxPower, domain [C] 0 maxCost, domain [D] 0 maxDelay, genCir (A,P,C,D)==(B,S), switchF B ==[true,false,false,false,false,false,false,false]

Algunas respuestas calculadas (entre 24 posibles)para maxFactor = 6

B == (notGate (orGate i0 (orGate i1 i2))), B == (notGate (orGate (orGate i2 i1) i0))B == (andGate (notGate i0) (notGate (orGate i1 i2)))B == (andGate (notGate (orGate i2 i1)) (notGate i0))........................

Puerta Area Potencia Coste RetrasoNOT 1 1 1 1AND 2 2 1 1OR 2 2 2 2

Page 62: Algunos aspectos de la implementación de TOY

62/16

Implementación – Carga de la biblioteca FD

/cflpfd

Nadacflpfd.toy

/nocflpfd

Compilación

Page 63: Algunos aspectos de la implementación de TOY

63/16

Implementación – Biblioteca FD: compilación

Compile

Page 64: Algunos aspectos de la implementación de TOY

64/16

• TOY(FD) se comporta como SICStus excepto en la resolución de ecuaciones lineales ;-(

• TOY(FD) es de 2 a 5 veces más rápido que PAKCs (La implementación de Curry, sin publicar )

Cfr. [TPLP’07]

Comparaciones

Page 65: Algunos aspectos de la implementación de TOY

65/16Conclusiones

TOY+FD proporciona: declaratividad +• Resolución de restricciones FD• No-determinismo• Variables lógicas• Sintaxis relacional • Funciones• Orden superior• Aplicaciones parciales• Notación funcional• Tipos• Evaluación perezosa

Page 66: Algunos aspectos de la implementación de TOY

66/16

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

8. Trabajo futuro

Algunos aspectos de la implementación de TOY

Page 67: Algunos aspectos de la implementación de TOY

67/16

API para restricciones FD de Prolog

Compilation to

Prolog of Toy

Prolog FD Problem

Interface

Sicstus Prolog

Framework

Parameters FD Variables

Parameters

FD Variables

Constraints

FD Problem

Page 68: Algunos aspectos de la implementación de TOY

68/16Ejemplos de uso

evalfd "queens" [4] == LL == [2,4,1,3] ;L == [3,1,4,2]

evalfd "queens" [1+3] == (append [2,4] [1,3])yes

evalfd "queens" [X] == [2,4,1,3],X == 4yes

evalfd "queens" [X] == [2,X|Y]X == 4, Y == [1,3] ;X == 5, Y == [3,1,4]

queens([N], L) :- length(L, N), domain(L, 1, N), constrain_all(L), labeling([], L).

constrain_all([]).constrain_all([X|Xs]) :- constrain_between(X, Xs, 1), constrain_all(Xs).

constrain_between(X,[],N).constrain_between(X,[Y|Ys],N) :- no_threat(X, Y, N), N1 is N+1, constrain_between(X,Ys,N1).

no_threat(X, Y, I) :- X #\= Y, X+I #\= Y, X-I #\= Y.

Page 69: Algunos aspectos de la implementación de TOY

69/16

Implementación

evalfd(CL, PL, H, Cin, Cout):-

nf(CL, HCL, Cin, Cout1),

hnf(PL, HPL, Cout1, Cout),

toyListToIntPrologList(HPL, PrologList),

toyStringToProlog(HCL, PrologString),

name(Predicate, PrologString),

FDGoal =.. [Predicate, PrologList, Result],

call(FDGoal),

intPrologListToToyList(Result,H).

evalfd :: [char] -> [int] -> [int].

Page 70: Algunos aspectos de la implementación de TOY

70/16

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

8. Trabajo futuro

Algunos aspectos de la implementación de TOY

Page 71: Algunos aspectos de la implementación de TOY

71/16

ACIDE A Configurable Integrated Development

Environment. Multiplataforma. Configurable:

Coloreado léxico. Gramáticas para “parsing on-the-fly”. Barras de herramientas. Menús, …

Page 72: Algunos aspectos de la implementación de TOY

72/16

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

Page 73: Algunos aspectos de la implementación de TOY

73/16

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

8. Trabajo futuro

Algunos aspectos de la implementación de TOY

Page 74: Algunos aspectos de la implementación de TOY

74/16

TOY

TOY + Resolutor de dominios finitos

TOY + Resolutor de reales

TOY + cooperación de los resolutores de reales y dominios finitos

vinculación y propagación

Cooperación en TOY

Puente

Page 75: Algunos aspectos de la implementación de TOY

75/16

. . .

.

.

.

.

.

.

. . .

Ejemplo de cooperación (I)

D Primitive Functions AbbreviatesH seq :: A ! A ! bool e1 == e2 =def seq e1 e2 ! ! true e1

== e2 =def seq e1 e2 ! ! f alse

F D iseq :: int ! int ! bool e1 # = e2 =def i seq e1 e2 ! ! tr ue

e1 #n = e2 =def i seq e1 e2 ! ! f alse

i leq :: int ! int ! bool e1 # < e2 =def e2 i leq e1 ! ! f alse e1

# <= e2 =def e1 i leq e2 ! ! true e1

# > e2 =def e1 i leq e2 ! ! f alse e1

# >= e2 =def e2 i leq e1 ! ! tr ue

#+; #¡ ; #¤; #= :: int! int! int,

domain :: [int]! int! int! bool;

belongs :: int ! [int] ! bool,

labeling :: [labelT ype]! [int]! bool

R r leq :: r eal ! r eal ! bool e1 < e2 =def e2 r leq e1 ! ! f alse e1

<= e2 =def e1 r leq e2 ! ! tr ue e1

> e2 =def e1 r leq e2 ! ! f alse e1

>= e2 =def e2 r leq e1 ! ! true

+; ¡ ; ¤; =:: r eal ! r eal ! r eal

M equiv :: int ! real ! bool e1# == e2 =def equiv e1 e2 ! ! tr ue

Table 1: The Constraint Domains H, F D, R and M

(0,0)

(N,N)Calcular la intersección entre:

• Una cuadrícula discreta de puntos de dimensión N

domain [X, Y] 0 N

• Una región continua determinada por los semiplanos

RY>=RY0-H, RY-RX<=RY0-RX0, RY+RX<=RY0+RX0

(RX0,RY0)

H

H(RX0-H,RY0-H)

(RX0+H,RY0-H)

Page 76: Algunos aspectos de la implementación de TOY

76/16

type dPoint = (int, int) type cPoint = (real, real)

type setOf A = (A → bool)

isIn :: (setOf A) → A → bool

isIn Set Element = Set Element

type grid = setOf dPoint

square:: int → gridsquare N (X, Y) :- domain [X, Y] 0 N

type region = setOf cPoint

triangle :: cPoint → real → regiontriangle (RX0, RY0) H (RX, RY) :- RY>=RY0-H, RY-RX<=RY0-RX0, RY+RX<=RY0+RX0

bothIn:: region → grid → dPoint → boolbothIn Region Grid (X, Y) :- X#==RX, Y#==RY, isIn Region (RX,RY), isIn Grid (X,Y), labeling [] [X,Y]

Ejemplo de cooperación (II): código en TOY

(RX0,RY0)

H

H(RX0-H,RY0-H)

(RX0+H,RY0-H)

. . .

.

.

.

.

.

.

. . .

D Primitive Functions AbbreviatesH seq :: A ! A ! bool e1 == e2 =def seq e1 e2 ! ! tr ue e1

== e2 =def seq e1 e2 ! ! f alse

F D iseq :: int ! int ! bool e1 # = e2 =def i seq e1 e2 ! ! tr ue

e1 #n = e2 =def i seq e1 e2 ! ! f alse

i leq :: int ! int ! bool e1 # < e2 =def e2 i leq e1 ! ! f alse e1

# <= e2 =def e1 i leq e2 ! ! tr ue e1

# > e2 =def e1 i leq e2 ! ! f alse e1

# >= e2 =def e2 i leq e1 ! ! tr ue

#+; #¡ ; #¤; #= :: int! int! int,

domain :: [int]! int! int! bool;

belongs :: int ! [int] ! bool,

labeling :: [labelT ype]! [int]! bool

R r leq :: r eal ! r eal ! bool e1 < e2 =def e2 r leq e1 ! ! f alse e1

<= e2 =def e1 r leq e2 ! ! tr ue e1

> e2 =def e1 r leq e2 ! ! f alse e1

>= e2 =def e2 r leq e1 ! ! tr ue

+; ¡ ; ¤; =:: r eal ! r eal ! r eal

M equiv :: int ! r eal ! bool e1# == e2 =def equiv e1 e2 ! ! tr ue

Table 1: The Constraint Domains H, F D, R and M

(0,0)

(N,N)

Page 77: Algunos aspectos de la implementación de TOY

77/16Ejemplo de cooperación (III): posibles objetivos

Objetivos y respuestas que devuelve el sistema TOY:

1

0,5

Page 78: Algunos aspectos de la implementación de TOY

78/16Ejemplo de cooperación (IV): posibles objetivos

2

Page 79: Algunos aspectos de la implementación de TOY

79/16Ejemplo de cooperación (V)

PROBLEMA

¿Qué ocurre si la rejilla es muy muy muy grande ?

¡¡¡ Tarda demasiado !!!

MEJORA: Usar puentes para PROPAGAR

Reduce significativamente el espacio de búsqueda de FD

RY>=RY0-H

RY-RX<=RY0-RX0

RY+RX<=RY0+RX0 X#==RX

Y#==RY

domain [X, Y] 0 N

labeling [] [X,Y]

Page 80: Algunos aspectos de la implementación de TOY

80/16

Ejemplo de cooperación (VI): Efecto de la propagación

Sin propagación

Con propagación

0<=RX , RX<=N

0<=RY, RY<=N

RY>=RY0-H

RY-RX<=RY0-RX0

RY+RX<=RY0+RX0

Y #>= RY0-H

Y #- X #<= RY0-RX0

Y #+ X #<= RY0+RX0 domain [X, Y] 0 N

labeling [] [X,Y]

RY>=RY0-H

RY-RX<=RY0-RX0

RY+RX<=RY0+RX0

domain [X, Y] 0 N

labeling [] [X,Y]

X#==RX

Y#==RY

X#==RX

Y#==RY

Page 81: Algunos aspectos de la implementación de TOY

81/16Arquitectura

Toy

FD R

SICStus Prolog

H M

store store

FD R

store store

Toy

FD R

SICStus Prolog

H

store

FD R

store store

Sistema de partida (TOY 2.2) Sistema Cooperativo (TOY 2.3)

Page 82: Algunos aspectos de la implementación de TOY

82/16Código prolog inicial del puente

$#==(L, R, true, Cin, Cout):-

hnf(L, HL, Cin, Cout1), hnf(R, HR, Cout1, Cout),

freeze(HL, HR is float(HL)), freeze(HR, HL is integer(HR)).

Imprecisión del resolutor de reales,

a veces HR tomo un valor aproximado a un entero

Solución: aplicar tolerancia a la var real en los puentes

Toy(R+FD)> X #== RX, X == 1, RX == 0.999999

no

Toy(R+FD)> /tolerance(0.000001)

Tolerance:1.0E-06

Toy(R+FD)> X #== RX, X == 1, RX == 0.999999

{ X -> 1, RX -> 0.999999 }

Elapsed time: 0 ms.

Problema:

Page 83: Algunos aspectos de la implementación de TOY

83/16Más problemas

En ocasiones....

Necesitamos estar seguros que las variables toman un valor real y no entero

Apaño...

(number(HRaux) -> HR is HRaux*1.0; HR = HRaux)

Page 84: Algunos aspectos de la implementación de TOY

84/16Código prolog actual del puente

$#==(L, R, Out, Cin, Cout):- hnf(L, HL, Cin, Cout1) hnf(R, HRaux, Cout1, Cout2) (number(HRaux) -> HR is HRaux*1.0; HR = HRaux) (tolerance_active(E) -> Epsilon is E ; Epsilon is 0.0) ((Out=true, Cout3 = ['#=='(HL,HR)|Cout2] freeze(HL, {HL - Epsilon =< HR, HR =< HL + Epsilon} ) freeze(HR, (HLaux is round(HR), HL is integer(HLaux)) ) ) (Out=false, Cout3 = ['#/=='(HL,HR)|Cout2] freeze(HL, (F is float(HL), {HR =\= F})) freeze(HR, (0.0 is float_fractional_part(HR) -> (I is integer(HR), HL #\= I) true)) ) ),cleanBridgeStore(Cout3,Cout)

La implementación de $#/== es semejante

Page 85: Algunos aspectos de la implementación de TOY

85/16Código prolog de la propagación

$>(X,Y,H,Cin,Cout):-

hnf(X,HX,Cin,Cout1), hnf(Y,HY,Cout1,Cout2),

toSolver(HX,Cout2,Cout3), toSolver(HY,Cout3,Cout4), toSolver(H,Cout4,Cout),

(H=true,{HX>HY};H=false,{HX=<HY}),

(prop_active ->

( searchVarsFD(HX,Cout,Out1,HXFD),

searchVarsFD(HY,Cout,Out2,HYFD),

( (Out1 == true, Out2 == true, H == true,!, HXFD #> HYFD);

(Out1 == true, Out2 == true, H == false,!, HXFD #=< HYFD);

(Out1 == true, Out2 == false, H == true,!, HXFD #> HYFD);

(Out1 == true, Out2 == false, H == false,!, HXFD #=< HYFD);

(Out1 == false, Out2 == true, H == true,!, HXFD #>= HYFD);

(Out1 == false, Out2 == true, H == false,!, HXFD #< HYFD);!));true).

Page 86: Algunos aspectos de la implementación de TOY

86/16Código prolog de la propagación

#>(L, R, Out, Cin, Cout):-

hnf(L, HL, Cin, Cout1), hnf(R, HR, Cout1, Cout2),

toSolverFD(HL,Cout2,Cout3), toSolverFD(HR,Cout3,Cout4),

((Out=true, HL #> HR); (Out=false, HL #=< HR)),

(prop_active -> (

searchVarsR(HL,Cout4,Cout5,HLR),

searchVarsR(HR,Cout5,Cout,HRR),

((Out == true, { HLR > HRR },!); (Out == false, { HLR =< HRR },!))

); Cout=Cout4

).

Page 87: Algunos aspectos de la implementación de TOY

87/16

1. Arquitectura

2. Restricciones de reales

3. Restricciones de dominio finito

4. Carga de bibliotecas

5. API para restricciones Prolog

6. ACIDE

7. Cooperación de resolutores

8. Trabajo futuro

Algunos aspectos de la implementación de TOY

Page 88: Algunos aspectos de la implementación de TOY

88/16

¡Más madera!

Bases de datos Lenguaje de especificación de estrategias de cooperación Resolutores de ILOG Front-end Web Mejorar ACIDE Publicación TOY 2.3.0 Lenguaje de especificación de restricciones Sobrecarga de funciones Nuevos tipos de datos:

Array Tipos enumerados con FD

Lenguaje algebraico para restricciones Integración con .NET, API C++, API Java Clases de tipos/Jerarquías