小时候大概四五年级的时跟着我姥爷学下象棋,到后来上高中的时候可以下过我姥爷了,感觉很得意,我姥爷说人老了,脑子不好使了…就象我现在写的这个软件一样,它是我写出来的,历时一个月,到现在我完全不是他的对手了,很多时候跟它下,都能知道它下一步走什么,感觉自己有很大的优势,可就是不管怎么努力都不能把优势转成胜势!最后一点一点的我的攻势被瓦解,然后输掉整盘棋!我绝对是个初学机器博弈的菜鸟,但我象棋水平还不算太业余,结果我输给了自己做的程序,我就在想,要是全人类中的顶尖高手会不会做出挑战全人类无敌的软件呢?很可怕,人的一切智慧的行为都是博弈的行为!说下初学机器搏弈的心得,有共同兴趣的同志可以一起探讨,我无尝提供我做的这个象棋的源代码,不过没我给你解释们很难看的懂,不是太难,而是太乱,哈哈!一个完整的程序要有:局面的表示,由于运算量巨大,要使用一维数组,二维的话运算时间几乎为平方倍!棋子的表示,建意使用整型类型,还是为了速度,我曾花了大概十几天的时间来加快运算速度,这是件蛋疼的事情!还有用一个二维数组来关联一个局面中红黑方棋子的位置,这在走法生成时将节约大量时间,我的程序中没有用到这个,我的程序目前只搜到六层,就是深度,七层的话大概每走一部运算40多秒,这是无法忍受的!再就是走法生成涵数,先找到一个本方棋子,根据棋子类型生成所有符合规则的走法。再就是搜索引擎,就是个基于历史启发的阿尔发贝塔搜索涵数,基本思想就是:把能走的都走一遍试试,然后就是让对方把能走的都走下,这样下去,从最底层的那一步往上倒推,再该程序走的那些走法里选对程序最有利的走,再该对方走的时候对方肯定会选对程序最不利的走发走,这样展开就会找到最好的走发,然后让程序走这个走发,举个例子:比如开局,程序用红子,有四十五种走发,从里面取一种走,然后让对方走他所有能走的中的一种,平均也是四十多种,这样程序走一步,对手走一步就会有大越四十乘四十种可能,这就是所谓的深度为二,深度为三就是当对手走一步之后再让程序走一步,这样深度为三大越就会有四十乘四十乘四十等于64000种可能,为四就是2560000种,指数增长的东西是可怕的,除了上帝谁都追不上,这就是为何我们做这类程序到处都会讲效率!回到原来的例子,最后就是让程序从这2560000种可能种选出最好的情况走,怎么选择?如何让程序知道哪种情况对自己有利?这就是局面评估涵数,好的评估涵数能避免搜索部分大量无畏的搜索从而节约时间,回头我们再说阿尔发贝塔怎么来加快搜索。我们知道过河的兵比不过河的兵贵重,当头兵比边兵贵重,在九宫中心的兵甚至比一个马还要贵重,这样每种棋子就会有一个与绝对位置相关的价值,称为子力价值,我的程序直接照搬了开源的象眼软件的子力价值表,当然还有很多因素决定一个局面的好坏,我没有做研究,我把这个任务交给了搜索引擎,我们回头说搜索,试想下,如果我们的搜索深度为八大概有几种可能?6553600000000种!这样个天文数字既使计算机素度很快了也要很长时间,我们假设一秒可以评价五十万种情况的好坏,要评价完这么多种情况大约需要207813年,那时候你都成化石了!那该怎么办?剪枝!这么多情况中有很多是不用评价好坏的,比如对方将军,我们就没必要考虑毫无关系的棋子该怎么走,由那几种毫无关系的走发延伸出来的所有走发都不用考虑,因为你选择他们的话对方就会吃掉你的将,你就挂了!就是说我们知道那些走发很不好就行了,没有必要知道到底有多坏!这就是阿尔发贝塔剪枝,我们没必要考虑那些已经足够坏的情况了。但是这有一个问题,如果我们已经考虑了所有情况才开始剪枝,那将是毫无意义的!因为我们已经花了大量时间去考虑所有情况了,但要是我们刚搜索没多久就可以剪枝了,那就会剪掉大量不用考虑的情况,节约大量时间!这就是说待搜索的情况的排序是关键,如何排序?根据什么排序?历史启发!有些比较好的走发的后续走发中往往会有更好的走发(对对手来说就是坏),我们就优先搜索他就会尽量早的剪枝,一个多次被搜索到并认为是好的走法我们就优先搜索他,这就是所谓的历史启发!总的来讲就这么多,但这还不行,还有许多细东西,这只是个框架,比如将军的时候你就得多往后想几步,看会不会将死,就是深度要在原来的基础上加一,这就是将军延伸,还有胡相吃子就是换子的时候也要延伸,这就是兑子延伸,再就是检测重复,有很多都是询环出现的,我们没必须都考虑,还有就是迭代加深实现时间控制!我考,感想都快写成教程了!有这方面兴趣的加我QQ377693703共同学习下哈

软件下载地址:http://files.cnblogs.com/lipf/%E4%B8%AD%E5%9B%BD%E8%B1%A1%E6%A3%8B.zip

转载于:https://www.cnblogs.com/lipf/archive/2012/02/18/2357100.html

