%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% The three barrels in BMAP %%% February 2009 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Change the value of max_lit: %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% 8 (=>5, 3) - 7 actions %%% 12 (=> 7, 5 standard) - 11 actions %%% 16 (=> 9, 7) - 15 actions %%% 20 (=> 11, 9) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Call as :- bmap(11). %% (7,15,19) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Coded by DFP %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% max_lit(12). barrel(M) :- max_lit(N), M is N//2 - 1. barrel(M) :- max_lit(N), M is N//2 + 1. barrel(N) :- max_lit(N). %%%%%%%%%%%%%%%%%%%% agent(a). %%%%%%%%%%%%%%%%%%%%% fluent(contains(B),0,B):- barrel(B). %%%%%%%%%%%%%%%% action([a],pour(X,Y)):- barrel(X),barrel(Y), neq(X,Y). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% causes(contains(X) eq 0, [actocc([a],pour(X,Y)), Y - contains(Y) geq contains(X)]):- action([a],pour(X,Y)). causes(contains(Y) eq contains(Y)^(-1) + contains(X)^(-1), [actocc([a],pour(X,Y)),Y - contains(Y) geq contains(X)]):- action([a],pour(X,Y)). causes(contains(Y) eq Y, [actocc([a],pour(X,Y)), Y - contains(Y) lt contains(X)]):- action([a],pour(X,Y)). causes(contains(X) eq contains(X)^(-1) - Y + contains(Y)^(-1), [actocc([a],pour(X,Y)), Y - contains(Y) lt contains(X)]):- action([a],pour(X,Y)). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% executable([a],pour(X,Y),[contains(X) gt 0, contains(Y) lt Y ]) :- action([a],pour(X,Y)). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% caused([], contains(B) eq B - contains(B1) - contains(B2)) :- max_lit(B), B1 is B//2-1, B2 is B//2+1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% initially(contains(N) eq N) :- max_lit(N). %%%%%%%%%%%%%%% goal(contains(N) eq M) :- max_lit(N), M is N//2. goal(contains(P) eq M) :- max_lit(N), M is N//2, P is M + 1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%