Post by Lars Ericson on Aug 1, 2015 17:57:17 GMT -8
LP:
role(robot).
base(p).
base(q1).
base(q2).
base(q3).
base(q4).
base(q5).
base(q6).
base(q7).
base(q8).
base(step(1)).
base(step(2)).
base(step(3)).
base(step(4)).
base(step(5)).
base(step(6)).
base(step(7)).
base(step(8)).
input(robot,a).
input(robot,b).
input(robot,c).
input(robot,d).
input(robot,e).
input(robot,f).
input(robot,g).
input(robot,h).
true(q1,1).
true(step(1),1).
legal(robot,a,T) :- time(T), not terminal(T).
input(robot,a).
legal(robot,b,T) :- time(T), not terminal(T).
input(robot,b).
legal(robot,c,T) :- time(T), not terminal(T).
input(robot,c).
legal(robot,d,T) :- time(T), not terminal(T).
input(robot,d).
legal(robot,e,T) :- time(T), not terminal(T).
input(robot,e).
legal(robot,f,T) :- time(T), not terminal(T).
input(robot,f).
legal(robot,g,T) :- time(T), not terminal(T).
input(robot,g).
legal(robot,h,T) :- time(T), not terminal(T).
input(robot,h).
true(p,T+1) :- time(T), does(robot,a,T).
true(p,T+1) :- time(T), does(robot,b,T).
true(p,T+1) :- time(T), does(robot,c,T).
true(p,T+1) :- time(T), does(robot,d,T).
true(p,T+1) :- time(T), does(robot,e,T).
true(p,T+1) :- time(T), does(robot,f,T).
true(p,T+1) :- time(T), does(robot,g,T).
true(p,T+1) :- time(T), true(p,T).
true(q1,T+1) :- time(T), does(robot,a,T).
true(q1,T+1) :- time(T), does(robot,b,T).
true(q1,T+1) :- time(T), does(robot,c,T).
true(q1,T+1) :- time(T), does(robot,d,T).
true(q1,T+1) :- time(T), does(robot,e,T).
true(q1,T+1) :- time(T), does(robot,f,T).
true(q1,T+1) :- time(T), does(robot,g,T).
true(q1,T+1) :- time(T), does(robot,h,T).
true(q2,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q1,T).
true(q3,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q2,T).
true(q4,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q3,T).
true(q5,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q4,T).
true(q6,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q5,T).
true(q7,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q6,T).
true(q8,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q7,T).
true(step(N),T+1) :- time(T), true(step(M),T), successor(M,N).
goal(robot,100,T) :- time(T), true(q8,T).
goal(robot,0,T) :- time(T), not true(q8,T).
terminal(T) :- time(T), true(step(8),T).
successor(1,2).
successor(2,3).
successor(3,4).
successor(4,5).
successor(5,6).
successor(6,7).
successor(7,8).
:- does(R,M,T), not legal(R,M,T).
:- 0{ terminal(T) : time(T) }0.
:- terminal(T), role(robot), not goal(robot,100,T).
time(1..8).
1{ does(R,M,T) : input(R,M) }1 :- role(R), time(T), 1 <= T, T <= 7.
SOLUTION:
does(robot,h,1)
does(robot,h,2)
does(robot,h,3)
does(robot,h,4)
does(robot,h,5)
does(robot,h,6)
does(robot,h,7)
role(robot).
base(p).
base(q1).
base(q2).
base(q3).
base(q4).
base(q5).
base(q6).
base(q7).
base(q8).
base(step(1)).
base(step(2)).
base(step(3)).
base(step(4)).
base(step(5)).
base(step(6)).
base(step(7)).
base(step(8)).
input(robot,a).
input(robot,b).
input(robot,c).
input(robot,d).
input(robot,e).
input(robot,f).
input(robot,g).
input(robot,h).
true(q1,1).
true(step(1),1).
legal(robot,a,T) :- time(T), not terminal(T).
input(robot,a).
legal(robot,b,T) :- time(T), not terminal(T).
input(robot,b).
legal(robot,c,T) :- time(T), not terminal(T).
input(robot,c).
legal(robot,d,T) :- time(T), not terminal(T).
input(robot,d).
legal(robot,e,T) :- time(T), not terminal(T).
input(robot,e).
legal(robot,f,T) :- time(T), not terminal(T).
input(robot,f).
legal(robot,g,T) :- time(T), not terminal(T).
input(robot,g).
legal(robot,h,T) :- time(T), not terminal(T).
input(robot,h).
true(p,T+1) :- time(T), does(robot,a,T).
true(p,T+1) :- time(T), does(robot,b,T).
true(p,T+1) :- time(T), does(robot,c,T).
true(p,T+1) :- time(T), does(robot,d,T).
true(p,T+1) :- time(T), does(robot,e,T).
true(p,T+1) :- time(T), does(robot,f,T).
true(p,T+1) :- time(T), does(robot,g,T).
true(p,T+1) :- time(T), true(p,T).
true(q1,T+1) :- time(T), does(robot,a,T).
true(q1,T+1) :- time(T), does(robot,b,T).
true(q1,T+1) :- time(T), does(robot,c,T).
true(q1,T+1) :- time(T), does(robot,d,T).
true(q1,T+1) :- time(T), does(robot,e,T).
true(q1,T+1) :- time(T), does(robot,f,T).
true(q1,T+1) :- time(T), does(robot,g,T).
true(q1,T+1) :- time(T), does(robot,h,T).
true(q2,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q1,T).
true(q3,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q2,T).
true(q4,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q3,T).
true(q5,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q4,T).
true(q6,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q5,T).
true(q7,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q6,T).
true(q8,T+1) :- time(T), does(robot,h,T), not true(p,T), true(q7,T).
true(step(N),T+1) :- time(T), true(step(M),T), successor(M,N).
goal(robot,100,T) :- time(T), true(q8,T).
goal(robot,0,T) :- time(T), not true(q8,T).
terminal(T) :- time(T), true(step(8),T).
successor(1,2).
successor(2,3).
successor(3,4).
successor(4,5).
successor(5,6).
successor(6,7).
successor(7,8).
:- does(R,M,T), not legal(R,M,T).
:- 0{ terminal(T) : time(T) }0.
:- terminal(T), role(robot), not goal(robot,100,T).
time(1..8).
1{ does(R,M,T) : input(R,M) }1 :- role(R), time(T), 1 <= T, T <= 7.
SOLUTION:
does(robot,h,1)
does(robot,h,2)
does(robot,h,3)
does(robot,h,4)
does(robot,h,5)
does(robot,h,6)
does(robot,h,7)