1、1人工智能课程设计-五子棋姓 名: 徐 慧班 级:计 091(杏)学 号:0913023001指导老师:管致锦2一引言 .31.1 五子棋简介 .31.2 五子棋的 AI 构想 .3二.开发工具可行性分析 .5三需求分析 .6四程序设计 .64.1 程序设计特点 .64.2.程序总体设计 .7五代码分析 .85.1 初始化赋值系统 .85.2 初始化获胜组合 .95.3 重新设定玩家的获胜标志 .95.4 处理鼠标事件 .105.5 获胜检查算法 .125.6 电脑算法(1) .145.7 电脑算法(2) .17六心得体会 .20七参考文献 .203一引言人工智能也就是所谓的 AI(Artif
2、icial Intelligence),它是一门很抽象的技术,AI 程序的编写不需要依据任何既定的思考模式或者规则。尤其是游戏中的 AI可以完全依程序设计者本身的思考逻辑制作。我个人认为人工智能的核心应该是使计算机具有自动的处理事件的能力,而我们的所有的研究也应该围绕着这一方向。我们今天讨论的是策略类的人工智能。 策略类人工智能可以说是 AI 中比较复杂的一种,最常见的策略类 AI 游戏就是棋盘式游戏。在这类游戏中,通常的策略类 AI 程序都是使计算机判断目前状况下所有可走的棋与可能的获胜状况,并计算当前计算机可走棋步的获胜分数或者玩家可走棋步的获胜分数,然后再决定出一个最佳走法。下面我们先介
3、绍一下五子棋的 AI 构想。 1.1 五子棋简介下面就五子棋的背景和规则做一些简单的介绍。五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠” ,英译为 “Renju”,英文称之为“Gobang”或“FIR”(Five in a Row 的缩写) ,亦有“ 连五子 ”、 “五子连” 、 “串珠” 、 “五目”、 “五目碰” 、 “五格”等多种称谓。 五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的
4、棋文化源渊流长,具有东方的神秘和西方的直观;既有“场 ”的概念,亦有 “点”的连接。它是中西文化的交流点,是古今哲理的结晶。五子棋的规则如下:棋盘:采用同围棋盘一样的 15 路或 19 路线的棋盘,为了减小问题的规模,本系统将采用 15 路线的棋盘。下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子。无子的交叉点又被称为空点。输赢判断:黑、白双方有一方的 5 个棋子在横、竖或斜方向上连接成一线即为该方赢。41.2 五子棋的 AI 构想在由 AI 所控制的计算机玩家上是不成立的,因为计算机必须知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率。一个完整的五子棋的 A
5、I 构想必须:1、能够知道所有的获胜组合2、建立和使用获胜表3、设定获胜的分数4、使电脑具有攻击和防守的能力 (一),求五子棋的获胜组合 在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得获胜组合的总数。我们假定当前的棋盘为 10*10: 1、计算水平方向的获胜组合数,每一列的获胜组合是:6,共 10 列,所以水平方向的获胜组合数为:6*10=60 2、计算垂直方向的获胜组合总数,每一行的获胜组合是:6,共 10 行,则垂直方向的获胜组合数为:6*10=60 3、计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36 4、计算反对角
6、线方向的获胜组合总数,反对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36 这样所有的获胜组合数为:60+60+36+36=192 (二)、建立和使用获胜表 我们已经计算出了一个 10*10 的五子棋盘会有 192 种获胜方式,这样我们可以利用数组建立获胜表,获胜表的主要作用是:1、判断当前的获胜方式是否有效;2、判断当前的获胜方式中到底有多少子落入该获胜组合中。详细的使用您将在后面的程序中可以看出。 (三)、分数的设定 5在游戏中为了让计算机能够决定下一步最佳的走法,必须先计算出计算机下到棋盘上任一空格的分数,而其中最高分数便是计算机下一步的最佳走法。 原理:我们判定当前讨论的空格
7、与当前讨论的点有几种获胜的方式,有几种该空格就加几分。这种原理初听起来似乎是无法入手,没关系,当您了解我们后面的程序后您就会明白这种决策原理了。 这种决策有一些缺陷,因为如果只根据这个模型设计,就有可能出现电脑或玩家有三个子连成一线的时候,计算机却判断不出,它认为其他某些空格是当前的获胜的最佳位置而不去攻击或防守。没关系我们完全可以通过一个加强算法来改变当前的分值情况,也就是说当电脑或玩家有三个子或四个子连成一线时,我们通过加强算法将当前与三个子或四个子有关的空格的分值提高,从而可以弥补这一缺憾。 (四)、攻击与防守 以上的方式,事实上计算机只是计算出了最佳的攻击位置,为了防守我们还应计算当前
8、玩家的最佳的攻击位置。这样有什么用呢?道理很简单,如果玩家最佳攻击位置的分数大于计算机最佳攻击位置上的分数,那么计算机就将下一步的棋子摆在玩家的最佳攻击位上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。 事实上,这个 AI 构想是很强大的如果你不是很厉害的五子棋高手的话,可能很快会被计算机打败。我在联众上可是中级棋手啊,跟这种构想打的时候胜率也不是很高。二.开发工具可行性分析本程序采用 开发工具它是 Visual B 的简称。提到 ,就不能不先提一下 Visual Basic 是 Windows 环境下的一种简单、易学的编程语言,由于其开发程序的快速、高效,深受程序员
9、的喜爱。VB.NET 的特点:1、真正成为面向对象以及支持继承性的语言。2、窗体设计器支持可视化继承,并且包含了许多新的特性,比如自动改变窗体大小、资源本地化支持、数据类工具内在支持 XML 数据。63、直接建立在.NET 的框架结构上,因此开发人员可以充分利用所有.NET 平台特性,也可以与其他的.NET 语言交互。4、为 Windows 应用程序提供了 XCOPY 部署,开发者不再需要为 DLL 的版本问题担忧。 三需求分析人工智能的第一大成就是下棋程序,在下棋程度中应用的某些技术,如向前看几步,把困难的问题分解成一些较容易的子问题,发展成为搜索和问题归纳这样的人工智能基本技术。今天的计算
10、机程序已能够达到下各种方盘棋和国际象棋的锦标赛水平。但是,尚未解决包括人类棋手具有的但尚不能明确表达的能力。如国际象棋大师们洞察棋局的能力。另一个问题是涉及问题的原概念,在人工智能中叫问题表示的选择,人们常能找到某种思考问题的方法,从而使求解变易而解决该问题。到目前为止,人工智能程序已能知道如何考虑它们要解决的问题,即搜索解答空间,寻找较优解答。 在设计本系统时考虑到用户需要的是一个操作简便界面简单的游戏软件。同时要提供人机和人人这样的功能。特别是人机部分,要考虑到不同级别的用户。电脑智能不能太低需要有一定的智能下棋功能。人机对战:选择和电脑对弈的等级操作,同样也可以执行网络联机的悔棋等功能,
11、只是因为是人机所以无需通过确认。四程序设计游戏中提供两种选择模式:人机对战和人人对战。在人机对战中玩家通过选择不同的等级和电脑一决高下,可以向后悔棋。在人人对战中双方通过选择一方作为服务器,通过弹出对话框设置本地应用程序监听端口,而另外一方则作为客户端,通过连接服务器选项,在弹出的对话框中设置要连接的服务器的 IP地址和端口号。当双方都提示连接成功后,两方才可以进行下棋。如要悔棋则需要通过对方的同意。同时还可以实现在线聊天。AI 的不同等级是以不同的搜索深度确定的。4.1 程序设计特点7五子棋游戏程序由于规则简单操作简便等特点,自然就成为程序员对人工智能研究的首选对象。所以网络上关于这类的程序
12、很多,但是由于主要都是采用搜索穷举技术作为解决方案,这将使得问题的规模变的很庞大如当搜索深度为 3 时,每走一步电脑在将最坏的情况下需要搜索的点将达225*225*225=11390625 个。即使采用的剪枝技术,其某些点的响应的时间也是让人无法忍受的,如开局时,因为这个时候每个点都是空的,没有可以剪枝的点,必须遍历真个盘面,所以很耗时间,大约需要 30 多秒的时间,这个显然是不可接受的。为了程序设计和玩家的忍受时间的需要。不得不减小深度,所以绝大部分都采用深度为 2 的检索,很明显深度越低系统的智力也相对的降低,需要代价的。本程序的一个主要特点是,采用了高效的优化方法,使得在相同的搜索规模中
13、所花费的计算时间大幅度的减小。响应时间明显得到提高。即使搜索深度达到 4 的时候,其响应时间在绝大部分的情况下还是可以接受的。4.2.程序总体设计结构设计的一条基本原理就是程序应该模块化,也就是一个大程序应该由许多规模适中的模块按合理的层次结构组织而成。总体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。通常用层次图或结构图描绘软件的结构。1、系统模型选择操作调用单机模式系统功能用户 主界面82、结构图五代码分析这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要
14、的细节,程序员可以根据它们写出实际的程序代码。下面对该次设计中的主要代码进行做个分析:5.1 初始化赋值系统Sub initplayenvironment() player.FileName = “.musiczhyu01.mid“ player.Play() theplayflag = True /游戏有效 Label1.Visible = False /游戏状态标签不显示 PictureBox1.Refresh() /清空 picturebox1 的内容 yuandian(130, 130) /调用绘图函数绘制当前电脑先走的位置 Dim i, j, m, n As Integer For
15、i = 0 To 9 For j = 0 To 9 table(i, j) = 0 Next Next /桌面初始化 界面模块用户人机模块初级模块中级模块高级模块9For i = 0 To 191 pflag(i) = True cflag(i) = True Next /获胜标志初始化 table(4, 4) = 1 /由于我们设定电脑先手,并下了4,4 位所以将其值设为 1 5.2 初始化获胜组合 n = 0 For i = 0 To 9 For j = 0 To 5 For m = 0 To 4 pwin(j + m, i, n) = True cwin(j + m, i, n) = T
16、rue Next n = n + 1 Next Next For i = 0 To 9 For j = 0 To 5 For m = 0 To 4 pwin(i, j + m, n) = True cwin(i, j + m, n) = True Next n = n + 1 Next Next For i = 0 To 5 For j = 0 To 5 For m = 0 To 4 pwin(j + m, i + m, n) = True cwin(j + m, i + m, n) = True Next n = n + 1 Next Next 105.3 重新设定玩家的获胜标志由于电脑已下
17、了 4,4 位所以我们需要重新设定玩家的获胜标志 For i = 0 To 5 For j = 9 To 4 Step -1 For m = 0 To 4 pwin(j - m, i + m, n) = True cwin(j - m, i + m, n) = True Next n = n + 1 Next Next For i = 0 To 191 If pwin(4, 4, i) = True Then pflag(i) = False End If Next End Sub5.4 处理鼠标事件 1、模块名称: themousedown 2、描述:此函数主要实行以下功能: (1)判定当前游戏标志是否有效。 (2)将实际坐标转化成虚拟坐标。 (3)绘制玩家的棋子。 (4)执行检查获胜函数。 (5)执行电脑算法函数。 Sub themousedown(ByVal x As Integer, ByVal y As Integer) If theplayflag = False Then
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。