Prolog 您将如何扩展此搜索以满足贪婪搜索?
弧(a,b)。 弧(a,c)。 弧(b,d)。 弧(b,e)。 弧(c,f)。 弧(f,g)。 弧(e,z)。 弧(d,e)。 弧(z,g)。 弧(z,d)。类似这样的东西:Prolog 您将如何扩展此搜索以满足贪婪搜索?,prolog,Prolog,弧(a,b)。 弧(a,c)。 弧(b,d)。 弧(b,e)。 弧(c,f)。 弧(f,g)。 弧(e,z)。 弧(d,e)。 弧(z,g)。 弧(z,d)。类似这样的东西: dfs([Node | OPEN], _ , Goal) :- Node==Goal, !, write('yes! goal reached.... ' - Goal), nl. dfs([Node | OPEN],CLOSED, Goal) :- findall(
dfs([Node | OPEN], _ , Goal) :-
Node==Goal, !,
write('yes! goal reached.... ' - Goal), nl.
dfs([Node | OPEN],CLOSED, Goal) :-
findall( Next,
(
arc(Node, Next), Next
not(member(Next, OPEN)), not(member(Next, CLOSED))
),
NewNode
),
append(NewNode, OPEN, NewOPEN),
write('OPEN = frontier of search...'), write(NewOPEN),nl,
write('CLOSED = nodes already visited...'), write([Node | CLOSED]),nl,nl,
dfs(NewOPEN, [Node | CLOSED], Goal). % recurse with new data
然后,您需要为每个弧定义一个分数,例如分数(a、b、3)。我们可以获取一些格式吗?谢谢您的提示!如果你想把tp扩展到爬山搜索呢?在这种情况下,我们需要就你所说的爬山意思达成一致。贪心和爬山在这个问题上的区别是非常微妙的。
dfs(Node, Goal) :- !.
dfs(Node, Goal) :-
arc(Node, Next),
score(Node, Next, S),
not (score(Node, Next, S1), S1 > S), write(Next),
dfs(Next, Goal).