生成和测试搜索
介绍:
生成和测试搜索是一种基于带有回溯的深度优先搜索的启发式搜索技术,如果系统地完成并且存在解决方案,则可以保证找到解决方案。在这种技术中,所有解决方案都被生成并测试以获得最佳解决方案。它确保根据所有可能生成的解决方案检查最佳解决方案。
它也被称为大英博物馆搜索算法,因为它就像随机寻找展品或通过随机游荡在大英博物馆中找到一件物品。
评估是由启发式函数执行的,因为所有解决方案都是在生成和测试算法中系统生成的,但如果有一些路径最不可能导致我们得出结果,则不考虑它们。启发式通过对所有备选方案进行排名来做到这一点,并且这样做通常很有效。在解决复杂问题时,系统生成和测试可能被证明是无效的。但是有一种技术可以通过将生成和测试搜索与其他技术相结合来改进复杂情况,从而减少搜索空间。例如,在人工智能程序 DENDRAL 中,我们使用了两种技术,第一种是约束满足技术,然后是生成和测试程序来处理减少的搜索空间,即通过处理生成的较少数量的列表来产生有效的结果。第一步。
算法
- Generate a possible solution. For example, generating a particular point in the problem space or generating a path for a start state.
- Test to see if this is a actual solution by comparing the chosen point or the endpoint of the chosen path to the set of acceptable goal states
- If a solution is found, quit. Otherwise go to Step 1
好的生成器的属性:
好的生成器需要具备以下属性:
- Complete: Good Generators need to be complete i.e. they should generate all the possible solutions and cover all the possible states. In this way, we can guaranty our algorithm to converge to the correct solution at some point in time.
- Non Redundant: Good Generators should not yield a duplicate solution at any point of time as it reduces the efficiency of algorithm thereby increasing the time of search and making the time complexity exponential. In fact, it is often said that if solutions appear several times in the depth-first search then it is better to modify the procedure to traverse a graph rather than a tree.
- Informed: Good Generators have the knowledge about the search space which they maintain in the form of an array of knowledge. This can be used to search how far the agent is from the goal, calculate the path cost and even find a way to reach the goal.
让我们举一个简单的例子来理解一个好的生成器的重要性。考虑一个由三个 2 位数字组成的引脚,即数字的形式为,
在这种情况下,找到所需引脚的一种方法是以蛮力方式生成所有解决方案,例如,
在这种情况下,解决方案的总数是 (100) 3 ,大约是 1M。因此,如果我们不使用任何明智的搜索技术,那么它会导致指数时间复杂度。现在假设我们每分钟生成 5 个解决方案。那么1小时内生成的总数为5*60=300,要生成的解的总数为1M。让我们考虑蛮力搜索技术,例如平均时间复杂度为 N/2 的线性搜索。然后平均而言,要生成的解决方案总数约为 50 万。使用这种技术,即使您每天工作大约 24 小时,您也需要 10 周才能完成任务。
现在考虑使用启发式函数,其中我们有领域知识,每个数字都是 0-99 之间的素数,那么可能的解决方案数是 (25) 3 ,大约是 15,000。现在考虑相同的情况,即您每分钟生成 5 个解决方案并工作 24 小时,那么您可以在不到 2 天的时间内找到解决方案,而在不知情的搜索情况下,这需要 10 周完成。
我们可以在这里得出结论,如果我们能找到一个好的启发式算法,那么时间复杂度可以逐渐降低。但在最坏的情况下,时间和空间复杂度将是指数级的。这完全取决于生成器,即生成器越好,时间复杂度越小。
有趣的现实生活例子:
- If a sufficient number of monkeys were placed in front of a set of typewriters, and left alone long enough, then they would eventually produce all the works of Shakespeare.
- Dendral which infers the structure of organic compounds using NMR spectrogram also uses plan-generate-test.