📜  当 h(n) 一致时,哪种搜索是完整且最优的? (1)

📅  最后修改于: 2023-12-03 14:54:13.721000             🧑  作者: Mango

完整与最优搜索算法

搜索算法是在问题空间中寻找问题的解决方案的过程。搜索可谓是人工智能领域的基石,它贯穿于诸如游戏、自然语言处理等多个人工智能任务中。搜索算法可以分为无信息与有信息搜索。无信息搜索中每一个状态的价值都是一样的。有信息搜索则要利用已知的信息来进行搜索。

搜索算法的完整性指的是算法能找到问题空间中的任意一个解法。最优性指的是算法找到的解法是最优解。

当哈曼顿距离(h(n))一致时,即所有状态到终点的距离都相同时,广度优先搜索(BFS)是最完整且最优的算法。

BFS基于图论的最短路径问题,每次搜索使用队列来维护搜索的状态序列,按照广度优先的方式进行扩展,如果找到了解就直接返回,因为BFS保证每次找到的解都是最优的。

下面是BFS的基本代码框架:

def bfs(start, goal):
    queue = []  # 定义队列
    queue.append(start)  # 将起始状态压入队列中
    visited = []  # 定义已经扩展过的状态的集合
    while queue:
        node = queue.pop(0)  # 取出队列中的第一个状态进行扩展
        visited.append(node)  # 将此状态加入已扩展的集合中
        # 对该状态进行扩展,如果状态已经扩展过,就不再扩展
        for neighbor in expand(node):
            if neighbor not in visited and neighbor not in queue:
                queue.append(neighbor)  # 将扩展而来的状态压入队列中
                if goal_test(neighbor):  # 判断状态是否为目标状态
                    return neighbor  # 如果是目标状态,直接返回该状态

在哈曼顿距离一致的情况下,BFS保证找到的解一定是最优解,并且该解一定可以在有限时间内被找到。但是如果问题的状态空间特别大,或者解很少,则BFS可能会陷入无限循环中,效率很低。

综上,当哈曼顿距离(h(n))一致时,BFS是最完整且最优的算法。