人工智能课程设计资料.docx
- 文档编号:11428096
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:9
- 大小:43.44KB
人工智能课程设计资料.docx
《人工智能课程设计资料.docx》由会员分享,可在线阅读,更多相关《人工智能课程设计资料.docx(9页珍藏版)》请在冰豆网上搜索。
人工智能课程设计资料
人工智能课程设计
精品文档
人工智能<五子棋>技术报告
简介
本课程设计是基于alpha-beta剪枝算法的五子棋的博弈游戏,具有悔棋,可选择禁手,支持人机对战,人人对战等功能。
整个设计基于Java语言开发,
界面美观大方。
alpha-beta剪枝技术的基本思想或算法是,边生成博弈树边计算评估各节点的倒推值,并且根据评估出的倒推值范围,及时停止扩展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而节约了机器开销,提高了搜索效率。
具体的剪枝方法如下:
(1)对于一个与节点MIN,若能估计出其倒推值的上确界β,并且这个β值不大于MIN的父节点(一定是或节点)的估计倒推值的下确界α,即α≥,β则就不必再扩展该MIN节点的其余子节点了(因为这些节点的估值对MIN父节点的倒推值已无任何影响了)。
这一过程称为α剪枝。
(2)对于一个或节点MAX,若能估计出其倒推值的下确界α,并且这个α值不小于MAX的父节点(一定是与节点)的估计倒推值的上确界β,即α≥,β则就不必再扩展该MAX节点的其余子节点了(因为这些节点的估值对MAX父节点的倒推值已无任何影响了)。
这一过程称为β剪枝。
1、数据结构定义
本文定义15*15的五子棋棋盘,实现算法,在算法中采用的数据结构包括:
intisChessOn[][]描述当前棋盘,0表示黑子,1表示白字,2表示无子;intpre[][]记录棋点的x,y坐标。
由于本课程设计是基于Java语言开发的,在Java中只能用类表示并实现所定义的数据结构。
所以下面将用类来描述相应的数据结构及算法:
publicclassChessPanel{
privateImageIconmap;//棋盘背景位图
privateImageIconblackchess;//黑子位图
privateImageIconwhitechess;//白子位图
publicintisChessOn[][];//棋局
protectedbooleanwin=false;//是否已经分出胜负
protectedintwin_bw;//胜利棋色
protectedintdeep=3,weight=7;//搜索的深度以及广度
publicintdrawn_num=110;//和棋步数
intchess_num=0;//总落子数目
publicint[][]pre=newint[drawn_num+1][2];//记录下棋点的x,y坐标最多(drawn_num+1)个
publicintsbw=0;//玩家棋色黑色0,白色1
publicintbw=0;//当前应该下的棋色0:
黑色(默认),1:
白色
protectedintx_max=15,x_min=0;//边界值,用于速度优化
收集于网络,如有侵权请联系管理员删除
精品文档
protectedinty_max=15,y_min=0;//边界值,用于速度优化
protectedbooleanable_flag=true;//是否选择禁手标志0:
无禁手1:
有禁手(默认
private
inth;
//棋子长
private
intw;
//棋子宽
private
intinsx;
//插入棋子的位置
private
intinsy;
private
PointmousePoint;
//鼠标当前位置
private
intwiner;
//获胜方
privatebooleanhumanhuman=false;
//是否是人人对弈
private
intplast=0;
//走了几步了,
public
intBLACK_ONE;
//0表黑子
public
intWHITE_ONE;
//1表白子
public
intNONE_ONE;
//2表无子
publicint
N;
//棋盘边长
//搜索当前搜索状态极大值//
//alpha祖先节点得到的当前最小最大值,用于alpha剪枝
//beta祖先节点得到的当前最大最小值,用于beta剪枝。
//step还要搜索的步数
//return当前搜索子树极大值
protectedintfindMax(intalpha,intbeta,intstep){
intmax=alpha;
if(step==0){
returnevaluate();
}
int[][]rt=getBests(1-sbw);
for(inti=0;i intx=rt[i][0]; inty=rt[i][1]; if(getType(x,y,1-sbw)==1)//电脑可取胜 return100*(getMark (1)+step*1000);isChessOn[x][y]=1-sbw; //预存当前边界值 inttemp1=x_min,temp2=x_max,temp3=y_min,temp4=y_max;resetMaxMin(x,y); intt=findMin(max,beta,step-1); isChessOn[x][y]=2; //还原预设边界值 x_min=temp1; x_max=temp2; y_min=temp3; y_max=temp4; if(t>max) max=t; //beta剪枝 if(max>=beta) returnmax; } returnmax; } //搜索当前搜索状态极小值// //alpha祖先节点得到的当前最小最大值,用于alpha剪枝 //beta祖先节点得到的当前最大最小值,用于beta剪枝 //step还要搜索的步数 收集于网络,如有侵权请联系管理员删除 精品文档 //return当前搜索子树极小值。 protectedintfindMin(intalpha,intbeta,intstep){ intmin=beta; if(step==0){returnevaluate(); } int[][]rt=getBests(sbw); for(inti=0;i intx=rt[i][0]; inty=rt[i][1]; inttype=getType(x,y,sbw); //玩家成5 if(type==1) return-100*(getMark (1)+step*1000); //预存当前边界值 inttemp1=x_min,temp2=x_max,temp3=y_min,temp4=y_max;isChessOn[x][y]=sbw; resetMaxMin(x,y); intt=findMax(alpha,min,step-1);isChessOn[x][y]=2; //还原预设边界值 x_min=temp1;x_max=temp2; y_min=temp3; y_max=temp4;if(t //alpha剪枝if(min<=alpha){ returnmin; } } returnmin; } //选取局部最优的几个落子点作为下一次扩展的节点// //bwf棋色0: 黑棋1: 白棋 //return选出来的节点坐标privateint[][]getBests(intbwf){ inti_min=(x_min==0? x_min: x_min-1); intj_min=(y_min==0? y_min: y_min-1); inti_max=(x_max==15? x_max: x_max+1); intj_max=(y_max==15? y_max: y_max+1); intn=0; inttype_1,type_2; int[][]rt=newint[(i_max-i_min)*(j_max-j_min)][3]; for(inti=i_min;i for(intj=j_min;j continue;rt[n][0]=i; 收集于网络,如有侵权请联系管理员删除 精品文档 rt[n][1]=j; rt[n][2]=getMark(type_1)+getMark(type_2);n++; } //对二维数组排序 Arrays.sort(rt,newArrComparator());intsize=weight>n? n: weight;int[][]bests=newint[size][3];System.arraycopy(rt,0,bests,0,size);returnbests; }} 3、程序执行结果 初始界面 收集于网络,如有侵权请联系管理员删除 精品文档 人机博弈 收集于网络,如有侵权请联系管理员删除 精品文档 收集于网络,如有侵权请联系管理员删除 精品文档 人人博弈 收集于网络,如有侵权请联系管理员删除 精品文档 禁手选择 收集于网络,如有侵权请联系管理员删除 精品文档 4、个人总结、看法 本程序是使用Alpha-Beta搜索的算法完成的一个简单的五子棋博弈游戏。 虽然Alpha-Beta已经尽力做到细致、全面,但由于Alpha-Beta搜索存在博弈树算法中普遍存在的一个缺点一随着搜索层数的增加,算法的效率大大下降。 所以该搜索的效率还是不怎么理想,五子棋程序的“智力”也不高。 因此可以在上述程序的基础上,针对五子棋本身的特点和规律对Alpha-Beta搜索算法进行优化与修正,比如用启发式搜索。 收集于网络,如有侵权请联系管理员删除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 课程设计 资料