中国象棋软件制作感想相关推荐

  1. 【C++课程设计】期末大作业 - 基于Qt开发的中国象棋软件

    1 题目 基于Qt的中国象棋软件开发 本博客只是简略的描述论文的大致结构.框架,以及软件开发的大致过程.有兴趣的参考原文档资料. 2总体设计与主要功能 2.1概述 中国象棋是起源于中国的一种棋,属于二 ...

  2. 中国象棋软件-引擎实现(七)测试程序

    之前我们已经讲了实现一个中国象棋软件的所有要素,本篇我们只是粗略地建一个工程再添加一点文件使得我们能看到程序的运行情况如何. 在界面完成之前,我先建了一个Win32控制台项目(学生朋友们对这个最熟悉也 ...

  3. 12年前的作品──《美绿中国象棋》制作过程及算法简介

    这个游戏是大学本科二年级时(1998年)修人工智能课程的功课 .这个游戏的「棋力」并不高,主要是因为没有花时间在调整的工作上.比较满意的部分是使用 OpenGL 做的使用者介面.本文将简单介绍制作本游 ...

  4. [转载] 中国象棋软件-引擎实现(一)概述

    2005年6月我系第二批科技小组的项目正式确定为实现一款中国象棋对弈软件.基本功能包括人机对战.网络对战.我负责开发人机对战的引擎部分,也就是让计算机下棋.经过了暑假整整两个月的学习与实践,我终于初步 ...

  5. [转载] 中国象棋软件-引擎实现(二)棋局表示

    对于棋盘的表示当前比较先进的思想是"位棋盘"."位棋盘"用于国际象棋非常便捷,因为国际象棋的棋盘正好有64个格子,可以将一个棋盘的信息用一个64位的变量来表示. ...

  6. 中国象棋软件-引擎实现(二)棋局表示

    对于棋盘的表示当前比较先进的思想是"位棋盘"."位棋盘"用于国际象棋非常便捷,因为国际象棋的棋盘正好有64个格子,可以将一个棋盘的信息用一个64位的变量来表示. ...

  7. 中国象棋软件-引擎实现(六)局面评估

    前面已经讲过了棋局表示.着法生成.搜索算法(包括搜索辅助), 在象棋程序中如果说搜索算法是心脏,那么局面评估就是大脑.搜索算法负责驱动整个程序,而局面评估则负责对搜索的内容进行判断评价.因而搜索与局面 ...

  8. 中国象棋软件-引擎实现(一)概述

    程序的基本框架: 从程序的结构上讲,大体上可以将本程序划分为四大部分: 棋局表示. 着法生成. 搜索算法. 局面评估 程序的大概的思想是: 首先使用一个数据结构来描述棋局信息,对某一特定的棋局信息由着 ...

  9. 中国象棋软件-引擎实现(三)着法生成

    我们的程序需要让电脑能够在轮到它走子的时候执行一个它认为对它最有利的着法,那前提就是它要有诸多(也可能是唯一)可供选择的着法,提供所有可选着法的"清单"就是我们的着法生成器所要完成 ...

  10. 中国象棋软件-引擎实现(四)搜索算法

    对于棋类软件的搜索算法经前人的努力已形成了较为成熟的Alpha-Beta搜索算法以及其它一些辅助增强算法.所以小生在自己的程序中直接借鉴了Alpha-Beta搜索算法并辅以了历史启发.对此两者王小春的 ...

最新文章

  1. git提交代码到github时出现everything up-to-date,但是代码没有上传成功
  2. 正则 不能有中文逗号_Python爬虫教程-19-数据提取-正则表达式(re)
  3. 贾斯帕马斯基林的故事笔记
  4. 数据库限制内存使用方法
  5. 详解Kafka与ActiveMQ的区别与联系!
  6. 友益文书类似软件_团队成员分享 | 港中文翻译学姐:硬件不够,软件来凑;心之所愿,无所不能...
  7. 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型
  8. mysql2008使用教程_sqlserver2008简单使用教程
  9. 主成份(PCA)与奇异值分解(SVD)的通俗解释
  10. 安卓java代码写控件_安卓自定义流程进度图控件实例代码
  11. 基于SourceTree 下的 Git Flow 模型
  12. XenApp简单部署
  13. maya界面字体大小修改方法
  14. windows下安装设置redis
  15. BIOS硬盘模式更改为AHCI模式,及更改后win10蓝屏的解决办法
  16. 爱心转发:宝贝,妈妈想死你了!你在哪里啊?(帮忙转一回吧)
  17. Java程序设计-书上重点总结
  18. 微信订阅号发送模板消息
  19. XAF 与 CIIP
  20. 【HAL库】HAL库STM32cubemx快速使用

热门文章

  1. 大型商超连锁企业5大核心业务、20+文件电子签场景
  2. [信道编码/Channel Coding】信道编码的整体框架
  3. 解决sqliteman创建失败的一种方法
  4. vmware tools的下载与安装
  5. 有哪些免费且比较好用的数据可视化工具?
  6. 魅族手机usb计算机连接文件夹,手机连接电脑传输文件(手机usb连接电脑只充电)...
  7. 2021年9月份最新数据库排行榜出炉
  8. ioncube linux,linux 下ionCube安装
  9. 超详细! 利用Synopsys VCS对Verilog代码加密的四种方法
  10. 一个开源的会议管理系统,适合初学者练手(老司机请忽略)