e5f4633c39
which included commits to RCS files with non-trunk default branches. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@5 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
65 lines
1.0 KiB
Prolog
65 lines
1.0 KiB
Prolog
% 980312 Thom Fruehwirth, LMU
|
|
|
|
:- use_module(library(chr)).
|
|
|
|
handler scheduling.
|
|
|
|
option(check_guard_bindings, on).
|
|
|
|
constraints leq/2, optimize/0.
|
|
% leq(X+N,Y) means: task X starts at least N time units before task Y
|
|
|
|
% assumes leq-relation is non-circular
|
|
|
|
redundant @ leq(N,Y), leq(M,Y) <=> M=<N | leq(N,Y).
|
|
|
|
% optimize gives smallest possible value to a variable
|
|
|
|
optimize @ optimize#Id \ leq(X,Y) <=>
|
|
ground(X),var(Y),findall_constraints(Y,leq(_,Y),L),L=[]
|
|
|
|
|
Y is X
|
|
pragma passive(Id).
|
|
|
|
% classical example --------------------------------------
|
|
|
|
build_house([Start,A,B,C,D,E,F,G,H,I,J,End]) :-
|
|
leq(Start+0,A),
|
|
leq(A+7,B),
|
|
leq(A+7,D),
|
|
leq(B+3,C),
|
|
leq(C+1,E),
|
|
leq(D+8,E),
|
|
leq(C+1,G),
|
|
leq(D+8,G),
|
|
leq(D+8,F),
|
|
leq(C+1,F),
|
|
leq(F+1,H),
|
|
leq(H+3,I),
|
|
leq(G+1,J),
|
|
leq(E+2,J),
|
|
leq(I+2,J),
|
|
leq(J+1,End),
|
|
optimize,
|
|
Start=0.
|
|
|
|
/*
|
|
| ?- build_house([Start,A,B,C,D,E,F,G,H,I,J,End]).
|
|
|
|
A = 0,
|
|
B = 7,
|
|
C = 10,
|
|
D = 7,
|
|
E = 15,
|
|
F = 15,
|
|
G = 15,
|
|
H = 16,
|
|
I = 19,
|
|
J = 21,
|
|
End = 22,
|
|
Start = 0,
|
|
optimize ?
|
|
*/
|
|
|
|
% end of handler scheduling
|