人工智能大作业报告-Read.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
人工智能大作业报告-Read

人工智能大作业报告 班级:F0003301 同组成员: 陶猗 5000339013 组长 梁永坚 5000339010 阿力甫 5000339135 高冲 5000339008 李轩 5000339011 Project1:黑白棋游戏 让电脑自动下黑白棋的程序。 一.运行平台:Win98或Win XP。 二.开发工具:Microsoft Visual C++6.0 三.运行方法:直接运行,如果慢那不是死机,请耐心等待 四.大体思路 1.评估函数     用的仍然是最容易的权值表。 5 -2 2 2 2 2 -2 5 -2 -2 1 1 1 1 -2 -2 2 1 1 1 1 1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 1 1 2 2 1 1 1 1 1 1 2 -2 -2 1 1 1 1 -2 -2 5 -2 2 2 2 2 -2 5    当然,作了一些动态改变: 1.一旦“角“被占,周围三个位置的权值变成+2. 2.终局搜索时只计算双方棋子数。 2.alpha—beta剪枝搜索   (1)基本算法与书上相同。求倒推值。    参数说明:A,B是当前结点祖先结点的alpha,beta值    Chtype取值+,-1 curFace是当前结点    depth是当前深度。当depth==m_cut_depth时直接返回静态评估值。 int COthelloDoc::GetValue(int depth, char* curFace, char chtype, int A,int B) (2).为了加大剪枝效果,用了类似叠代加深的方法 例如在搜索15层之前,先搜索6层,求得各个儿子的倒推值,按value*chtype的值排序。然后按序重新进行15层搜索。这样似乎能加大剪枝数。 (3).为了加深搜索深度,用了选择性搜索(MPC)。 例如在搜索15层之前,在搜索到第八层的时候,就对结点进行一次静态评估,若发现EvaluateValue*chtype的值小于一定的阀值(例如,6),直接返回静态评估值,不再继续往下。当然,前提是要有科学的评估函数,才不会丢弃看似恶手,实是好手的棋。 五.不足之处及其展望 1.棋力不足。有时连我都下不赢。与WZebra的2 move下,很少能取胜,到了WZebra的6 move以上,则总是惨败。究其原因是初期子太多,这往往是被“翻盘“的先兆。   2.网站上看到的一些新思路(/programming.htm) 杀手经验法则(Killer Heuristic) 逐层加深利用主要路径加速剪枝效果,如果把主要路径加以推广,就接近杀手经验法则的想法。所谓杀手,是指在某一个盘面当中,能够造成剪枝的一些较好的着手。如果能将这些杀手步存储起来,然后在同一深度的其他盘面优先搜索,往往也会造成剪枝的效果。事实证明,这种做法的剪枝效果相当好。一般国际象棋,通常在每一层存有2-5个杀手步。较强的黑白棋程序都用到了杀手经验法则。同形表(Transposition Table) 经常几种不同的下棋顺序导致同样的棋型。如虎开局,可以是f5-d6-c3-d3-c4 或 5-d6-c4-d3-c3,两种顺序导致了同样的棋型。这叫做转换。为避免搜索一个位置几次,程序在同形表中存储所有的(至少是大多数的)在搜索中计算过的位置。(通常用数据结构哈希表实现)。在黑白棋的中局阶段,它估计减少时间深度20-50% 。在终局,转换表更常见,所得也更高。 /MyGames/DownLoad/Setup-Plaza.exe 俄罗斯方块 /mygames/DownLoad/Setup-Tentrix.exe 四.大体思路 1.捕捉方块模块 (1).获得窗口句柄及其子窗口句柄。 (2).根据颜色判断方块 方块分七种颜色,对应七种类型。包括翻转共有19种状态。 识别的结果是:ntype=xx(类型0—6),nStatus=yy(状态),构造一个方块。 2.人工智能模块 (1).先对中游的方块特征进行编码, 以求最大程度的便于计算。 (2).牵涉到的数据结构是一个二维数组,记录当前Board。一个一维数组,记录当前每一列的最高点,一个方块对象(已识别),一个吊桶(用于基数排序)。 (3).算法类似于爬山法。但并不是死做。先对该方块,求出所有下降高度,和生成的“新”空洞。以“下降高度“和”新空洞“为关键字进行基数排序,要用到吊桶。排序结果返回在一个状态数组中。 然后有选择地计算最佳方案:从最低下降位置开始,逐个评估比当前方案空洞数少的方案,一旦发现“不错“的方案,马上返回。 具体地有:消行加分(消两行以上直接返回),新空洞扣分

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档