人工智能-典型搜索算法

学号:17101223364

姓名:张海潮

转载自:http://m.manew.com/forum.php?mod=viewthread&tid=102750&mobile=2,有删节

【嵌牛导读】:

搜索是AI解决问题的通用技术。有一些单人游戏,如瓷砖游戏,数独,填字游戏等。搜索算法帮助您在这样的游戏搜索特定的位置。

【嵌牛鼻子】:人工智能 搜索 算法

【嵌牛提问】:典型的人工智能搜索算法有哪些?它们的特点是什么?

【嵌牛正文】: 

    单Agent寻路问题

譬如3X3, 4X4,5X5的瓷砖游戏都是单一Agent的寻路挑战。这些路径都是由一块块空白的瓷砖组成。玩家必须水平或者是垂直的移动这些瓷砖到空白的空间,来完成游戏目标。

其他的single agent寻路问题还有例如,旅行推销员问题,魔方以及定理证明类问题

搜索术语

Problem Space −这是搜索发生的环境(一组状态以及运算符来改变这些状态)Problem Instance −是初始状态+目标状态。

Problem Space Graph −代表问题状态。状态由结点表示,而运算符由边缘表示Depth of a problem —操作数从初始状态到目标状态长度最短的路径或者是最短的序列

·

·

Space Complexity  −存储在内存中的最大节点数。

Time Complexity −创建的节点的最大数目

Admissibility −能解决问题的的最佳解决方案算法

Branching Factor − 在问题空间图表中子节点的平均数

Depth −从初始状态到目标状态的最短路径长度

Brute-强制搜索策略

他们是最简单的,因为他们不需要任何特定领域的知识。在可能状态很少的情乱他们可以最好的发挥性能

· 要求−

· ·状态描述

· ·一套有效的操作数

· ·初始状态

· ·目标状态描述

Breadth-优先搜索

它从根节点开始,起初探索相邻节点然后向下一级的相邻节点探索。它一次生成一棵树直到解决方案被发现。使用FIFO队列数据结构可以实现,这个方法提供了解决方案的最短路径

如果分支因子(对于一个给定的节点的子节点的平均数)=b,深度=d,那么d级别的节点数量= bd.

也就是说,在最坏的情况下,在这一级要创建的节点总数为 b + b2 + b3 + … + bd

缺点-因为每一级的节点将会被保留来创造下一级。它将消耗大量的内存空间。存储节点的空间需求是呈指数级增长的。

它的复杂性取决于节点的数量。它可以检查重复节点。

Depth-优先搜索

它实现了递归后进先出栈的数据结构。和Breadth-First方法相同,它创建了相同的一套节点,只不过有不同的顺序

由于单路径上的节点被存储在每次迭代从根到叶节点,存储节点的空间要求是线性的。分支因子带宽深度为 m,存储空间为 BM。

缺点-这个算法可能不会终止并且会在一个路径上无限2延伸。这个问题的解决方案是选择一个截止深度。如果给定一个截止深度cut-off isd,如果给定的截止深度小于d,那么这个算法有可能会失败。如果选择的截止深度超过d,那么执行的时间将会增加

其复杂性取决于路径数。它不能检查重复节点。

双向搜索

它从初始状态和目标状态向后搜索,直到两者达到共同状态。

从初始状态开始的路径被连接从目标状态出发的逆路径。每个搜索只完成了一半的总路径。

成本一致搜索

排序是以节点路径的成本增加为代价的。它总会引起最小成本节点的扩大。如果每个过度都有相同的成本,那么他和双向优先搜索是一致的

以增加开销为代价的情况下,成本一致搜索得以探索路径

缺点—可能存在很多长的路径开销≤ C*。而Uniform Cost search必须探索所有的路径。

迭代加深深度优先搜索

它执行深度优先搜索到1级,然后从头开始,以第2级执行一个完整的深度优先搜索,并继续以这种方式,直到找到解决方案。

