反向搜索法和爬山法的例子有哪些?
计算机科学术语
科普中国|本词条由《科普中国》词条写作与应用项目评审。
评审专家姚远
反向搜索是从目标状态开始的搜索,通常与正向搜索同时进行(双向搜索)。如果新扩展的状态在前向搜索期间出现在反向搜索中,则通过连接两个搜索路径找到一个解(通常是具有最少搜索步骤的解)。如果反向搜索中新扩展的状态已经出现在正向搜索中,也是最优解,如上所述。反向搜索不仅是一种技术,也是一种思维,广泛应用于计算机软件、互联网技术、电信技术、工业通用技术、贸易经济等领域。
中文名
反向搜索
外国名字
向后搜索
亲戚
向前搜索
科目
计算机技术
自然
逆向思维
人工智能的例子,互联网应用的例子,铁路运输的例子,互联网贸易的例子,计算机软件的例子,TA说参考资料的例子。
人工智能的例子
在人工智能中,双向产生式系统是同时应用正向和反向搜索方法的产生式系统。在该系统中,状态描述和目标描述被合并到一个数据库中,其中状态描述应用F规则,目标描述应用B规则。[1]例如,智能机器人具有自动解决问题的能力,以便制定行动计划。它可以用一组特殊的产生式规则在状态空间中搜索解。为了得到操作序列,我们可以从当前状态集出发,进行正向搜索,或者从目标状态集出发进行反向搜索,或者根据目标状态与当前状态的差异选择合适的操作(手段-目的分析)。[2]
互联网应用的例子
搜索引擎优化(SEO)的主要工作是通过了解各种搜索引擎如何抓取互联网页面,如何对其进行索引,如何确定其对某个特定关键词的搜索结果的排名,从而优化SEO页面,从而改变自己的网站,向搜索结果排名靠前的网站学习,从而提高搜索引擎的排名,从而增加网站的访问量,最终提高网站的销售能力或宣传能力,从而达到SEO的目的。这个试图弄清楚搜索引擎的过程就是一个反向搜索的过程。
铁路运输的例子
逆向路径搜索算法是铁路运输系统中的一种重要算法。该算法利用站点地图与二叉树的相似性,通过站点信息建立二叉树模型。但该算法搜索二叉树的过程与传统二叉树搜索算法相反,是目标子搜索根节点。这种反向搜索可以快速有效地完成所有路径的搜索,而无需遍历搜索。即,在车站地图中完成任意一对车站按钮之间的基本路线和变更路线的搜索。为了满足一些特殊要求(解决列车追踪问题),这种搜索还可以完成任意一对站设备之间的基本进路和变更进路搜索。
例如,互联网贸易
建立网络目标市场反向搜索模型的思路是,首先分析某一具体产品的原理、功能和用途,考虑其主要技术规格、价格等因素,确定该产品的样本特征;基于以上对产品样本特征的分析,推断出有效市场;制定一套检索步骤,检索需要该产品的商务网站,从而找到需要该产品的企业、公司等客户。
计算机软件的例子
反向搜索系统,从输入子串中检查给定列表中的一个或几个单词是否存在的系统。字列表存储在存储器阵列中,该存储器阵列包括用于存储子字的每个存储单元的比较器。一串分子。每个子串被多次加载到比较寄存器中,每次滚动一个子字。在每个存储单元中,它同时与输入的子串进行比较。每个存储单元的一个逻辑电路检测串的子字与列表字的子字的连续匹配。只要列表中的一个完整单词匹配,就为这个单词设置一个信号。设置一个匹配信号列表,优先级编码器可以用来输出其中一个匹配字的地址(位置)。[3] 1.登山方法介绍
爬山法是一种优化算法,一般从一个随机解开始,然后逐渐找到一个最优解(局部最优)。假设问题有多个参数,我们可以在通过爬山一步一步获得最优解的过程中,依次增加或减少一个参数的值一个单位。比如一个问题的求解需要用到x1,x2,x3三个整数参数。一开始这三个参数设置为(2,2,-2),x1增加/减少1得到两个解(1,2,-2),(3)。将x2增加/减少1得到两个解(2,3,-2),(2,1,-2);X3增加/减少1,得到两个解(2,2,-1),(2,2,-3),从而得到一个解集:
(2,2,-2), (1, 2,-2), (3, 2,-2), (2,3,-2), (2,1,-2), (2,2,-1), (2,2,-3)
从上述解集中寻找最优解,然后基于上述方法构造另一个解集,再寻找最优解。这样,直到上一个最优解与下一个最优解相同时,“爬坡”才会结束。
二、Python例子
设方程y = x1+x2-x3,其中x1为区间[-2,5]内的整数,x2为区间[2,6]内的整数,x3为区间[-5,2]内的整数。使用爬山法,找到使y值最小的解。
代码如下:
随机导入
定义评估(x1,x2,x3):
返回x1+x2-x3
if__name__== '__main__ ':
x_range = [ [-2,5],[2,6],[-5,2] ]
best _ sol =[random . randint(x _ range[0][0],x_range[0][1]),
random . randint(x _ range[1][0],x_range[1][1]),
random.randint(x_range[2][0],x_range[2][1])]
虽然正确:
best _ evaluate = evaluate(best _ sol[0],best_sol[1],best_sol[2])
当前最佳值=最佳评估值
sols = [best_sol]
对于xrange(len(best_sol))中的I:
if best _ sol[I]& gt;x_range[i][0]:
sols . append(best _ sol[0:I]+[best _ sol[I]-1]+best _ sol[I+1:])
if best _ sol[I]& lt;x_range[i][1]:
sols . append(best _ sol[0:I]+[best _ sol[I]+1]+best _ sol[I+1:])
打印溶胶
对于溶胶中的s:
el = evaluate(s[0],s[1],s[2])
如果el & lt最佳评估:
best_sol = s
best_evaluate = el
如果最佳评估==当前最佳值:
破裂
打印“最佳解决方案:”、当前最佳值、最佳解决方案
操作的结果如下:
[[0, 5, 1], [-1, 5, 1], [1, 5, 1], [0, 4, 1], [0, 6, 1], [0, 5, 0], [0, 5, 2]]
[[-1, 5, 1], [-2, 5, 1], [0, 5, 1], [-1, 4, 1], [-1, 6, 1], [-1, 5, 0], [-1, 5, 2]]
[[-2, 5, 1], [-1, 5, 1], [-2, 4, 1], [-2, 6, 1], [-2, 5, 0], [-2, 5, 2]]
[[-2, 4, 1], [-1, 4, 1], [-2, 3, 1], [-2, 5, 1], [-2, 4, 0], [-2, 4, 2]]
[[-2, 3, 1], [-1, 3, 1], [-2, 2, 1], [-2, 4, 1], [-2, 3, 0], [-2, 3, 2]]
[[-2, 2, 1], [-1, 2, 1], [-2, 3, 1], [-2, 2, 0], [-2, 2, 2]]
[[-2, 2, 2], [-1, 2, 2], [-2, 3, 2], [-2, 2, 1]]
最佳解:-2 [-2,2,2]
可以看出最优解是-2,x1,x2,x3对应的值分别是-2,2,2。
第三,如何找到全局最优
爬山法得到的最优解可能是局部最优解。如果要得到一个更好的解,就要多次使用爬山算法(从不同的初始解开始),从多个局部最优解中寻找最优解,这个最优解也可能是全局最优解。
另外,模拟退火算法也是一种试图寻找全局最优解的算法。
用Python实现Kmeans++算法的一个例子
1,来自Kmeans,Kmeans是一个非常基础的聚类算法,采用的是迭代的思想,这里就不说它的原理了。下面说说matlab中如何使用kmeans算法。创建七个二维
Python中的映射、归约和过滤分析
1.让我们来看看什么是可迭代对象。以内置的max函数为例,看它的Doc: Print Max。_ _ Doc _ Max(可迭代[,key = func])-Value Max (a,b,c,...[,key = func])-valuewithsingleiteraparameter。
Python中的Numpy简介
1,什么是Numpy很简单。Numpy是Python的科学计算库,提供了矩阵运算的功能。它通常与Scipy和matplotlib一起使用。事实上,list已经提供了一个类似矩阵的