propia and chrs
DESCRIPTION
Propia and CHRs. Transforming Constraint Specification into Constraint Behaviour. Motivation for Propia and CHRs. Encode constraints in readable form Set up model without leaving choice points Support constraint propagation. NB: Never introduce choice points in constraint setup Why not? - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/1.jpg)
Propia and CHRs
Transforming Constraint Specification into Constraint Behaviour
![Page 2: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/2.jpg)
2
Motivation for Propia and CHRs
Encode constraints in readable form Set up model without leaving choice points Support constraint propagation
NB: Never introduce choice points in constraint setupWhy not?•repeatedly setting up constraints on different branches•partially blind searching
![Page 3: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/3.jpg)
3
The noclash Example
noclash(S,T) (T S+5) (S T)Specification:
Encoding as ECLiPSe clauses:
noclash(S,T) :- ic:(T >= S+5).noclash(S,T) :- ic:(S >= T).
Model Setup:
setup(S) :- S::1..10, constraint(noclash(S,6)).
![Page 4: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/4.jpg)
4
The noclash constraint in ECLiPSe Prolog
constraint(Goal) :- call(Goal).
This program leaves a choice point
?- setup(S).yes
S = 1
noclash(S,T) :- ic:(T >= S+5).noclash(S,T) :- ic:(S >= T).
setup(S) :- S::1..10, constraint(noclash(S,6)).
![Page 5: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/5.jpg)
5
noclash with Propia
constraint(Goal) :- Goal infers most.
S{[1, 6..10]}
This program does not create any choice points
?- setup(S).yes
noclash(S,T) :- ic:(T >= S+5).noclash(S,T) :- ic:(S >= T).
setup(S) :- S::1..10, constraint(noclash(S,6)).
![Page 6: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/6.jpg)
6
noclash with CHRs
constraint(noclash(S,T)) <=> ic:(T<S+5) | ic:(S >= T).constraint(noclash(S,T)) <=> ic:(S<T) | ic:(T >= S+5).
This program does not create any choice points
?- setup(S).yesS{1..10}
noclash(S,T) :- ic:(T >= S+5).noclash(S,T) :- ic:(S >= T).
setup(S) :- S::1..10, constraint(noclash(S,6)).
![Page 7: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/7.jpg)
7
Choice Points and Efficiency Experiment
sum(Products,Raw1,Raw2,Profit) :- ( foreach(Item,Products), foreach(R1,R1List), foreach(R2,R2List), foreach(P,PList) do product(Item,R1,R2,P) ), Raw1 #= sum(R1List), Raw2 #= sum(R2List), Profit #= sum(PList).
product( 101,1,19,1). product( 102,2,17,2). product( 103,3,15,3). product( 104,4,13,4). product( 105,10,8,5). product( 106,16,4,4).product( 107,17,3,3). product( 108,18,2,2). product( 109,19,1,1).
£11pin19nuts
£22pins17nuts
£PR1pinsR2nuts
Raw1 = 1 + 2 + R1Raw2 = 19 + 17 + R2Profit= 1 + 2 + P
Products:
![Page 8: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/8.jpg)
8
Choice Points and Efficiencyproduct_plan(Products) :- length(Products,9), Raw1 #=< 95, Raw2 #=< 95, Profit #>= 40, sum(Products,Raw1,Raw2,Profit), labeling(Products).
sum(Products,Raw1,Raw2,Profit) :- ( foreach(Item,Products), foreach(R1,R1List), foreach(R2,R2List), foreach(P,PList) do product(Item,R1,R2,P) ), Raw1 #= sum(R1List), Raw2 #= sum(R2List), Profit #= sum(PList).
infers most
33 secs
Time for all 13801 solutions:Time to first solution:
1 hour
95>= R1+R1+R1+R1+R1+R1+R1+R1+R195>= R2+R2+R2+R2+R2+R2+R2+R2+R240=< P +P +P +P +P +P +P +P +P
![Page 9: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/9.jpg)
9
Propia
Annotations Most Specific Generalisation Algorithm
![Page 10: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/10.jpg)
10
Propia’s infers Annotation
Propia annotation says what you want to infer: Goal infers consistent
Fail as soon as inconsistency can be proven
Goal infers uniqueInstantiate as soon as unique solution exists
Goal infers acMaintain finite domains covering all solutions
Goal infers mostUse strongest available representation covering all solutions
![Page 11: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/11.jpg)
11
Annotation Resultsp(1,1).p(1,3).p(1,4).
?- p(X,Y) infers consistent.No information extracted?- p(X,3) infers unique.X=1?- p(X,Y) infers most.X=1 (assuming ic is not loaded)?- p(X,Y) infers most.X=1,Y{[1,3,4]} (assuming ic is loaded)?- p(X,Y) infers ac.X=1,Y{[1,3,4]} (ic must be loaded)
![Page 12: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/12.jpg)
12
More “global” Consistency
pp(X,Y,Z) :- p(X,Y), p(Y,Z).
?- pp(X,Y,Z) infers most.X=1, Y=1, Z{[1,3,4]}
C1C5
C4
C2
C3 C6
C7
C8Problem
Constraints
(C1,C4,C5) infers most
![Page 13: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/13.jpg)
13
Most Specific Generalisation
The Opposite of Unification!
[1,A] [1,1]
[1,_]
[1,1] [2,2]
[X,X]
“most specific generalisations”
![Page 14: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/14.jpg)
14
Most Specific Generalisation over Finite Domains
1 2
X::{[1,2]}
f(1,2) f(2,4)
f(X::{1,2},Y::{2,4})
“most specific generalisations”
![Page 15: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/15.jpg)
15
Naïve Propia Algorithm
Goal infers most
Find all solutions to Goal, and put them in a setFind the most specific generalisation of all the terms in the set
member(X,[1,2,3]) infers most
Find all solutions to member(X,[1,2,3]): {1,2,3}
Find the most specific generalisation of {1,2,3}: X::{1,2,3}
![Page 16: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/16.jpg)
16
Propia Algorithm
Goal infers most
Find one solution S to Goal The current most specific generalisation MSG = S
Repeat Find a solution NewS to Goal
which is NOT an instance of MSG Find the most specific generalisation NewMSG
of MSG and NewS MSG := NewMSG
until no such solution remains
![Page 17: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/17.jpg)
17
Example - without finite domains
p(1,2).p(1,3).p(2,3).p(2,4).
p(X,Y) infers most
MSG:1st Iteration: p(1,2)2nd Iteration: p(1,_)3rd Iteration: p(_,_)No more iterations
![Page 18: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/18.jpg)
18
Propia Algorithm for Arc Consistency
p(1,2).p(1,3).p(2,3).p(2,4).
This algorithm only works for predicates defined by ground facts
p(X,Y) infers ac
is implemented as:
element(I,[1,1,2,2],X),element(I,[2,3,3,4],Y).
![Page 19: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/19.jpg)
19
CHR - Constraints Handling Rules
CHR -- set of rewrite rules for constraints Can be mixed with normal Prolog code
H1...,Hn <=> <Guards> | <Goals>.
CHR -- set of rewrite rules for constraints Can be mixed with normal Prolog code
H1...,Hn <=> <Guards> | <Goals>.
Constraint StoreConstraint Store
add, “tell”“ask”remove
![Page 20: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/20.jpg)
21
Clauses, Constraints, Goals
le(A,B)
Constraint Store
?- le(B,C)
Goal
le(A,C)
le(X,Y1), le(Y2,Z) ==> Y1=Y2 | le(X,Z)
Clause
Head BodyGuard
le(B,C)
![Page 21: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/21.jpg)
22
Constraint Store
Simplification Rule
le(A,B)
?- le(B,A)
Goal
le(B,A)
le(A,B)
le(X,Y), le(Y,X) <=> X=Y
Clause
Head Body
A=B
![Page 22: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/22.jpg)
24
Definition of “less than or equal” (le)
:- constraints le/2.
le(X,Y), le(Y,Z) ==> le(X,Z).le(X,Y), le(Y,X) <=> X=Y.
le(X,Y) ==> X=<Y.le(X,Y) <=> X=<Y | true. Constraint Store
?- le(1,2)
Goal
le(1,2)true
![Page 23: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/23.jpg)
25
Entailment Testing
Constraint Store
le(A,B)
?- min(A,B,Min)
Goal
min(A,B,Min)
le(X,Y) \ min(X,Y,Z) ==> Z=X
Clause
Head Body
Min=A
![Page 24: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/24.jpg)
26
Entailment Testing – without CHR’s
min1(X,Y,Z) :- ic: (Z=<X), ic: (Z=<Y),ge1(X,Y,Z).
?- ic: (X=<Y), ic: (X,Y,B).YesB::0..1
ge1(X,Y,Z) :- ‘=<‘(X,Y,B), ge2(B,X,Y,Z).
delay ge2(B,_,_,_) if var(B).ge2(0,_,Y,Z) :- Z=Y.ge2(1,X,_,Z) :- Z=X.
![Page 25: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/25.jpg)
27
CHR-Defined Precedence
prec(Time1,Duration,Time2)
means that Time1 precedes Time2 by at least Duration.
Note that:•Time1 and Time2 may be variables or numbers• Duration is a number•Duration may be negative (prec(S1,-5,S2) means that S2 precedes S1 by no more than 5)
![Page 26: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/26.jpg)
28
Syntax and semantics for CHRs
Simplification rule:H1...,Hn <=> <Guards> | <Goals>.
Propagation rule:H1...,Hn ==> <Guards> | <Goals>.
Simpagation rule:H1..\..Hn <=> <Guards> | <Goals>.
Heads are match only - no binding of external vars.
Goals are any Prolog goals or constraints.
Constraint added to store if no rule applicable.
Simplification rule:H1...,Hn <=> <Guards> | <Goals>.
Propagation rule:H1...,Hn ==> <Guards> | <Goals>.
Simpagation rule:H1..\..Hn <=> <Guards> | <Goals>.
Heads are match only - no binding of external vars.
Goals are any Prolog goals or constraints.
Constraint added to store if no rule applicable.
![Page 27: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/27.jpg)
29
CHRs for prec/3
%A timepoint precedes itself by a maximum duration of 0
prec(S,D,S) <=> D=<0. (implicit guard in the head)
%Two timepoints preceding each other by (at least) 0 are the same
prec(S1,0,S2), prec(S2,0,S1) <=> S1=S2.(rule with two atoms in the head)
%Transitivity
prec(S1,D1,S2),prec(S2,D2,S3) ==> D3 is D1+D2, prec(S1,D3,S3).(propagation rule)
% prec(S1,D1,S2) is redundant
prec(S1,D1,S2) \ prec(S1,D2,S2) <=> D2>=D1 | true.(simpagation rule)
![Page 28: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/28.jpg)
30
Complete Precedence Entailment
% Assume D is a numbernoclash(S,T)\ prec(T,D,S)<=> D >= -5 | prec(T,0,S).noclash(S,T)\ prec(S,D,T)<=> D >= 0 | prec(S,5,T).
prec(S,D,T) ==> ic:(T>=S+D).
![Page 29: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/29.jpg)
31
Global Consistency
Reasoning on Combinations of ConstraintsPropia and CHRs can apply consistency techniques to combinations of constraints
Propia for a priori combinationsPropia can be applied to program-defined predicates
These predicates combine sets of constraints selected in advance of program execution
CHRs for combining newly posted constraintsCHR multi-headed rules can match combinations of constraints
CHR multi-headed rules can match constraints newly posted during search
![Page 30: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/30.jpg)
32
CHR Exercise
Using CHR, axiomatise constraints “less than” and “minimum”
Ensure logical completeness.
![Page 31: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/31.jpg)
33
Propia and CHR ExerciseImplement three constraints, 'and', 'or' and 'xor'
• in Propia
• in CHR (if you have time)
The constraints are specified as follows:
All boolean variables have domain [0,1]:
0 for 'false'
1 for 'true
and(X,Y,Z) =def (X&Y) = Z
or(X,Y,Z) =def (X or Y) = Z
xor(X,Y,Z) =def ((X & -Y) or (-X & Y)) = Z
![Page 32: Propia and CHRs](https://reader035.vdocuments.site/reader035/viewer/2022062322/568144e8550346895db1b948/html5/thumbnails/32.jpg)
34
Testing Your SolutionSuppose your constraints are called
cons_and, cons_or and cons_xor
Now write enter the following procedure:
full_adder(I1,I2,I3,O1,O2) :-
cons_xor(I1,I2,X1),
cons_and(I1,I2,Y1),
cons_xor(X1,I3,O1),
cons_and(I3,X1,Y2),
cons_or(Y1,Y2,O2).
The test is :
?- full_adder(I1,I2,0,O1,1).