它不会创建一个节点,直到所有较低的节点生成。它只保存一组节点。当它在深度 D发现一个解决方案时,算法结束.在深度 D 创建节点的数目是bd,深度 D-1 创建的节点为 bd-1

Informed(启发式)搜索策略

为了解决大的问题,大量的可能状态,需要添加特定问题的知识,以提高搜索算法的效率。

启发式评估功能

他们计算两个状态之间的最佳路径的成本。一个推箱子的启发函数通过计算每一个瓷砖从目标状态移动到现在的状态需要移动的数量,然后添加这些数量给所有的瓷砖。

纯粹的启发式搜索

它根据启发式值的顺序扩展节点。它创造了两个列表,一个未开放的列表给已经被扩展的节点和一个开放的列表对于已经创建但是还没有被扩展的节点

在每次迭代中,一个具有最小启发式值的节点被扩展,所有子节点都被创建并放置在封闭列表中。然后,启发式函数被施加到子节点,它们被放置在开放列表中,根据它们的启发式值。较短的路径被保存,较长的路径被处理。

A* 搜索

他是著名的最佳优先搜索策略。他避免了开销已经很昂贵的扩展路径,而是首先扩展最有可能的路径。

f(n) = g(n) + h(n), 其中

g(n)为到达节点的成本(到目前为止)

h(n)为从节点到目标的估计成本

f(n)为通过N到目标的估计总成本。它采用优先级队列来增加F(n)。

Greedy Best First Search

它扩展预估是最接近的目标的节点。它在f(n)= H(n)的基础上扩展节点。使用优先级队列实现。

缺点—他有可能陷在死循环,不是最优的方案

局部搜索算法

他们从一个前瞻性的解决方案开始,然后移动到邻近的解决方案。他们可以返回一个有效的解决方案,即使它在结束前的任何时候都可以被中断。

爬山搜寻法

它是一个迭代算法,从一个任意的问题的解决方案,并试图找到一个更好的解决方案,通过改变一个单一的元素增量的解决方案。如果变化产生更好的解决方案,增量变化作为一个新的解决方案。重复这个过程,直到没有进一步的改进。

function Hill-Climbing会返回一个局部最大值的状态

inputs: problem, a problem

local variables: current, a node

                neighbor, a node

current <-Make_Node(Initial-State[problem])

loop

  do neighbor <- a highest_valued successor of current

      if Value[neighbor] ≤ Value[current] then

      return State[current]

      current <- neighbor                               

end

缺点 −这种算法既不完整,也不是最优的。

局部剪枝搜索

在该算法中,它持有k个数在任何给定的时间。在开始时,这些状态是随机生成的。这些K状态的继承人的计算与帮助的目标函数。如果这些后继的任何一个是目标函数的最大值,则该算法停止。

否则(初始状态k和k的状态的继任者= 2K)状态被放置在一个池。然后对池进行数值排序。最高k状态被选择为新的初始状态。这个过程一直持续直到达到最大值。

搜索功能( 问题,K),返回一个解决状态。

start with k randomly generated states

loop

  generate all successors of all k states

  if any of the states = solution, then return the state

  else select the k best successors

end

模拟退火法

退火是加热和冷却金属以改变其内部结构以改变其物理性质的过程。当金属冷却时,它的新结构被固定,金属保留其新获得的特性。在模拟退火过程中,温度保持不变。

· 开始

· Initialize k = 0; L = integer number of variables;

· From i → j, search the performance difference ∆.

· If ∆ <= 0 then accept else if exp(-D/T(k)) > random(0,1) then accept;

· Repeat steps 1 and 2 for L(k) steps.

· k = k + 1;

End

Travelling Salesman Problem

在该算法中,目标是找到一个低成本的路线,从一个城市开始,访问所有城市的路线完全一次,并在同一个起点城市结束行程。

Start

  Find out all (n -1)! Possible solutions, where n is the total number of cities.

  Determine the minimum cost by finding out the cost of each of these (n -1)! solutions.

  Finally, keep the one with the minimum cost.

end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容