人工智能作业的版本

发布 2022-09-15 05:42:28 阅读 6546

东北大学。

计算机1103班。龙巽震。

人工智能期中作业。

1.实验题目。

编写一字棋游戏。

2.实验要求

(1)利用极大极小算法及α-β剪枝策略,用你所熟悉的计算机语言,编程解决上述一字棋问题。

(2) open表中棋局排列次序:从左上到右下排列,即:(1,1)(1,2)(1,3)(2,1)(2,2)……3,2)(3,3)

(3) 根据深度k=4的程序运行结果,说明:

3.1 是否发生剪枝,发生几次α剪枝,几次β剪枝。

3.2 列出所搜索到的棋局状态(可以采用类似上图方式给出,也可以按搜索顺序依次列出各状态)

3.实验过程。

1.在进行α-β剪枝时,应注意以下几个问题:

(1)比较都是在极小节点和极大节点间进行的,极大节点和极大节点的比较,或者极小节点和极小节点间的比较是无意义的。

(2)在比较时注意是与"先辈层"节点比较,不只是与父辈节点比较。当然,这里的"先辈层"节点,指的是那些已经有了值的节点。

(3)当只有一个节点的"固定"以后,其值才能够向其父节点传递。

(4)α-剪枝方法搜索得到的最佳走步与极小极大方法得到的结果是一致的,α-剪枝并没有因为提高效率,而降低得到最佳走步的可能性。

(5)在实际搜索时,并不是先生成指定深度的搜索图,再在搜索图上进行剪枝。如果这样,就失去了α-β剪枝方法的意义。在实际程序实现时,首先规定一个搜索深度,然后按照类似于深度优先搜索的方式,生成节点。

在节点的生成过程中,如果在某一个节点处发生了剪枝,则该节点其余未生成的节点就不再生成了。

2.利用α-β搜索过程的一字棋的实例(借鉴网上的图)

3.实验**:

基于α-β剪枝的一字棋源**如下:

#include

using namespace std;

int num=0

int p,q

int tmpqp[3][3];

int cur[3][3];

const int depth=3;

void init()

for(int i=0;i<3;i++)

for(int j=0;j<3;j++)

void printqp()

for(int i=0;i<3;i++)

void userinput()/

int pos,x,y;

l1: cout<<"请输入你要下得位置,比如说11,就是指第一行第一个 ";

cin>>pos;

x=pos/10,y=pos%10;

if(x>0&&x<4&&y>0&&y<4&&cur[x-1][y-1]==0)

elseint checkwin()

if(cur[i][0]==1&&cur[i][1]==1&&cur[i][2]==1)

if(cur[i][0]==1&&cur[i][1]==1&&cur[i][2]==1)

for(i=0;i<3;i++)

if(cur[0][i]==1&&cur[1][i]==1&&cur[2][i]==1)

if((cur[0][0]==1&&cur[1][1]==1&&cur[2][2]==1)||cur[2][0]==1&&cur[1][1]==1&&cur[0][2]==1))

if((cur[0][0]==1&&cur[1][1]==1&&cur[2][2]==1)||cur[2][0]==1&&cur[1][1]==1&&cur[0][2]==1))

return 0;

int value()

p=0;q=0;for(int i=0;i<3;i

for(int j=0;j<3;j++)else

for(i=0;i<3;i

for(i=0;i<3;i

p+=(tmpqp[0][0]+tmpqp[1][1]+tmpqp[2][2])/3;

p+=(tmpqp[2][0]+tmpqp[1][1]+tmpqp[0][2])/3;

for(i=0;i<3;i

elsetmpqp[i][j]=cur[i][j];}

for(i=0;i<3;i

for(i=0;i<3;i++)

q+=(tmpqp[0][0]+tmpqp[1][1]+tmpqp[2][2])/3;

q+=(tmpqp[2][0]+tmpqp[1][1]+tmpqp[0][2])/3;

return p+q

int cut(int &val,int dep,bool max)

maxif(dep==depth||dep+num==9)

return value();

int i,j,flag,temp

bool out=false

if(checkwin()=1

if(max)

for(i=0;i<3 &&out;i++)

elseif(flag<=val)

out=true;}

elsecur[i][j]=1;

if(checkwin()=1)

temp=10000; }

elseif(temp>flag)

flag=temp;}

if(flag>=val)

out=true;}

cur[i][j]=0;

if(max)

if(flag>val)

val=flag;}

else

return flag;

int main()

int m=-10000,val=-10000,dep=1;

int x_pos,y_pos

init();

cout<<"棋盘 "

char isfirst;

cout<<"你要先下输入y,否则输入n";

cin>>isfirst;

while(isfirst!='y'&&isfirst!='n')

if(isfirst=='n')

cur[x_pos][y_pos]=1;

人工智能作业

人工智能 由自然探索于创新课程所想。管理学院李先同 201200272120 人工智能是一个大家看似并不陌生的字眼,我们平时所用的手机,电影中的科幻元素无不充斥着人工智能。由此人工智能变成为了一个人人都知道,却又都不甚了解的事物。通过这学期自然探索与创新课程的学习,我了解到了人工智能的发展简史,更对...

人工智能作业

2014 人工智能 作业 1 提交时间10 21 1 食草动物与食肉动物问题。3只食草动物与3只食肉动物在河一边,并有一条船。船能坐一至两只动物。船不能空载。目标是,把每只动物送到河对岸,并且留在某岸边或者船上的食肉动物数不能多于食草动物数。请将此问题转换成一个搜索问题 a.定义一个状态表示。b.给...

人工智能作业

1.何谓估价函数,在估价函数中,g n 和h n 各起什么作用?解 估价函数的任务是估计待搜索节点的重要程度,给它们排定次序。g n 是起始点到达n的实际路径代价,h n 就是n到目标点最短路径的启发函数。2.设有如下结构的移动将牌游戏 其中,b表示黑色将牌,w表是白色将牌,e表示空格。游戏的规定走...