人工智能——搜索技术

article/2025/10/24 2:05:23

转载:https://blog.csdn.net/Sun7_She/article/details/40344329

AI-3的80~84不懂

A*算法不懂


引言:

什么是搜索:

根据问题的实际情况不断寻找可利用的知识,构造出一条代价较少的推理路线,使问题得到圆满的解决的过程称为搜索。

包括两个方面:

——找到从初始事实到问题最终答案的一条推理路径

——找到的这条路径在时间和空间上复杂度最小

 

搜索分两大类:

盲目搜索:也称无信息搜索,即只按预定的控制策略进行搜索,在搜索过程中获得的中间信息不用来改进控制策略。

启发式搜索:在搜索中加入了与问题有关的启发性信息,用于指导搜索朝着最有希望的方向进行,加速问题的求结果称并找到最优解。

 

 回溯问题——皇后问题


 

存在问题:深度问题、死循环问题

解决办法:对搜索深度加以限制、记录从初始状态到当前状态的路径


图搜索策略:

 在对问题的状态空间进行搜索时:

回溯搜索:只保留从初始状态到当前状态的一条路径

图搜索:保留所有已经搜索过的路径


一些基本概念:

节点深度——根节点深度=0

                        其他节点深度=父节点深度+1

路径:设一节点序列为(n0, n1,…,nk),对于i=1,…,k,若节点ni-1具有一个后继节点ni,则该序列称为从n0到nk的路径。

路径的耗散值:一条路径的耗散值等于连接这条路径各节点间所有耗散值的总和。用C(ni, nj)表示从ni到nj的路径的耗散值。

 扩展一个节点:生成出该节点的所有后继节点,并给出它们之间的耗散值,这一过程称为“扩展一个节点”。


无信息图搜索过程:

深度优先搜索、宽度优先搜索

深度优先搜索的性质:

一般不能保证找到最优解
当深度限制不合理时,可能找不到解,可以将算法改为可变深度限制
最坏情况时,搜索空间等同于穷举
与回溯法的差别:图搜索
是一个通用的与问题无关的方法

 

时间复杂度O(bm): 如果 m 比b大很多则比较严重
空间复杂度O(bm), 线性空间
缺点:如果目标节点不在搜索所进入的分支上,而该分支又是一个无穷分支,则就得不到解.因此该算法是不完备的
优点:如果目标节点恰好在搜索所进入的分支上,则可以较快地得到解

 

宽度优先搜索性质:

当问题有解时,一定能找到解
当问题为单位耗散值,且问题有解时,一定能找到最优解
方法与问题无关,具有通用性
效率较低
属于图搜索方法


 

 时间复杂度1+b+b2+b3+… +bd + b(bd-1) = O(bd+1)
空间复杂度O(bd+1)————空间是大问题(和时间相比)
缺点:当目标节点距离初始节点较远时会产生许多无用的节点,搜索效率低
优点:只要问题有解,则总可以得到解,是完备的,而且是最短路径的解

 

回溯与宽度优先方法的结合:

目的:解决宽度优先方法的空间问题和回溯方法不能找到最优解的问题。
思想:首先给回溯法一个比较小的深度限制,然后逐渐增加深度限制,直到找到解或找遍所有分支为止。

 

 时间和空间复杂度:

一字棋的棋局数:9!=105
跳棋的棋局数:大约1078
国际象棋的棋局数:大约10120
围棋的棋局数:大约10761


搜索速度10-100年/步 
搜索一遍国际象棋的时间是1016年(一亿亿年),宇宙的寿命100亿年.


启发式图搜索:

利用知识来引导搜索,达到减少搜索范围,降低问题复杂度的目的

启发信息的强度——强:降低搜索工作量,但可能导致找不到最优解

                                    弱:一般导致工作量加大,极限情况下变为盲目搜索,但可能找到最优解


希望:

引入启发知识,在保证找到最佳解的情况下,尽可能减少搜索范围,提高搜索效率

路径的耗散值和求取路径所需搜索的耗散值二者的组合最小


基本思想:

定义一个评价函数f,对当前的搜索状态进行评估,找出一个最有希望的节点来扩展


启发式搜索算法A(A算法)

1、A算法与A*算法定义

