我有一个图和一个启发式表,有一个列表连接和节点值,还有成本(启发式表)。
图:
启发式表格:
它们在Prolog中表示如下。
s(a,b,2).
S(A,C,1)。
S(B,E,4)。
S(B,G,2)。
S(C,D,1)。
S(C,X,3)。
S(x,g,1)。
H(a,9)
H(B,3)
H(C,2)
H(D,8)
H(E,4)
H(G,0)
H(x,2)
< /代码>
我的查询,如何使用启发式值h(a,9)执行贪婪搜索,以便在每次迭代时找到下一个节点。
我知道如何使用DFS获取最短的可能路径,并使用列表存储该路径。我不知道如何考虑每个节点的启发式值,以便在贪婪的搜索中考虑到这一点-我知道它扩展了最低的H值节点,以找到它的下一个邻居。
DFS:
depthfirstsearch(goaln,path,[goaln path]):-goal(goaln).
depthfirstsearch(node,path,solution):-s(node,nextnode,uux),\+成员(nextnode,path)
DepthFirstSearch(NextNode,[节点路径],解决方案)
< /代码>
正如我在搜索和网络(查找贪婪搜索如何工作的注释)中所做的那样,但是没有什么能解释它如何使用prolog代码。它解释了如何在<代码> Java<代码>、<代码> C++ >代码>等,但我不使用这些语言。
有人能帮我找到正确的方向吗?我在什么地方读到芬德尔可以用?但是如何将启发式值与节点结合起来,例如节点“B”的成本为2,从A到B。我是否用启发式值/成本3替换2的成本?请更详细地解释或指导我到另一个资源,将是有益的现在?
我可以创建一个谓词来帮助在每次迭代中找到下一个节点(当然是使用启发式值)?
请记住,我是Prolog的初学者,尝试各种方法,但努力拼凑起来。
更新:thislinkis where I find out most of the info on searchs
启发式表格:

它们在序言中表示如下。
s(a,b,2).
s(a,c,1).
s(b,e,4).
s(b,g,2).
s(c,d,1).
s(c,x,3).
s(x,g,1).
h(a,9)
h(b,3)
h(c,2)
h(d,8)
h(e,4)
h(g,0)
h(x,2)
我的问题是,如何使用启发式值h(a,9)执行贪婪搜索,以在每次迭代中找到下一个节点。
我知道如何使用DFS获取最短的可能路径,并使用列表存储该路径。我不知道如何在贪婪的搜索中考虑每个节点上的启发式值,我知道它扩展了最小的H值节点,以找到它的下一个邻居。
DFS:
depthfirstsearch(GoalN,Path,[GoalN|Path]) :- goal(GoalN).
depthfirstsearch(Node,Path,Solution) :- s(Node,NextNode,_), \+member(NextNode,Path),
depthfirstsearch(NextNode,[Node|Path],Solution)
正如我在搜索和网络(查找贪婪搜索如何工作的注释)中所做的那样,但是没有什么能解释它如何使用prolog代码。它解释了如何在java
,C++
等等,但是我没有用那些语言。
有人能帮我找到正确的方向吗?我在什么地方读到芬德尔可以用?但是如何将启发式值与节点结合起来,例如节点“B”的成本为2,从A到B。我是否用启发式值/成本3替换2的成本?请更详细地解释或指导我到另一个资源,将是有益的现在?
我可以创建一个谓词来帮助在每次迭代中找到下一个节点(当然是使用启发式值)?
请记住,我是Prolog的初学者,尝试各种方法,但努力拼凑起来。
更新:这个link在那里我能找到关于搜索的大部分信息