人工智能课程设计资料.docx

上传人:b****7 文档编号:11428096 上传时间:2023-03-01 格式:DOCX 页数:9 大小:43.44KB
下载 相关 举报
人工智能课程设计资料.docx_第1页
第1页 / 共9页
人工智能课程设计资料.docx_第2页
第2页 / 共9页
人工智能课程设计资料.docx_第3页
第3页 / 共9页
人工智能课程设计资料.docx_第4页
第4页 / 共9页
人工智能课程设计资料.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

人工智能课程设计资料.docx

《人工智能课程设计资料.docx》由会员分享,可在线阅读,更多相关《人工智能课程设计资料.docx(9页珍藏版)》请在冰豆网上搜索。

人工智能课程设计资料.docx

人工智能课程设计资料

人工智能课程设计

精品文档

人工智能<五子棋>技术报告

简介

本课程设计是基于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搜索算法进行优化与修正,比如用启发式搜索。

收集于网络,如有侵权请联系管理员删除

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1