人工智能——与或图的搜索
与或图的搜索
与或图是一个超图,节点间通过连接符连接
超图(Hypergraph)是什么
简单的来说,对于我们熟悉的图而言,它的一个边(edge)只能和两个顶点连接;而对于超图来讲,人们定义它的边(这里叫超边,hyperedge)可以和任意个数的顶点连接。一个图和超图的示意图如下所示:
而对于超图的一个严格的数学定义,维基百科上是这样写的:
In mathematics, a hypergraph is a generalization of a graph, where an edge can connect any number of vertices. Formally, a hypergraph H is a pair H = (X,E) where X is a set of elements, called nodes or vertices, and E is a set of non-empty subsets of X called hyperedges or links.
k-均匀超图(k-uniform hypergraph)
对于超图而言,还有一个k-均匀超图的概念(k-uniform hypergraph)。它指超图的每个边连接的顶点个数都是相同的,即为个数k。所以2-均匀超图就是我们传统意义上的图,3-均匀超图就是一个三元组的集合,以此类推。
此段摘自: http://blog.csdn.net/raodotcong/article/details/6429991
耗散值的计算:
k(n, N) = Cn+k(n1, N)+…+k(ni, N) 其中:N为终节点集 Cn为连接符的耗散值
能解节点:
终节点是能解节点
若非终节点有“或”子节点时,当且仅当其子节点至少有一能解时,该非终节点才能解。
若非终节点有“与”子节点时,当且仅当其子节点均能解时,该非终节点才能解。
不能解节点:
没有后裔的非终节点是不能解节点。
若非终节点有“或”子节点,当且仅当所有子节点均不能解时,该非终节点才不能解。
若非终节点有“与”子节点时,当至少有一个子节点不能解时,该非终节点才能解。
与或图(树)表示三解梵塔问题
其中(1,1,1)表示CBA三个环都套在第一个杆上,我们的目标是将CBA都移动到第三个杆上,即变为(3,3,3)
与或图的启发式搜索算法(AO*算法):
两个过程:1、图生成过程,即扩展节点 2、计算耗散值的过程
博弈树搜索:
博弈问题特点:
1、双人对弈,轮流走步
2、信息完备,双方所得到的信息是一样的
3、零和,即对一方有利的棋,对另一方肯定是不利的,不存在对双方均有利或无利的棋
博弈的特性:
1、两个棋手交替地走棋
2、比赛的最终结果,是赢、输和平局中的一种
3、可用图搜索技术进行,但效率很低
4、博弈的过程,是寻找置对手于必败态的过程
5、双方都无法干预对方的选择
例:
Grundy博弈
Grundy博弈是一个分钱币的游戏。有 一堆数目为N的钱币,由两位选手轮流进行分堆,要求每个选手每次只把其中某一堆分成数目不等的两小堆。例如,选手甲把N分成两堆后,轮到选手乙就可以挑其中一堆来分,如此进行下去,直到有一位选手无法把钱币再分成不相等的两堆时就得认输。
例2:
Grundy博弈是取石子的游戏。有 一堆数目为N(=15)的石子,由两位选手轮流进行选取,要求每个选手每次只能选取1、或2、或3个石子、拾取最后一个石子的为胜者。设计一种获胜策略。
答:1、先选取;
2、(15)-12-(9、10、11)-8-(5、6、7)-4-(3、2、1)
极小极大搜索过程
中国象棋:
对各个局面进行评估
评估的目的:对后面的状态提前进行考虑,并且以各种状态的评估值为基础作出最好的走棋选择。
评估的方法:用评价函数对棋局进行评估。赢的评估值设为+∞,输的评估值设为-∞,平局的评估值设为0。
评估的标准:由于下棋的双方是对立的,只能选择其中一方为评估的标准方。
由于正方和反方是交替走步的,因此MAX节点和MIN节点会交替出现。
正方(MAX节点)从所有子节点中,选取具有最大评估值的节点。
反方(MIN节点)从其所有子节点中,选取具有最小评估值的节点。
反复进行这种选取,就可以得到双方各个节点的评估值。这种确定棋步的方法,称为极小极大搜索法。
例:
设有一个摆放三个子的棋盘残局,如下图所示,〇和╳在结束前有三步棋可以走,而且设走第一步的是╳ 。这时存在着三个空格A,B,C,用博弈树搜索算法判断应该把棋子放到哪一格内。
所以,对于棋盘残局中的╳来说,最好的选择,是将╳放在C的位置上,这时可以导致平局局面。
α-β搜索过程
出现原因:
在极小极大法中,必须求出所有终端节点的评估值,当预先考虑的棋步比较多时,计算量会大大增加。为了提高搜索的效率,引入了通过对评估值的上下限进行估计,从而减少需进行评估的节点范围的α-β剪支法。
MAX节点的评估下限值α:
作为正方出现的MAX节点,假设它的MIN子节点有N个,那么当它的第一个MIN子节点的评估值为α时,则对于其它的子节点,如果有高过的,就取那最高的值作为该MAX节点的评估值;如果没有,则该MAX节点的评估值为α。
MIN节点的评估上限值β:
作为反方出现的MIN节点,假设它的MAX子节点有N个,那么当它的第一个MAX子节点的评估值为β时,则对于其它子节点,如果有低于的,就取那个低于的值作为该MIN节点的评估值;如果没有,则该MIN节点的评估值取β
α剪支法:
设MAX节点的下限为α,则其所有的MIN子节点中,其评估值的β上限小于等于α的节点,其以下部分的搜索都可以停止了,即对这部分节点进行了α剪支。
β剪支法:
设MIN节点的上限为β,则其所有的MAX子节点中,其评估值的α下限大于等于β的节点,其以下部分的搜索都可以停止了,即对这部分节点进行了β剪支。
改进:
改进1:
使用-剪支技术,当不满足剪支条件(即)时或值比值大不了多少或极相近时,这时也可以进行剪支,以便有条件把搜索集中到会带来更大效果的其他路径上,这就是中止对效益不大的一些子树的搜索,以提高搜索效率。
改进2:
不严格限制搜索的深度。当到达深度限制时,如出现博弈格局有可能发生较大变化时,则应多搜索几层,使格局进入较稳定状态后再中止,这样可使倒推值计算的结果比较合理,避免考虑不充分产生的影响,这是等候状态平稳后中止搜索的方法。
改进3:
当算法给出所选的走步后,不要马上停止搜索,而是在原先估计可能的路径上再往前搜索几步,再次检验会不会出现意外,这是一种增添辅助搜索的方法。
改进4:
对某些博弈的开局阶段和残局阶段,往往总结了一些固定的对弈模式,因此可以利用这些知识编好走步表,以便在开局和结局时使用查表法。只是在进入中盘阶段后,再调用其他有效的搜索算法,来选择最优的走步。
人工智能——与或图的搜索相关推荐
- 题目2:隐式图的搜索问题(A*算法解决八数码)
数据结构课程实践系列 题目1:学生成绩档案管理系统(实验准备) 题目2:隐式图的搜索问题(A*算法解决八数码) 题目3:文本文件单词的检索与计数(实验准备) 文章目录 数据结构课程实践系列 题目1:学 ...
- 数据结构之图:图的搜索,Python代码实现——23
图的搜索 深度优先搜索(Depth First Search) 定义 从例子出发理解 DFS是一种用于遍历或搜寻树类或图类数据结构的算法,这种算法从根结点出发(如果是图,则任意选择一个顶点作为根结点) ...
- 深度搜索和广度搜索领接表实现_数据结构与算法--图的搜索(深度优先和广度优先)...
数据结构与算法--图的搜索(深度优先和广度优先) 有时候我们需要系统地检查每一个顶点或者每一条边来获取图的各种性质,为此需要从图的某个顶点出发,访遍图中其余顶点,且使得每一个顶点只被访问一次,这个过程 ...
- 图论 —— 图的搜索
[概述] 图的搜索问题,是给出一个抽象的字符矩阵代表一张图,根据根据题目要求,对图进行搜索,关于搜索算法:点击这里 根据搜索方法的不同,分为深度优先遍历(DFS).广度优先遍历(BFS),两者时间复杂 ...
- 南华大学计算机学院吴取劲,一种基于图深度优先搜索的基本路径集自动生成优化算法-南华大学学报.PDF...
26 3 ( ) Vol. 26 No. 3 第 卷第 期 南华大学学报 自然科学版 2012 9 Journal of University of South China (Science and ...
- 生成图-深度优先搜索/宽度优先搜索
问题提出: 考虑如下图所示的简单图所表示的缅因州的道路系统.在冬天里保持道路通路通畅的唯一方式就是经常扫雪.高速公路部分希望只扫尽可能少的道路上的雪,而确保总是存在连接任何两个乡镇的干净道路.如何才能 ...
- 《数据结构课程实践》_02_隐式图的搜索问题_准备工作
02_隐式图的搜索问题_准备工作 一.实验题目与要求 二.编程语言以及开发环境 三.实验思路 A*算法 四.预习小结 一.实验题目与要求 实验要求: 对九宫重排问题,建立图的启发式搜索求解方法: 用A ...
- 《数据结构课程实践》_02_隐式图的搜索问题_实现
02_隐式图的搜索问题_实现 一.实验题目 二.编程语言以及开发环境 三.源代码 1.main类 2.节点类 3.算法类 四.运行结果 五.实验小结 一.实验题目 实验要求: 对九宫重排问题,建立图的 ...
- 隐式图的搜索问题(九宫重排)——实验准备
隐式图的搜索问题(九宫重排)--实验准备 隐式图的搜索问题(九宫重排) 实验任务 实验要求 A*算法 隐式图的搜索问题(九宫重排) 实验任务 对九宫重排问题,建立图的启发式搜索求解方法. 用A*算法求 ...
最新文章
- Python多线程threading用法
- share_from_this
- 用python画花瓣-Python教程:使用Turtles画出带有花瓣的花
- Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组
- mysql主从复制 drbd_MySql主从复制简单案例实现
- range python命令_Python学习笔记(一)
- 一文入魂!聊透分布式系统一致性!
- Metasploit是一款开源的安全漏洞检测工具,
- hdu 1394 Minimum Inversion Number
- ASP.NET的gridview设置数据格式(DataFormatString={})与 String.Format()【转载】
- 用户使用什么命令访问远程计算机,远程桌面连接命令是什么 怎么使用命令连接远程服务器...
- 如何把直播嵌入微信公众账号
- 净资产收益率ROE连续3年超过15%的股票排名
- java使用ajax请求下载excel响应结果显示乱码
- 弘辽科技:拼多多批发单算销量吗?拼多多刚开店怎么有销量
- 轻量化网络结构——MobileNet
- 5G标准中文版核心网:5G的系统构架!
- linux网络编程:splice函数和tee( )函数高效的零拷贝
- java计算机毕业设计师资管理系统源码+系统+数据库+lw文档+mybatis+运行部署
- 安卓常用框架、模块、软件