代码之家  ›  专栏  ›  技术社区  ›  cala

基于启发式值的Prolog贪婪搜索

  •  0
  • cala  · 技术社区  · 6 年前

    我有一个图和一个启发式表,有一个列表连接和节点值,还有成本(启发式表)。

    图:

    启发式表格:

    它们在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

    启发式表格: The cost of visiting node

    它们在序言中表示如下。

    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在那里我能找到关于搜索的大部分信息

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ramya    6 年前

    • n

    • s

    • h() h(n) (?)

    • w(a,b) a b

    • g()

    • h(b)

    • h(b) + g(b)

    findall