或图通用算法在采用如下形式的估计函数时, 称为A算法。
         f(n)=g(n)+h(n)
 其中g(n)表示从s到n点费用的估计,因为n为当前节点,搜索已达到n点,所以g(n)可计算出。h(n)表示从n到g接近程度的估计,因为尚未找到解路径,所以h(n)仅仅是估计值。


符号意义:

g(n):从S到n的最短路径的耗散值
h(n):从n到g的最短路径的耗散值
f(n)=g(n)+h(n):从s经过n到g的最短路径的耗散值
g*(n)、h*(n)、f*(n)分别是g(n)、h(n)、f(n)的估计值


算法特例:

 1、若令 h(n)≡0,则A算法相当于宽度优先搜索,因为上一层节点的搜索费用一般比下一层的小。
2、g(n)≡h(n)≡0,则相当于随机算法。
3、g(n)≡0,则相当于最佳优先搜索算法。
4、特别是当要求 h(n)≤h*(n),
 就称为这种A算法为A*算法。


A算法举例:



同一问题三种不同方法的比较:

深度优先
扩展次数:13   未扩展结点 8   搜索树中的结点21
宽度优先
扩展次数:8     未扩展结点 9    搜索树中的结点17
启发式搜索
扩展次数:6     未扩展结点 8    搜索树中的结点14


A*算法:

在A算法中,如果满足条件:     (1) g(n)是对g*(n)的估计 g(n)>0         (2) h(n)≤h*(n)   ,    则A算法称为A*算法。

迭代加深A*

基本思想:回溯与A*的结合


其他搜索算法:

1、爬山法(局部搜索算法)

2、分枝定界法

3、动态规划法:如果对于任何n,当h(n)=0时,A*算法就成为了动态规划算法

算法描述:通过删除多余后继节点大大减少了搜索空间,从而降低了搜索费用。 
    删除了四个节点,从而减少了8个节点的扩展生成。

4、分支界限法:分支界限法是优先扩展当前具有最小耗散值分支路径的端节点;评价函数:f(n)=g(n)



http://chatgpt.dhexx.cn/article/Bk2FcMCh.shtml

相关文章

新一代智能搜索引擎,让搜索一击即中

什么是搜索? 搜索引擎的英文为search engine。 搜索引擎是一个对互联网信息资源进行搜索整理和分类,并储存在专属网络数据库中供用户查询的系统,包括信息搜集、信息分类、用户查询三部分。 从使用者的角度看,搜索引擎提供一个包含…

浅谈人工智能搜索技术论文

摘要:本文简单阐述了人工智能中的智能搜索技术的概念以及启发式搜索算法,介绍了几种启发式搜索函数的选择及其研究中遇到的难题,并从中求解来探讨解决问题的思路。 关键词:智能搜索;状态空间;与/或树&…

Python搭建代理IP池(三)- 检测 IP

在获取 IP 时,已经成功将各个网站的代理 IP 获取下来了,然后就需要一个检测模块来对所有的代理进行一轮轮的检测,检测可用就设置为满分,不可用分数就减 1,这样就可以实时改变每个代理的可用情况,在获取有效…

ProxyPool 爬虫代理IP池(分享)

GitHub - jhao104/proxy_pool: Python爬虫代理IP池(proxy pool)https://github.com/jhao104/proxy_pool/ProxyPool 爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供API和CLI两种使用方式。同时…

python爬虫设置代理ip池【源代码】(存入数据库)

python爬虫设置代理ip池【源代码】 在爬取各大网站时,经常遇到一些由于访问次数过多或者访问频率过高,而导致你的ip被“封”。所以我们运用 代理ip池 来解决这个由于访问频率过高而终止爬取进行。 下面介绍一下免费获取代理ip池的方法: 一…

python3之爬虫代理IP的使用+建立代理IP池

爬虫代理IP的使用建立代理IP池 代理IP的使用建立代理IP池完整代码 代理IP的使用 先了解一下百度百科定义的IP 为什么要使用代理IP? 反爬(反网络爬虫) 示例: 测试网址 http://httpbin.org/get 用浏览器先访问测试网址下看看 再用我们写的代码简单请求一下网页看看 impo…

教你创建一个免费的代理IP池(txt存储版本)

教你创建一个免费的代理IP池(txt存储版本) 很多人可能会为爬虫被ban,IP被封等反爬机制苦恼,接下来我就教给大家如何白嫖做一个代理IP池。 准备工作 首先是准备工作,因为是第一个版本,因此我打算先用txt存…

