人工智能课程设计报告样本.docx
《人工智能课程设计报告样本.docx》由会员分享,可在线阅读,更多相关《人工智能课程设计报告样本.docx(21页珍藏版)》请在冰豆网上搜索。
![人工智能课程设计报告样本.docx](https://file1.bdocx.com/fileroot1/2022-10/13/7569d3e0-072e-4c35-a713-ac5228f6c30e/7569d3e0-072e-4c35-a713-ac5228f6c30e1.gif)
人工智能课程设计报告样本
课程:
人工智能课程设计汇报
班级:
姓名:
学号:
指导老师:
赵曼
11月
人工智能课程设计汇报
课程背景
人工智能(ArtificialIntelligence),英文缩写为AI。
它是研究、开发用于模拟、延伸和扩展人智能理论、方法、技术及应用系统一门新技术科学。
人工智能是计算机科学一个分支,它企图了解智能实质,并生产出一个新能以人类智能相同方法做出反应智能机器,该领域研究包含机器人、语言识别、图像识别、自然语言处理和教授系统等。
人工智能从诞生以来,理论和技术日益成熟,应用领域也不停扩大,能够设想,未来人工智能带来科技产品,将会是人类智慧“容器”。
人工智能是对人意识、思维信息过程模拟。
人工智能不是人智能,但能像人那样思索、也可能超出人智能。
人工智能是一门极富挑战性科学,从事这项工作人必需知道计算机知识,心理学和哲学。
人工智能是包含十分广泛科学,它由不一样领域组成,如机器学习,计算机视觉等等,总说来,人工智能研究一个关键目标是使机器能够胜任部分通常需要人类智能才能完成复杂工作。
但不一样时代、不一样人对这种“复杂工作”了解是不一样。
人工智能是计算机学科一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。
也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。
这是因为近三十年来它取得了快速发展,在很多学科领域全部取得了广泛应用,并取得了丰硕结果,人工智能已逐步成为一个独立分支,不管在理论和实践上全部已自成一个系统。
人工智能是研究使计算机来模拟人一些思维过程和智能行为(如学习、推理、思索、计划等)学科,关键包含计算机实现智能原理、制造类似于人脑智能计算机,使计算机能实现更高层次应用。
人工智能将包含到计算机科学、心理学、哲学和语言学等学科。
能够说几乎是自然科学和社会科学全部学科,其范围已远远超出了计算机科学范围,人工智能和思维科学关系是实践和理论关系,人工智能是处于思维科学技术应用层次,是它一个应用分支。
从思维见解看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能突破性发展,数学常被认为是多个学科基础科学,数学也进入语言、思维领域,人工智能学科也必需借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将相互促进而愈加快地发展。
题目二:
n皇后问题
一.问题描述
分别用回溯法(递归)、GA算法和CSP最小冲突法求解n皇后问题。
即怎样能够在n×n国际象棋棋盘上放置n个皇后,使得任何一个皇后全部无法直接吃掉其它皇后?
为了达成此目标,任两个皇后全部不能处于同一条横行、纵行或斜线上。
要求:
ⅰ.输入n,并用运行时间比较多个算法在相同规模问题时求解效率,并列表给出结果。
ⅱ.比较同一算法在n不相同时运行时间,分析算法时间复杂性,并列表给出结果。
如八皇后问题一个解
二.设计分析
1.算法分析
1)回溯法(递归)
回溯法解题通常步骤编辑
(1)针对所给问题,定义问题解空间;
(2)确定易于搜索解空间结构;
(3)以深度优先方法搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
引入一个整型一维数组col[]来存放最终止果,col[i]就表示在棋盘第i列、col[i]行有一个皇后,为了使程序再找完了全部解后回到最初位置,设定col[0]初值为0,即当回溯到第0列时,说明以求得全部解,结束程序运行。
为了方便算法实现,引入三个整型数组来表示目前列在三个方向上状态:
a[]a[i]=0表示第i行上还没有皇后;
b[]b[i]=0表示第i列反斜线/上没有皇后;
c[]c[i]=0表示第i列正斜线\上没有皇后。
棋盘中同一反斜线/上方格行号和列号相同;同一正斜线\上方格行号和列号之差均相同,这就是判定斜线依据。
初始时,全部行和斜线上全部没有皇后,从第1列第1行配置第一个皇后开始,在第m列,col[m]行放置了一个合理皇后,准备考察第m+1列时,在数组a[],b[]和c[]中为第m列,col[m]行位置设定有皇后标志;当从第m列回溯到m-1列时,并准备调整第m-1列皇后配置时,清除在数组a[],b[]和c[]对应位置值全部为1来确定。
2)遗传算法
遗传算法基础运算过程以下:
a)初始化:
设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。
b)个体评价:
计算群体P(t)中各个个体适应度。
遗传算法
遗传算法
c)选择运算:
将选择算子作用于群体。
选择目标是把优化个体直接遗传到下一代或经过配对交叉产生新个体再遗传到下一代。
选择操作是建立在群体中个体适应度评定基础上。
d)交叉运算:
将交叉算子作用于群体。
遗传算法中起关键作用就是交叉算子。
e)变异运算:
将变异算子作用于群体。
即是对群体中个体串一些基因座上基因值作变动。
群体P(t)经过选择、交叉、变异运算以后得到下一代群体P(t+1)。
f)终止条件判定:
若t=T,则以进化过程中所得到含有最大适应度个体作为最优解输出,终止计算。
3)csp最小冲突法
(1)初始化N个皇后一个放置,许可有冲突
(2)考虑某一行某个皇后,她可能和x个皇后冲突,然后看看将这个皇后移动到这一行哪个空位能使得和其冲突皇后个数最少,就移动到那里。
(也能够考虑列,是等价)
(3)不停实施
(2),直到没有冲突为止
2.数据结构
使用数组结构存放相关数据
一维数组:
二维数组:
3.算法设计
1)//回溯搜索
voidFunction1:
:
DFS(intt,boolisShowTime)
{
if(t==n)//说明已经排了n行了(从0开始),即排列结束了
{
for(inti=0;i{
rec[i]=board[i];
}
if(!
isShowTime)PrintChessBoard();//输出棋局
count++;
return;
}
for(inti=0;i{
//有冲突
if(ver[i]==1||ru[i-t+n]==1||rd[i+t]==1)continue;
//没有冲突
ver[i]=1;
ru[i-t+n]=1;
rd[i+t]=1;
board[t]=i;
DFS(t+1,isShowTime);//深搜递归
//后退处理
rd[i+t]=0;
ru[i-t+n]=0;
ver[i]=0;
}
return;
}
2)遗传算法
voidCGAQueen:
:
PrintChessBoard(boolPrintChessBoard)
{
boolDisplayAllAnsures=PrintChessBoard;//是否输出全部棋盘结果
intg=0,num=0;
InitialPopulation();
while(g==0&&numIteration)
{
num++;
g=0;
for(intk=0;kPopulation;k++)
{
this->FillArea(k);
this->CostMatrix[k]=this->CostFunc(k);
}
this->PopulationSort();
if(this->CostMatrix[0]==0)//已经完成计算
g=1;
if(DisplayAllAnsures)
{
PrintTheBestAnsure();
/*for(i=0;i<=ChessBoradLenght-1;i++)
{
cout<<"row:
"<
"<ChromosomeMatrix[i][0]<}
cout<}
this->GenerateCrossOverMatrix();
this->Mating();
this->ApplyMutation();
}
cout<<"实际迭代:
"<if(DisplayAllAnsures)
{
cout<<"最好答案为:
"<this->PrintTheBestAnsure();
}
}
3)CSP最小冲突算法
//用最小冲突算法调整第row行皇后位置(初始化时每行全部有一个皇后,调整后仍然在第row行)
//调整过后check一下看看是否已经没有冲突,假如没有冲突(达成终止状态),返回true
boolCSP_Queens:
:
Adjust_row(introw)
{
intcur_col=R[row];
intoptimal_col=cur_col;//最好列号,设置为目前列,然后更新
//计算总冲突数
intmin_conflict=col[optimal_col]+pdiag[GetP(row,optimal_col)]-1
+cdiag[GetC(row,optimal_col)]-1;//对角线冲突数为目前对角线皇后数减一,三次重合了
//逐一检验第row行每个位置,看看是否存在冲突数更小位置
for(inti=0;i{
if(i==cur_col)continue;
intconflict=col[i]+pdiag[GetP(row,i)]+cdiag[GetC(row,i)];
if(conflict{
min_conflict=conflict;
optimal_col=i;
}
}
//假如最好列位置改变,则皇后移向新最小冲突位置,要更新col,pdiag,cdiag,
if(optimal_col!
=cur_col)
{
col[cur_col]--;
pdiag[GetP(row,cur_col)]--;
cdiag[GetC(row,cur_col)]--;
col[optimal_col]++;
pdiag[GetP(row,optimal_col)]++;
cdiag[GetC(row,optimal_col)]++;
R[row]=optimal_col;
if(col[cur_col]==1&&col[optimal_col]==1
&&pdiag[GetP(row,optimal_col)]==1&&cdiag[GetC(row,optimal_col)]==1){
returnQualify();//qualify相对更耗时,所以只在满足上面基础条件后才检验
}
}
//不然目前点就是最好点,一切全部保持不变
returnfalse;//假如全部没变话,肯定不满足终止条件,不然上一次就应该返回true并终止了
}
//检验冲突