- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)