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

article/2025/10/24 4:05:22

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

关键词:智能搜索;状态空间;与/或树;博弈树;启发式搜索

1.搜索的含义

人工智能研究的对象大多是属于结构不良或非结构化的问题。对于这些问题,一般很难获得其全部信息,更没有现成的算法可供求解使用,因此只能依靠经验,利用已有知识逐步摸索求解。像这种根据问题的实际情况,不断寻找可利用知识,从而构造一条代价最小的推理路线,使问题得以解决的过程称为搜索。

搜索算法可根据其是否采用智能方法分为盲目搜索算法和智能搜索算法,本文重点讲述的是智能搜索算法。

智能搜索算法是指可以利用搜索过程得到的中间信息来引导搜索过程向最优方向发展的算法。根据基于的搜索机理,这种算法可以分为多种类型。例如,基于搜索空间的状态空间启发式搜索、与/或树启发式搜索及博弈树启发式搜索,基于生物演化过程的进化搜索算法,基于物理退火过程的模拟退火算法等。[1]

2.启发式搜索

2.1状态空间的启发式搜索

       基于状态空间的路径搜索,即将问题求解过程表现为从初始状态到目标状态寻找路径的过程,普通应用于各个领域。基于状态空间的路径搜索算法通常可分为3类:深度优先搜索算法、宽度优先搜索算法(或称广度优先搜索算法)和启发式搜索算法。前两种算法均需在给定的状态空间中穷举,以求解中最佳路径,其非常适合状态空间不大时的求解,但当状态空间十分大,且不预测的情况下,他们的效率极低,甚至不可完成。而启发式搜索算法在状态空间搜索时,对每一个搜索的节点进行评估,得到最佳的节点,再从这个节点进行搜索直到目标节点,可省略大量无谓的搜索路径,极大提到效率,这使得其在状态空间较大的领域得到了广泛应用,如自驾车路线、网络传输路径、游戏中角色行走路线等。[2]

      A*搜索算法是一种加上一些约束条件的最好优先的算法。当状态空间较大时,希望能够求解出状态空间搜索的最短路径,即用最快的方法求解问题,A*搜索算法正是基于这种思想。

如果一个估价函数可以找出最短的路径,称之为可采纳性。A*搜索算法是一个可采纳的最好优先算法。A*搜索算法的估价函数可表示为:

这里面的的附加条件为为n到目标的直线最短距离,也就说A*算法中挑选的启发函数是最优的,也正是如此,所找到的路径是最短路径。[3]

2.2与/或树启发式搜索

       希望树是指搜索过程中最有可能成为最优解树的那棵树。与/或树的启发式搜索过程就是不断地选择、修正希望树的过程,在该过程中,希望树是不断变化的。它需要符合以下三个条件:

1.初始结点S0在希望树T

2.如果是具有子结点, , … , 的或结点,则n的某个子结点在希望树T中的充分必要条件是如果是与结点,则n的全部子结点都在希望树T中。

3. 如果n是与结点,则n的全部子结点都在希望树T中。

2.3博弈树启发式搜索

       博弈是一类具有智能行为的竞争活动,如下棋、战争等。双人完备信息博弈就是两位选手(例如MAX和MIN )对垒,轮流走步,每一方不仅知道对方已经走过的棋步,而且还能估计出对方未来的走步。若把双人完备信息博弈过程用图表示出来,就得到一棵与/或树,这种与/或树被称为博弈树。在博弈树中,那些下一步该MAX走步的结点称为MAX结点,下一步该MIN走步的结点称为MIN 结点。博弈树的特点是

(1)博弈的初始状态是初始结点;

(2)博弈树中的“或”结点和“与”结点是逐层交替出现的;

(3)整个博弈过程始终站在某一方的立场上,例如MAX方。所有能使自己一方获胜的终局都是本原问题,相应的结点是可解结点;所有使对方获胜的终局都是不可解结点。[4]

3.问题实现:滑动积木游戏启发式搜索函数

滑动积木块游戏的棋盘结构及某一种将牌的初始排列结构如下:

其中B表示黑色将牌,W表示白色将牌,E表示空格。游戏的规定走法是:

(1)任意一个将牌可以移入相邻的空格,规定其耗散值为1;

(2)任意一个将牌可相隔1个或2个其他的将牌跳入空格,规定其耗散值等于跳过将牌的数目;游戏要达到的目标是使所有白将牌都处在黑将牌的左边(左边有无空格均可)。对这个问题,定义一个启发函数h(n),并给出利用这个启发函数用算法A求解时所产生的搜索树。可定义h为: h= B右边的W的数目

很多知识对求解问题有好处,这些知识并不一定要写成启发函数的形式, 很多情况下,也不一定能清晰的写成一个函数的形式。由题意,在目标状态下,一个扇区的数字之和等于12,一个相对扇区的数字之和等于24,而一个阴影扇区或者非阴影扇区的数字之和为48。

为此,我们可以将目标进行分解,首先满足阴影扇区的数字之和为48。为了这个目标我们可以通过每次转动圆盘45o实现。在第一个目标被满足的情况下, 我们再考虑第二个目标:每个相对扇区的数字和为24。在实现这个目标的过程中,我们希望不破坏第一个目标。 为此我们采用转动90o的方式实现,这样即可以调整相对扇区的数字和,又不破坏第一个目标。 在第二个目标实现之后,我们就可以实现最终目标:扇区内的数字和为12。同样我们希望在实现这个目标的时候,不破坏前两个目标。为此我们采用转动180o的方式实现。这样同样是即可以保证前两个目标不被破坏,又可以实现第三个目标。

经过这样的分析以后,我们发现该问题就清晰多了。当然,是否每一个第一、第二个目标的实现,都能够实现第三个目标呢?有可能不一定。在这种情况下,就需要在发现第三个目标不能实现时,重新试探其他的第一、第二个目标。

参考文献:

[1] 曹松.基于两种智能搜索算法的无线传感器网络节点定位技术[C].华东理工大学,2013.

[2] 张胜.一种基于状态空间的启发式搜索算法及其实现[J].现代电子技术,2008,(16):79-80+83.

[3] 胡书丽.启发式搜索算法求解组合优化问题的研究[C].东北师范大学,2019.

[4] 张聪品;刘春红;徐久成.博弈树启发式搜索的α-β剪枝技术研究[J].计算机工程与应用,2008,(16):54-55+97.


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

相关文章

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和提取文字就可以直接不看)…

教你自己搭建一个IP池(绝对超好用!!!!)

随着我们爬虫的速度越来越快,很多时候,有人发现,数据爬不了啦,打印出来一看。 不返回数据,而且还甩一句话 是不是很熟悉啊? 要想想看,人是怎么访问网站的? 发请求,对…

Python爬虫实战(二):爬取快代理构建代理IP池

目录 🌹前言构建IP池的目的爬取目标准备工作代码分析第一步第二步第三步第四步第五步完整代码使用方法 🌹前言 博主开始更新爬虫实战教程了,期待你的关注!!! 第一篇:Python爬虫实战(…