什么是代理IP池,如何构建?

什么是代理ip池? 通俗地比喻一下,它就是一个池子,里面装了很多代理ip。它有如下的行为特征: 1.池子里的ip是有生命周期的,它们将被定期验证,其中失效的将被从池子里面剔除。 2.池子里的ip是有补充渠道的&…

Python爬虫——怎么搭建和维护一个本地IP池

目录 背景 一、什么是本地代理IP池 二、代理IP池功能架构图 三、各个组件功能说明及示例代码 1. IP池管理器 2. 代理IP获取器 3. IP质量检测器 4、数据存储器 5、API接口层 6、应用程序 总结 背景 在我们进行爬虫工作时,经常需要使用代理IP。大多数代理…

搭建代理IP池的方法

突破次数的限制就可以使爬虫更高效的工作,代理IP是突破次数限制,提高爬虫高效工作的最好的工具。所以,很多人都想通过建立IP池的方法,实现换IP突破限制,那么这IP池如何进行搭建呢? 一,免费搭建代理IP池的方法 1.主要用途 当进行数据爬取的时候,有一部分网站是设置了一些…

scrapy中添加ip池的方法

scrapy中添加ip池的方法 我使用的是scrapy2.2 setting 中写下ip池 IPPOOL [{ipaddr:221.230.72.165:80}, {ipaddr:175.154.50.162:8118}, {ipaddr:111.155.116.212:8123},]在在中间件midllewares添加代码 from mypython.settings import IPPOOLfrom scrapy import signals …

Python爬虫 教程:IP池的使用

一、简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问。所以我们需要设置一些代理IP,每隔一…

如何建立爬虫代理ip池

目录 一、为什么需要建立爬虫代理ip池 二、如何建立一个爬虫代理ip池 原文地址:https://www.cnblogs.com/TurboWay/p/8172246.html 一、为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在…

requests模块代理IP池搭建视频爬取

requests模块&代理IP池搭建 一 requests模块使用1.1 get请求1.2 url编码和解码1.3 携带请求头1.4 携带cookie1.5 发送post请求1.6 requests.session1.7 Response1.8 获取二进制数据1.9 解析json 二 使用代理三 django后端获取客户端ip地址四 爬取视频网站五 爬取新闻六 Bau…

Python之爬虫 搭建代理ip池

文章目录 前言一、User-Agent二、发送请求三、解析数据四、构建ip代理池,检测ip是否可用五、完整代码总结 前言 在使用爬虫的时候,很多网站都有一定的反爬措施,甚至在爬取大量的数据或者频繁地访问该网站多次时还可能面临ip被禁,…

如何构建一个自己的代理ip池

一、默认自动切换IP 登录线程IP池客户端时,默认情况下会自动切换IP。 如果不想自动切换IP,或者还没有准备开始使用,请在客户端右侧将“在IP过期前几秒自动申请切换”设置为“0”。 0无效。 二.默认情况下不需要授权 默认情况下&#xff0c…

搭建代理IP池

目录 爬取前的准备 爬取有IP内容 检查IP的可用性 上一期讲到在爬取豆瓣电影Top250时,出现ip被封的情况,解决方案给出了两种: 1. 换个WiFi或者热点; 2. 搭建代理IP池。 那么这期就来搭建代理IP池。通常来说,搭建代理…

python搭建ip池

在爬取网站的时候我们有时候会遭受封ip等显现,因此我们需要搭建自己的ip池用于爬虫。 代码过程简述: 1、爬取代理ip网站信息 2、将获取的信息处理得到ip等关键信息 3、保存首次获取的ip信息并检测其是否可用 4、检测完毕将可用ip保存,搭…

搭建免费代理IP池

👨‍💻博客主页:i新木优子👀 🎉欢迎关注🔍点赞👍收藏⭐留言📝 🧚‍♂️寄语:成功的秘诀就是每天都比别人多努力一点👣 ✨有任何疑问欢迎评论探讨 先声明一下&…

python搭建ip池(多线程)

之前有讲过怎么搭建ip池,但由于单线程的效率太低,于是我们升级改造一下,将单线程变成多线程来搭建ip池,之前的方法可以参考一下:python搭建ip池 (如果会简单的request和提取文字就可以直接不看)…