2001-06-06 20:40:57 +01:00
|
|
|
|
|
|
|
:- object(breadth_first(Bound),
|
|
|
|
instantiates(blind_search(Bound))).
|
|
|
|
|
|
|
|
|
|
|
|
:- info([
|
2005-12-24 18:00:21 +00:00
|
|
|
version is 1.1,
|
2003-02-05 00:15:28 +00:00
|
|
|
author is 'Paulo Moura',
|
2005-12-24 18:00:21 +00:00
|
|
|
date is 2005/10/22,
|
2001-06-06 20:40:57 +01:00
|
|
|
comment is 'Breadth first state space search strategy.',
|
2005-12-24 18:00:21 +00:00
|
|
|
source is 'Example adopted from the book "Prolog Programming for Artificial Intelligence" by Ivan Bratko.',
|
2001-06-06 20:40:57 +01:00
|
|
|
parnames is ['Bound']]).
|
|
|
|
|
|
|
|
|
2005-12-24 18:00:21 +00:00
|
|
|
:- uses(list, [member/2, reverse/2]).
|
2001-06-06 20:40:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
search(Space, State, Bound, Solution) :-
|
|
|
|
breadt(Space, l(State), Bound, Path),
|
2005-12-24 18:00:21 +00:00
|
|
|
reverse(Path, Solution).
|
2001-06-06 20:40:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
breadt(Space, Tree, Bound, Solution) :-
|
|
|
|
expand([], Tree, Tree2, Solved, Solution, Space, Bound),
|
|
|
|
(Solved ->
|
|
|
|
true
|
|
|
|
;
|
|
|
|
breadt(Space, Tree2, Bound, Solution)).
|
|
|
|
|
|
|
|
|
|
|
|
expand(Path, l(State), _, true, [State| Path], Space, _) :-
|
|
|
|
Space::goal_state(State).
|
|
|
|
|
|
|
|
expand(Path, l(State), t(State, Subs), fail, _, Space, Bound) :-
|
|
|
|
Bound > 0,
|
|
|
|
bagof(l(Next),
|
|
|
|
(Space::next_state(State, Next),
|
2005-12-24 18:00:21 +00:00
|
|
|
\+ member(Next, [State| Path])),
|
2001-06-06 20:40:57 +01:00
|
|
|
Subs).
|
|
|
|
|
|
|
|
expand(Path, t(State,Subs), t(State, Subs2), Solved, Solution, Space, Bound) :-
|
|
|
|
expandall([State| Path], Subs, [], Subs2, Solved, Solution, Space, Bound).
|
|
|
|
|
|
|
|
|
|
|
|
expandall(_, [], [Tree| Trees], [Tree| Trees], fail, _, _, _).
|
|
|
|
|
|
|
|
expandall(Path, [Tree| Trees], Trees2, Subs2, Solved, Solution, Space, Bound) :-
|
|
|
|
Bound > 0,
|
|
|
|
Bound2 is Bound -1,
|
|
|
|
expand(Path, Tree, Tree2, Solved2, Solution, Space, Bound2),
|
|
|
|
(Solved2 ->
|
|
|
|
Solved = true
|
|
|
|
;
|
|
|
|
expandall(Path, Trees, [Tree2| Trees2], Subs2, Solved, Solution, Space, Bound))
|
|
|
|
;
|
|
|
|
expandall(Path, Trees, Trees2, Subs2, Solved, Solution, Space, Bound).
|
|
|
|
|
|
|
|
|
|
|
|
:- end_object.
|