Title: $PF^n$
1Algunos 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
2Algunos 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
31. Arquitectura
Toy
FD
R
store
H
store
store
FD
R
SICStus Prolog
4Algunos 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
52. Restricciones de reales
- Programación lineal.
- Programación lineal entera mixta (MIP).
- Optimización.
- MIP en TOY.
6Programación lineal
Minimizar (Maximizar)
Sujeto a
Ejemplo
Maximizar
Sujeto a
7Programación entera/mixta
Minimizar (Maximizar)
Sujeto a
Ejemplo
Maximizar
Sujeto a
8Programació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 (branchbound,
branchcut, )
BB
9MIP en Toy
minimize, maximize real -gt real Toy(R)gt 2XY
lt 16, X2Y lt 11, X3Y lt 15,
Z30X50Y, maximize Z Z X -gt
7.00000000000001, Y -gt 1.9999999999999956, Z
-gt 310.00000000000006 Elapsed time 0
ms. sol.1, more solutions (y/n/d/a)
y? no Elapsed time 0 ms.
10MIP en Toy
bb_minimize, bb_maximize real -gt real -gt
real Toy(R)gt E40G50C,GClt50,3G4Clt180,
Clt40,Cgt0,Ggt0,bb_maximize E C,G E
E -gt 2300, G -gt 20, C -gt
30 Elapsed time 31 ms. sol.1, more
solutions (y/n/d/a) y? no Elapsed
time 0 ms.
11Resumen de funciones
minimize, maximize bb_minimize, bb_maximize
12Implementación CFLP(R)
13Implementación Compilación de programas
Archivos
Declaraciones Toy (usuario y predefinidas)
Unión de archivos
Traducción a primer orden
Análisis léxico, sintáctico y (parte del)
semántico
Módulos
Outgenerated
Inferencia de tipos y última etapa de compilación
plgenerated
14Implementación Carga de programas
plgenerated
- consult(program)
- toycomm.pl Predicados comunes (e.g., hnf)
- primFunct.pl Declaraciones de funciones
predefinidas - primitivCod.pl Implementación de funciones
predefinidas
15Implementación Carga de la biblioteca R
/cflpr /nocflpr
Módulos Sicstus
Archivos Prolog
16Implementación Implementación de funciones
primitivCod.pl
lt(X,Y,H,Cin,Cout)- hnf(X,HX,Cin,Cout1),
hnf(Y,HY,Cout1,Cout), (number(HX),number(HY)
-gt (HXltHY,HtrueHXgtHY,Hfalse)
errPrim).
primitivCodClpr.pl
- lt(X,Y,H,Cin,Cout)-
- hnf(X,HX,Cin,Cout1),
- hnf(Y,HY,Cout1,Cout2),
- (Htrue,HXltHYHfalse,HXgtHY),
- toSolver(HX,Cout2,Cout3),
- toSolver(HY,Cout3,Cout4),
- toSolver(H,Cout4,Cout).
17Algunos 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
182. Restricciones de dominio finito
- Abstracción operacional
- e.g. x ? y z (asignación) es xyz
(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.)
19Motivaciones
- Marco natural Declarative Programming
- DP LP o FP
Objeto
Objeto
Relación
Objeto
Constraint
20Estructura de un programa de restricciones (DF)
Definición de los parámetros
Declaración de las variables de decisión
Acotación de dominios (domain)
Declaración de las restricciones
Especificación del proceso de búsqueda (Optimizaci
ón)
21Problema de satisfacción de restricciones
X ? 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
22Problema de satisfacción de restricciones
(DOMINIOS FINITOS)
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 lt Y ? Ylt
Z Asignaciones (1, 1, 1) insatisfacible
(1, 2, 5) satisfacible
23Problema de satisfacción de restricciones
(representación)
PSR
Soluciones del PSR
Solution 7 X 9 Y 1 Z 1 T 7 W 2
Solution 1 X 9 Y 1 Z 1 T 1 W
8 Solution 2 X 9 Y 1 Z 1 T 2 W
7 Solution 3 X 9 Y 1 Z 1 T 3 W 6
Solution 4 X 9 Y 1 Z 1 T 4 W
5 Solution 5 X 9 Y 1 Z 1 T 5 W
4 Solution 6 X 9 Y 1 Z 1 T 6 W 3
D(X) 1..9 D(Y) 1..9 D(Z) 1..9 D(T)
1..9 D(W) 1..9
X gt Y Z 6 Y lt T Z W ? Y X W T X
lt Z
24Arquitectura del resolutor de restricciones de
dominios finitos
Propagador de X gt Y Z 6
Dominios
D(X) 1..5
D(Z) 1..9
D(Y) 3..7
Propagador de X ltgt Z
Propagador de Y lt T Z
D(T) 1..5
D(W) 2..5
Propagador de X W T
Propagador de W ltgt Y
25Arco 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
26Consistencia de límites
- 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
27Ejemplos de consistencia de límites
No es límite-consistente, ya que para Z2
(max(D(Z)) no existe solución de X-3Y10 en D(X)
y D(Y) En cambio, sí es límite-consistente el
siguiente dominio
28Obtenció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
29Reglas de propagación (propagadores)
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
30Reglas de propagación (propagadores)
Las reglas de propagación determinan que
Por lo que los dominios pueden reducirse a
31Reglas de propagación (propagadores)
Si el dominio inicial es
Determinamos que y el nuevo dominio será
32Desigualdades
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.
33Multiplicación
Si todas las variables son positivas, el
propagador sería
Ejemplo se convierte en
34Algoritmo general del resolutor
35Motivaciones
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
36CFP ?
- 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) ?
37Nuestra propuesta
Antonio J. Fernández, Teresa Hortalá-González,
Fernando Sáenz-Perez PADL2003, ES2002
Antonio J. Fernández, Teresa Hortalá-González,
Fernando Sáenz-Perez y Rafael del Vado
Vírseda TPLP07
38El Modelo Opaco
(Black box!) Ventajas Eficiencia
Específico de la aplicación Semántica
operacional oculta
Desventajas
Restricciones hard wired Carencia
adaptabilidad
Constraint
Salida
Entrada
Restricción Opaca
39Variables Lógicas
No determinismo
Propagación restricciones
C F L P sobre FD
Labeling
Funciones
FD
HO
Pereza
Composición restricciones
Patrones
Tipos
Aplicacionesparciales
40TOY(FD)
Modelado problema Evaluación perezosa
Lenguaje fuente FLP TOY
Almacén de restricciones Resolución restricciones
Resolutor (SICStus)
41TOY(FD) Restricciones FD Funciones
42TOY(FD)
43Resolución CFLP(FD)
- Resolución (tres fases)
- narrowing (reducción
de dominios) - propagación
- técnicas de
splitting (labeling)
Fases (1) selección variable (2)
selección valor
44CFLP(FD) vs. CLP(FD)
CLP(FD) ? CFLP(FD)
smm int ? int ? int ? int ? int ? int ? int
? int ?labelType ? bool smm S E N D M
O R Y Label - domain S,E,N,D,M,O,R,Y
0 9, S gt 0, M gt 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 ? bool add S E N D M O R Y
- 1000S 100E 10N D
1000M 100O 10R E
10000M 1000O 100N 10E Y
45CFLP(FD) vs. CLP(FD)
CFLP(FD) Capacidades adicionales
- Tipos ventajas ya conocidas
- Notación funcional domain X 1 (10-N)
- Aplicaciones parciales, HO y polimorfismo
-
-
- map (3lt) X,Y 3ltX, 3lt Y
- true,true
map (A ? B) ? A ? B map F map F
XXs (F X) (map F Xs)
X,Y ?4,sup
46CFLP(FD) vs. CLP(FD)
CFLP(FD) Capacidades adicionales
PerezaAbre nuevas posibilidades a la
Resolución de restricciones
generateFD int -gt int generateFD N X
generateFD N lt domain X 0
(N-1) lazymagic int -gt int lazymagic N L
lt 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 !!
47CFLP(FD) vs. CLP(FD)
CFLP(FD) Pereza
(.) (B -gt C) -gt (A -gt B) -gt (A -gt C) (F . G) X
F (G X) from int ? int from N Nfrom
(N1) 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
48CFLP(FD) vs. CLP(FD)
Sumario
- CLP(FD) ? CFLP(FD)
- notación funcional,
- tipos,
- HO,
- Parcialización,
- Evaluación perezosa,
- composición de funciones
- (restricciones)
- ????
49Aplicaciones
50Planificación
data taskName t1 t2 t3 t4 t5 t6 data
resourceName m1 m2 type 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!!
51Planificación
scheduleTasks task -gt task -gt
bool scheduleTasks TL true scheduleTasks
(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
-gt taskName -gt task -gt bool precedeList T
TL true precedeList T1 TNTNs TL -
belongs (TN, D, P, R, S) TL, precedes (TN, D, P,
R, S) T1, precedeList T1 TNs TL precedes
task -gt task -gt bool precedes T1 T2 (start T1)
(duration T1) lt (start T2)
Recursión
Restricciones FD
52A Hardware Design Problem
- NOT, AND, and OR gates
- Three-input, one-output circuits
53Circuitos Simples FLP (1)
- type behavior bool -gt bool -gt bool -gt bool
- i0,i1,i2 behavior
- i0 I2 I1 I0 I0 -- Input 0 Module
- i1 I2 I1 I0 I1 -- Input 1 Module
- i2 I2 I1 I0 I2 -- Input 2 Module
- notGate behavior -gt behavior
- notGate B I2 I1 I0 not (B I2 I1 I0)
- andGate,orGate behavior -gt behavior -gt
behavior - andGate 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)
54Circuitos Simples FLP
55Circuitos Simples FLP
P orGate (andGate i0 (notGate i2)) (andGate i1
i2), O P true false true
Pattern ciudadano de primera Clase y HO
se evalua a verdadero y produce 0 false
56Factores Físicos Disipación de Potencia (1)
- power behavior -gt 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
57Factores Físicos Disipación de Potencia (2)
- Construcción de circuitos con potencia
limitada - power B P, P lt maxPower
-
-
power/1 usado como Generador de comportamiento
58Un 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
lt area, power, cost, delay gt
No (Generate and Test) ? Test when Generating
59Ejemplo el factor área
type area, power, cost, delay int type state
(area, power, cost, delay) type circuit
(behavior, state) genCir state -gt
circuit genCir (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)) lt 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))lt 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)) lt 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
60Switching Function Ejemplo
Devuelve el resultado de uncomportamiento B
para todas sus combinaciones de entrada data
functionality bool switchF behavior -gt
functionality switchF Behavior
Out1,Out2,Out3,Out4,Out5,Out6,Out7,Out8 lt
(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
61Generando 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 Retraso NOT 1
1 1 1 AND 2 2
1 1 OR 2 2
2 2
62Implementación Carga de la biblioteca FD
/cflpfd
Compilación
/nocflpfd
63Implementación Biblioteca FD compilación
Compile
64Comparaciones
- 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. TPLP07
65Conclusiones
- TOYFD 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
66Algunos 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
67API para restricciones FD de Prolog
68Ejemplos de uso
queens(N, L) - length(L, N), domain(L,
1, N), constrain_all(L), labeling(,
L). constrain_all(). constrain_all(XXs) -
constrain_between(X, Xs, 1),
constrain_all(Xs). constrain_between(X,,N). con
strain_between(X,YYs,N) - no_threat(X, Y,
N), N1 is N1, constrain_between(X,Ys,N1).
no_threat(X, Y, I) - X \ Y, XI
\ Y, X-I \ Y.
evalfd "queens" 4 L L 2,4,1,3 L
3,1,4,2 evalfd "queens" 13 (append 2,4
1,3) yes evalfd "queens" X 2,4,1,3, X
4 yes evalfd "queens" X 2,XY X 4,
Y 1,3 X 5, Y 3,1,4
69Implementación
evalfd char -gt int -gt int.
evalfd(CL, PL, H, Cin, Cout)- nf(CL, HCL, Cin,
Cout1), hnf(PL, HPL, Cout1, Cout), toyListToIntP
rologList(HPL, PrologList), toyStringToProlog(HCL
, PrologString), name(Predicate,
PrologString), FDGoal .. Predicate,
PrologList, Result, call(FDGoal), intPrologList
ToToyList(Result,H).
70Algunos 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
71ACIDE
- A Configurable Integrated Development
Environment. - Multiplataforma.
- Configurable
- Coloreado léxico.
- Gramáticas para parsing on-the-fly.
- Barras de herramientas.
- Menús,
72- Arquitectura
- Restricciones de reales
- Restricciones de dominio finito
- Carga de bibliotecas
- API para restricciones Prolog
- ACIDE
- Cooperación de resolutores
73Algunos 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
74Cooperación en TOY
TOY
TOY Resolutor de dominios finitos
TOY Resolutor de reales
Puente
TOY cooperación de los resolutores de reales y
dominios finitos vinculación y propagación
75Ejemplo de cooperación (I)
(N,N)
Calcular la intersección entre
. . .
. . .
. . .
- Una cuadrícula discreta de puntos de dimensión N
- domain X, Y 0 N
. . .
(0,0)
- Una región continua determinada por los
semiplanos - RYgtRY0-H, RY-RXltRY0-RX0, RYRXltRY0RX0
(RX0,RY0)
H
(RX0H,RY0-H)
(RX0-H,RY0-H)
H
76Ejemplo de cooperación (II) código en TOY
(N,N)
. . .
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 ?
grid square N (X, Y) - domain X, Y 0 N type
region setOf cPoint triangle cPoint ? real
? region triangle (RX0, RY0) H (RX, RY) -
RYgtRY0-H, RY-RXltRY0-RX0, RYRXltRY0RX0 bothIn
region ? grid ? dPoint ? bool bothIn Region
Grid (X, Y) - XRX, YRY, isIn Region
(RX,RY), isIn Grid (X,Y), labeling X,Y
. . .
. . .
. . .
(0,0)
(RX0,RY0)
H
(RX0H,RY0-H)
(RX0-H,RY0-H)
H
77Ejemplo de cooperación (III) posibles objetivos
Objetivos y respuestas que devuelve el sistema
TOY
0,5
1
78Ejemplo de cooperación (IV) posibles objetivos
2
79Ejemplo 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
RYgtRY0-H RY-RXltRY0-RX0 RYRXltRY0RX0
domain X, Y 0 N labeling X,Y
XRX YRY
80Ejemplo de cooperación (VI) Efecto de la
propagación
Sin propagación
XRX YRY
RYgtRY0-H RY-RXltRY0-RX0 RYRXltRY0RX0
domain X, Y 0 N labeling X,Y
Con propagación
0ltRX , RXltN 0ltRY, RYltN RYgtRY0-H
RY-RXltRY0-RX0 RYRXltRY0RX0
XRX YRY
Y gt ?RY0-H? Y - X lt ?RY0-RX0? Y X lt
?RY0RX0 ? domain X, Y 0 N labeling X,Y
81Arquitectura
Sistema de partida (TOY 2.2)
Sistema Cooperativo (TOY 2.3)
Toy
Toy
FD
R
store
store
FD
R
store
H
M
H
store
store
store
store
FD
R
FD
R
SICStus Prolog
SICStus Prolog
82Có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)).
Problema
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(RFD)gt X RX, X 1, RX 0.999999
no Toy(RFD)gt /tolerance(0.000001)
Tolerance1.0E-06 Toy(RFD)gt X RX, X 1, RX
0.999999 X -gt 1, RX -gt
0.999999 Elapsed time 0 ms.
83Más problemas
En ocasiones.... Necesitamos estar seguros que
las variables toman un valor real y no
entero Apaño... (number(HRaux) -gt HR is
HRaux1.0 HR HRaux)
84Código prolog actual del puente
(L, R, Out, Cin, Cout)- hnf(L, HL,
Cin, Cout1) hnf(R, HRaux, Cout1, Cout2)
(number(HRaux) -gt HR is HRaux1.0 HR
HRaux) (tolerance_active(E) -gt Epsilon is
E Epsilon is 0.0) ((Outtrue, Cout3
''(HL,HR)Cout2 freeze(HL,
HL - Epsilon lt HR, HR lt HL Epsilon )
freeze(HR, (HLaux is round(HR), HL is
integer(HLaux)) ) ) (Outfalse,
Cout3 '/'(HL,HR)Cout2
freeze(HL, (F is float(HL), HR \ F))
freeze(HR, (0.0 is float_fractional_part(HR
) -gt (I is
integer(HR), HL \ I)
true)) )
),cleanBridgeStore(Cout3,Cout)
La implementación de / es semejante
85Código prolog de la propagación
gt(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
), (Htrue,HXgtHYHfalse,HXltHY),
(prop_active -gt ( searchVarsFD(HX,Cout,Out1
,HXFD), searchVarsFD(HY,Cout,Out2,HYFD),
( (Out1 true, Out2 true, H
true,!, HXFD gt HYFD) (Out1 true,
Out2 true, H false,!, HXFD lt HYFD)
(Out1 true, Out2 false, H true,!,
HXFD gt HYFD) (Out1 true, Out2
false, H false,!, HXFD lt HYFD)
(Out1 false, Out2 true, H true,!, HXFD
gt HYFD) (Out1 false, Out2
true, H false,!, HXFD lt HYFD)!))true).
86Código prolog de la propagación
gt(L, R, Out, Cin, Cout)- hnf(L, HL, Cin,
Cout1), hnf(R, HR, Cout1, Cout2),
toSolverFD(HL,Cout2,Cout3), toSolverFD(HR,Cout3,Co
ut4), ((Outtrue, HL gt HR) (Outfalse,
HL lt HR)), (prop_active -gt (
searchVarsR(HL,Cout4,Cout5,HLR),
searchVarsR(HR,Cout5,Cout,HRR), ((Out
true, HLR gt HRR ,!) (Out false, HLR lt
HRR ,!)) ) CoutCout4 ).
87Algunos 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
88Má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