华工人工智能平时作业所有实验代码
- 格式:doc
- 大小:64.50 KB
- 文档页数:14
人工智能作业八数码问题一、题目八数码问题:初始状态图:目标状态图:二、算符与状态空间算符:左、上、右、下状态空间:状态:A=(X0,X1,X2,X3,X4,X5,X6,X7,X8) 初始状态:S0=(0,4,1,5,2,8,3,6,7);目标状态:Sg=(0,1,7,5,2,8,3,6,4)。
三、搜索树22求解:四、Open 表,Closed 表Open 表: Closed 表:五、程序代码/* 3_13.pro eight puzzle */traceDOMAINSstate=st(in,in,in,in,in,in,in,in,in)in=integerDATABASE-mydatabaseopen(state,integer)closed(integer,state,integer)res(state)mark(state)fail_PREDICATESsolvesearch(state,state)resultsearchingstep4(integer,state)step56(integer,state)equal(state,state)repeatresulting(integer)rule(state,state)GOALsolve.CLAUSESsolve:-search(st(0,4,1,5,2,8,3,6,7),st(0,1,7,5,2,8,3,6,4)),result. search(Begin,End):-retractall(_,mydatabase),assert(closed(0,Begin,0)),assert(open(Begin,0)),assert(mark(End)),repeat,searching,!.result:-not(fail_),retract(closed(0,_,0)),closed(M,_,_),resulting(M), !.result:-beep,write("sorry don't find a road!").searching:-open(State,Pointer),retract(open(State,Pointer)),closed(No,_,_),No2=No+1,asserta(closed(No2,State,Pointer)),!,step4(No2,State).searching:-assert(fail_).step4(_,State):-mark(End),equal(State,End).step4(No,State):-step56(No,State),!,fail.step56(No,StateX):-rule(StateX,StateY),not(open(StateY,_)),not(closed(_,StateY,_)),assertz(open(StateY,No)),fail.step56(_,_):-!.equal(X,X).repeat.repeat:-repeat.resulting(N):-closed(N,X,M),asserta(res(X)),resulting(M).resulting(_):-res(X),write(X),nl,fail.resulting(_):-!.rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8),st(X8,X1,X2,X3,X4,X5,X6,X7,X0)):-X0=0.rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8),st(X2,X1,X0,X3,X4,X5,X6,X7,X8)):-X0=0.rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8),st(X4,X1,X2,X3,X0,X5,X6,X7,X8)):-X0=0.rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8),st(X6,X1,X2,X3,X4,X5,X0,X7,X8)):-X0=0.rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8),st(X0,X2,X1,X3,X4,X5,X6,X7,X8)):-X1=0.st(X0,X2,X8,X3,X4,X5,X6,X7,X1)):-X1=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X2,X1,X3,X4,X5,X6,X7,X8)):-X2=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X3,X2,X4,X5,X6,X7,X8)):-X2=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X2,X1,X0,X3,X4,X5,X6,X7,X8)):-X2=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X3,X2,X4,X5,X6,X7,X8)):-X3=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X4,X3,X5,X6,X7,X8)):-X3=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X4,X1,X2,X3,X0,X5,X6,X7,X8)):-X4=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X4,X3,X5,X6,X7,X8)):-X4=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X3,X5,X4,X6,X7,X8)):-X4=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X3,X4,X6,X5,X7,X8)):-X5=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X3,X5,X4,X6,X7,X8)):-X5=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X3,X4,X5,X7,X6,X8)):-X6=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X6,X1,X2,X3,X4,X5,X0,X7,X8)):-X6=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X3,X4,X6,X5,X7,X8)):-X6=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8),rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X3,X4,X5,X7,X6,X8)):-X7=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X8,X2,X3,X4,X5,X6,X7,X1)):-X8=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X8,X1,X2,X3,X4,X5,X6,X7,X0)):-X8=0. rule(st(X0,X1,X2,X3,X4,X5,X6,X7,X8), st(X0,X1,X2,X3,X4,X5,X6,X8,X7)):-X8=0.六、运行结果截图编译后:运行后:。
人工智能基础大作业—---八数码难题学院:数学与计算机科学学院班级:计科14—1姓名:王佳乐学号:122016、12、20一、实验名称八数码难题得启发式搜索二、实验目得八数码问题:在3×3得方格棋盘上,摆放着1到8这八个数码,有1个方格就是空得,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移与空格下移这四个操作使得棋盘从初始状态到目标状态.要求:1、熟悉人工智能系统中得问题求解过程;2、熟悉状态空间得启发式搜索算法得应用;3、熟悉对八数码问题得建模、求解及编程语言得应用。
三、实验设备及软件环境1.实验编程工具:VC++ 6、02.实验环境:Windows7 64位四、实验方法:启发式搜索1、算法描述1.将S放入open表,计算估价函数f(s)2.判断open表就是否为空,若为空则搜索失败,否则,将open表中得第一个元素加入close表并对其进行扩展(每次扩展后加入open表中得元素按照代价得大小从小到大排序,找到代价最小得节点进行扩展)注:代价得计算公式f(n)=d(n)+w(n)、其中f(n)为总代价,d(n)为节点得度,w(n)用来计算节点中错放棋子得个数.判断i就是否为目标节点,就是则成功,否则拓展i,计算后续节点f(j),利用f(j)对open表重新排序2、算法流程图:3、程序源代码:#include<stdio、h># include<string、h># include<malloc、h># include〈stdlib、h>typedef struct node{ﻩint i,cost,degree,exp,father;ﻩint a[3][3];ﻩstruct node *bef,*late;struct node *son;}treenode;int flag=0,count=1,num=0,i=0;void set(treenode*s);void cpynode(treenode *s1,treenode *s2);void add1(treenode *s,treenode*open);void adjust1(treenode *close);void jscost(treenode *s);voidtiaozheng(treenode *open);void sortopen(treenode *open);int test(treenode *s1,treenode*s2);void position(treenode *s,treenode *open,treenode *close,treenode *s1);void printstr(treenode *open);intsearch(treenode *s1,treenode *s2);void input(treenode *s);int cmpnode(treenode*s1,treenode *s2);void print(treenode *s);void add(treenode*s,treenode *close);void xuhao(treenode*s);void extend(treenode *r1,treenode*s,treenod e *s1,treenode *open,treenode*close);void main() {treenode*s0,*s1,*s;ﻩtreenode *open,*close,*opend,*closed;open=(treenode*)malloc(sizeof(treenode));close=(treenode*)malloc(sizeof(treenod e));open->late=NULL;ﻩclose->late=NULL;ﻩopend=open;ﻩclosed=close;ﻩs0=(treenode*)malloc(sizeof(treenode));set (s0);ﻩs1=(treenode*)malloc(sizeof(treenode));set(s1);printf("请输入八数码得初始状态:(以空格为分隔)\n”);input (s0);printf("请输入八数码得目标状态:(以空格为分隔)\n”);input(s1);xuhao(s0);ﻩadd (s0,opend);ﻩwhile(open—>late!=NULL&& flag==0){ﻩs=(treenode*)malloc(sizeof(treenode));ﻩcpynode(s,open-〉late);ﻩopen=open—〉late;ﻩadd(s,close);ﻩif(test(s,s1)==0){ﻩﻩflag=1;ﻩ}else{position(s,open,close,s1);ﻩsortopen(open); };};ﻩif(open-〉late!=NULL) {ﻩﻩprintf("搜索过程如下:\n ");ﻩadjust1(close);ﻩﻩprintstr(close);printf("\n%d 步,%d个节点\n",num,count);}ﻩelse {ﻩﻩprintf("查找错误 ! \n");}; }void set(treenode *s) {s—〉i=i;s—>father=0;ﻩs->degree=0;s—〉bef=NULL;s->son=NULL;ﻩs-〉late=NULL; };void input(treenode *s) {ﻩfor(j=0;j〈3;j++)ﻩﻩfor(k=0;k<3;k++)ﻩﻩscanf("%d",&s—>a[j][k]); };int cmpnode(treenode *s1,treenode *s2){ﻩint j,k;for(j=0;j<3;j++)ﻩfor(k=0;k〈3;k++) {ﻩﻩif(s1—〉a[j][k]!=s2—>a[j][k])ﻩﻩreturn 0; };ﻩreturn1; }inttest(treenode *s1,treenode *s2) {int j,k,n=0;for(j=0;j<3;j++)ﻩﻩfor(k=0;k〈3;k++) {ﻩif(s1-〉a[j][k]!=s2-〉a[j][k])ﻩﻩﻩn++; };s1-〉exp=n;return n; };void xuhao(treenode *s){ﻩi++;s—〉i=i;}void cpynode(treenode *s1,treenode*s2) { ﻩint j,k;ﻩfor(j=0;j<3;j++)ﻩfor(k=0;k<3;k++)ﻩﻩs1—〉a[j][k]=s2->a[j][k];s1—〉bef=s2—>bef;s1-〉cost=s2-〉cost;s1-〉exp=s2->exp;ﻩs1—〉degree=s2->degree;ﻩs1—>i=s2—>i;s1->father=s2—>father; };void print(treenode *s){ﻩfor(j=0;j<3;j++) {ﻩfor(k=0;k<3;k++){ﻩﻩprintf(”%2d",s->a[j][k]); }ﻩﻩif(j==1) printf(" n=%2d d=%2df=%2d”,s—>i,s-〉degree,s-〉father);printf("\n"); }ﻩprintf("\n"); }void position(treenode *s,treenode *open,treenode *close,treenode *s1) {ﻩint m,n,t,k;treenode *r1;ﻩfor(m=0;m<3;m++) {ﻩfor(n=0;n〈3;n++){ﻩﻩk=s—〉a[m][n];ﻩﻩif(k==0)ﻩﻩﻩbreak; };ﻩif(k==0) break; }ﻩif(m+1<=2&&flag==0)ﻩ{ﻩr1=(treenode*)malloc(sizeof(treenode)); ﻩcpynode(r1,s);ﻩﻩt=r1->a[m+1][n];r1—〉a[m+1][n] = r1->a[m][n];r1—>a[m][n]=t;ﻩextend(r1,s,s1,open,close); };if(m-1>=0&&flag==0)ﻩ{ﻩr1=(treenode*)malloc(sizeof(treenode)); ﻩcpynode(r1,s);ﻩt=r1—>a[m—1][n];ﻩ r1—>a[m-1][n]=r1->a[m][n];r1->a[m][n]=t;extend(r1,s,s1,open,close); };ﻩif(n-1〉=0 && flag==0){ﻩﻩr1=(treenode*)malloc(sizeof(treenode));ﻩcpynode(r1,s);ﻩt=r1->a[m][n-1];ﻩ r1—>a[m][n-1]=r1—>a[m][n];ﻩ r1-〉a[m][n]=t;ﻩﻩextend(r1,s,s1,open,close);};ﻩif(n+1〈=2 &&flag==0){ﻩr1=(treenode*)malloc(sizeof(treenode));cpynode(r1,s);ﻩﻩt=r1->a[m][n+1];r1-〉a[m][n+1]=r1->a[m][n];r1->a[m][n]=t;ﻩextend(r1,s,s1,open,close);}; }void printstr(treenode *s) {ﻩtreenode *t;ﻩt=s-〉late;ﻩwhile(t!=NULL){ﻩnum++;print(t);ﻩﻩt=t->son; };}void extend(treenode *r1,treenode *s,treenode *s1,treenode*open,treenode *close) {ﻩr1—〉father=s—>i;r1->degree=s—>degree+1;ﻩﻩif(test(r1,s1)!=0) {ﻩﻩjscost(r1);if(search(r1,close)==1 &&search(r1,open)==1) {ﻩxuhao(r1);ﻩadd1(r1,open);ﻩr1—〉bef=s;ﻩﻩﻩcount++; }ﻩelse free(r1);}else {ﻩxuhao(r1);ﻩﻩﻩjscost(r1);ﻩcount++;ﻩﻩadd(r1,close);ﻩﻩr1—〉bef=s;flag=1;}}intsearch(treenode*s1,treenode *close){ ﻩtreenode *r,*t;ﻩr=s1;t=close->late;ﻩwhile(t!=NULL) {ﻩﻩif(r—〉exp==t—〉exp) {ﻩif(cmpnode(r,t)==1)ﻩreturn0;};ﻩﻩt=t—>late;};return 1; }voidadd(treenode *s,treenode *close) {ﻩtreenode *r,*t;ﻩt=s;r=close;ﻩwhile(r—>late!=NULL)ﻩr=r—>late;r->late=t;t—〉late=NULL;}void add1(treenode *s,treenode *open){ﻩtreenode *t;ﻩt=open;s->late=t->late;ﻩt-〉late=s;}void adjust1(treenode *close) {treenode *s,*t;ﻩs=close;s—>late->bef=NULL;ﻩwhile(s—〉late!=NULL)s=s—〉late;s->son=NULL;while(s->bef!=NULL) {ﻩﻩt=s->bef;t-〉son=s;s=s->bef;}; }void jscost(treenode *s) {s->cost=(s-〉exp)+s-〉degree;}void sortopen(treenode *open){ﻩtreenode *t,*s,*r;ﻩintk;r=(treenode*)malloc(sizeof(treenode));t=open-〉late;ﻩwhile(t!=NULL && t—>late!=NULL){ﻩﻩs=t->late;ﻩﻩk=t->cost;ﻩﻩﻩwhile(s!=NULL){if(k > s—>cost) {ﻩﻩk=s—>cost;ﻩcpynode(r,t);ﻩﻩcpynode(t,s);ﻩﻩcpynode(s,r);}s=s->late; }ﻩﻩﻩt=t->late; }; }五、实验结果:1、程序截图2、搜索过程请输入八数码得初始状态:(以空格为分隔)ﻫ28 31 0 47 65请输入八数码得目标状态:(以空格为分隔)1 2 38 0 47 65ﻫ搜索过程如下:ﻫ 2 83ﻫ14n= 1 d= 0 f7ﻫ56=0ﻫ2 0 3ﻫ 1 8 4n=3d= 1 f=17 6 5ﻫ0 2 31 8 4 n= 8 d= 2f=37 657561 2 3ﻫ08 4 n=10 d= 3 f= 8ﻫ12 3804n=12d= 4 f=10765ﻫﻫ5 步,12 个节点ﻫPress any key to continue六、实验分析:在进行搜索得过程中,同时记录了扩展新节点得个数。
验二数码转码编程及程序调试lengjj9141.将ASCII码表示的十进制数转换为二进制数。
STACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSASSUME CS:CODE,SS:STACKCODE SEGMENTORG 2000HSTART:MOV CX,4HMOV BX,0AHXOR AH,AHMOV SI,3500HMOV DI,3510HMOV AL,BYTE PTR[SI]SUB AL,30HAGAIN:MUL BXINC SISUB BYTE PTR[SI],30HCLCADD AL,BYTE PTR[SI]ADC AH,0LOOP AGAINEXIT: MOV [DI],AXMOV AX,4C00HINT 21HCODE ENDSEND START2.将从键盘输入的五位十进制数的ASCII码存在3500起始的内存单元中。
把它转换成BCD码后,再按位分别存入350A起始的内存单元内。
若输入的不是十进制的ASCII码,则显示FF.STACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKORG 2000HSTART:MOV SI,3500HMOV DI,350AHMOV CX,0005HAGAIN: MOV DL,0FFHMOV AL,BYTE PTR[SI]CMP AL,39HJA ERRORCMP AL,30HJB ERRORMOV BL,30HSUB AL,BLMOV [DI],ALJMP EXITERROR: MOV [DI],DLEXIT: INC SIINC DILOOP AGAINMOV AX,4C00HINT 21HCODE ENDSEND START3. 将十六位二进制数转换为ASCII码表示的十进制数。
电工实习关于智能小车组装与操控的论文第五组:一.硬件部分1.硬件组装(1)小组成员对硬件的组装都有自己的意见和建议,以及自己的思想,在短暂的电工实习课程中不可能让自己的思维与想法完全付诸于智能车(形成现实),所以在这一部分,我们小组将分别陈述自己对智能小车硬件部分的组装以及要改进的地方。
以下是几个小组成员的想法整理。
在这次机器人制作的实习中,我对智能控制机器人有了初步的认识。
第一次接触这个东西的我觉得它非常高大上,我们之前学过一些传感器知识和c++语言,今天才得以运用这些知识。
开始制作时,我们先了解了这个机器人的各种功能和使用的传感器以及其他元件,然后开始对机器人进行安装,使外形尽量合理,以便更好发挥其功能。
接下来在组长的带领下我几个开始实现机器人的各种功能,按照步骤初始化引脚,写代码,烧录……很快我们就弄好了蓝牙模块,用手机蓝牙连接机器人实现简单的前进后退转向功能。
在不断地修改和调试后,其他功能也一一实现。
虽然在检查时部分功能没有达到完美的效果,中途我们也遇到很多问题包括像电脑突然关机代码全部丢了等等…但我们觉得这次实习激发了我对电工的兴趣,也让我了解到了很多知识的应用与操作,希望有机会再进行这样的实习。
真正功能实现部分的内容写的略少……因为打酱油。
(2)这次参加了智能车的电工实习,感觉很过瘾,很好玩。
个人是挺喜欢智能玩具的,通过这次自己的实习,感觉通过软硬件的结合,就像搭积木一样,一点点自己把具有完整功能的模块结合起来,完成具有实际应用价值的小车,挺酷炫的。
但感觉在时间上挺仓促的,而且现在需要迎接着考试的压力,所以感觉课程安排上有点不自由。
由于自己之前有一点编程的基础,所以还能完成课程任务。
但倘若,完全一次都没接触过这些东西的话,个人感觉是很难第一次做就能把课程中设计的每一个任务都完成好的。
任务量确实有点大。
最后,很感谢学校能提供这样一个平台让我们学习这些,感觉这比学校课本上枯燥的知识有趣的多,能亲自去动手实践,挺自由,挺快乐!(3)对于智能小车的组装,因为时间问题所以使用了之前已经组装好了的智能小车,但这毕竟不是自己组装的,所以有很多自己不太满意的地方。
`特别注意事项:1,文件名“40862533_王小小_数学0801_实验1.doc”中的实验1指的是第几次上机实验,与“实验指导书”中的实验几没有关系;2,文件名“40862533_王小小_数学0801_实验1.doc”中的doc是文件扩展名,请注意不要提交如“*******.doc.doc”的文件;3,上机实验作业一律以word形式提交;4,若上机实验有多个作业,请按照下列加粗方式给每个作业命名,如:实验1_1,实验1_25,实验作业的word文件的页眉不可少,请每次注意修改;6,每个实验作业均要给出比较详细的程序说明,且程序说明位于程序之后。
程序说明是特别重点考察的部分,请按照你的理解进行撰写;7,该部分“特别注意事项”可以随同作业一并提交,请提交作业前进行对照。
实验9_1/****************************************************************程序功能:分别查找从10000到100000内的素数,统计各自运行的时间*******************************************************************/// number.hclass Number // 基类number{protected:int m_number;public:int GetNumber(){return m_number;}void SetNumber(int n){m_number=n;}void Prime(); // 求素数的成员函数};#include<iostream>#include"number.h"using namespace std;void Number::Prime (){int i; //用基本方法求素数for(i=2;i<m_number;i++){if(m_number%i==0)break;}if(m_number==i) //判断m_number是否被小于m_number的数整除cout<<m_number<<"is prime"<<endl;elsecout<<m_number<<"isn't prime"<<endl;}class DerNumber:public Number // 派生类{public:void Prime(); // 求素数的成员函数};#include<iostream>#include<cmath>#include"number.h"#include"DerNumber.h"using namespace std;void DerNumber::Prime () //用改进算法求素数{double sqrtm=sqrt(m_number); // 最大值开平方int i;for(i=2;i<=sqrtm;i++){ if(m_number%i==0)break;}if (sqrtm<i)cout<<m_number<<"is prime.\n";elsecout<<m_number<<"isn't prime.\n";}#include<iostream>#include<ctime>#include"number.h"#include"DerNumber.h"using namespace std;void main(){Number aNum;DerNumber aDerNum;clock_t start,finish;double elapsed_time1,elapsed_time2;int i;unsigned int max(100000);time(&start); //循环开始的时间for(i=10000;i<=max;i++){aNum.SetNumber(i);cout<<aNum.GetNumber()<<" "<<endl;aNum.Prime (); //基类对象求素数}time(&finish); //循环结束的时间elapsed_time1=difftime(finish,start); //循环的执行时间time(&start); //循环开始的时间for(i=10000;i<=max;i++){aDerNum.SetNumber (i);cout<<aDerNum.GetNumber()<<" "<<endl;aDerNum.Prime (); //派生类对象求素数}time(&finish); //循环结束的时间elapsed_time2=difftime(finish,start); //循环的执行时间cout<<"Delay for using Number class:"<<elapsed_time1<<"seconds"<<endl; cout<<"Delay for using Number class:"<<elapsed_time2<<"seconds"<<endl; }程序说明:【见程序中】函数覆盖和函数重载的区别:函数被重载的特征有:1) 相同的范围(在同一个类中);2) 函数名字相同;3) 参数不同;(即,接口不一样)4) virtual关键字可有可无。
华南理工大学《人工智能》复习资料Ch 2.【状态空间表示】S, F,Gs:初始状态的集合F:操作的集合G:目标状态的集合例如:{Q}{ a b c}{ Q o,Q7}【状态空间图】【状态空间图搜索使用的数据结构】OPEN表 :已生成但没考察的节点(待考察节点) CLOSED 表:考察过的节点及节点间关系(搜索树)【启发式搜索算法分类】按选择范围分类:全局择优搜索:考虑所有待考察节点局部择优搜索:只考虑当前节点的子节点【A算法】f (x) =g (x)+h ( x)g(x)为当前点的代价h(x)为距离目标的距离A*对A算法的改进:对h(x)作限制,使其总是小于实际最小距离(x),具有完备性OPENW CLOSED表父竹点編号编号节点父节点编号【广度/深度优先搜索特点】广度优先:完备的(一定能找到最优解),搜索效率低,OPEN 表为队列结构深度优先:不能保证找到最优解,OPEF表为堆栈结构有界深度优先搜索:即使能求出解,也不一定是最优可变界深度优先搜索算法:深度可变,每次深度超过阈值的点,都被当作待考察点(在CLOSED表中)Q与Q1, Q2与等价(即Q可以分解为Q1+Q2Q1与{Q1i},{Q1i ' }或等价(即Q1可以转换为{Q1i}或{Q1i ' })【与或图中的概念】本原问题:直接可解的问题。
终止节点:本原问题对应的节点端节点:无子节点的节点与节点:子节点为与关系或节点:子节点为或关系【与或图的广度/深度搜索】h (x) h*【与或图】Qn Qi? Q H Q23Q TI 'Q S1Q JJ1Stepl: SO 放入 OPEN 表Step2: OPEN 表第一个点(记为 N)取出放入 CLOSED 表, 冠以编号n 。
Step3:若n 可扩展:(1) 扩展N,其子节点放入 OPEN 表(深度:尾部,广度:首 部) (2) 考查这些节点是否终止节点。
若是,放入 CLOSED 表 标为可解节点,并对先辈点标示。
题目:广度优先搜索算法1.谈谈你对本课程学习过程中的心得体会与建议?人工智能是一门前沿且综合性非常强的课程,自己在整个课程的学习中,认识到人工智能领域的许多方面,以及了解和学习了人工智能课程相关的一些课程的学习过程中,涉及到了较多的计算机知识点,包括很多计算机个人建议学完这门课程后,多去尝试做一些简单的实践练习,实践中除了相关理论知识如算法等作为分析支撑,还要能够通过代码来编写实现一些简单案例,并进行测试验证和推导,最后尽可能将实现的案例进行举一反三,学习效果会大大提升。
在尝试实现练习案例中,涉及到编程技术,首先至少应该熟练使用一门编程语言,比较推荐Python作为主要编程语言进行实现案例以及日常练习,而且在Python编程相关的领域内,本身已经有很多相关成熟的代码demo去借鉴参考,这也有助于自己快速的上手和试验。
另外,无论是课程学习中,还是学习完后,一定要善于作笔记总结,汇总遇到的每个难点知识。
现在互联网比早以前发展的更成熟,我们可以通过互联网搜索相关知识,进行课外补充,这也是一种非常有效的提升课程知识的方式。
同时,利用互联网进行沟通探讨也是一种良好的学习方式,比如自己写博客交流,或者在相关论坛进行发帖提问式交流,都是非常方便且有效的,最后不要忘记将知识点进行再次归纳、记录进自己的笔记中。
目前人工智能技术的发展已经进入了更广泛的领域,而且目前还在不断的发展并且欣欣向荣,所以该课程是一门非常有意义的课程,学完这门课程后,个人推荐应该对这个领域进行持续关注,结合现代化人工智能需求,以及融入到身边的日常案例,积极进行更广泛和有深度的自我研究学习。
2.《人工智能》课程设计,从以下5个题目中任选其一作答。
题目:广度优先搜索算法广度优先搜索算法算法介绍:广度优先搜索算法又称为宽度优先搜索算法,英文全称是Breadth First Search(BFS),它是属于一种盲目搜索算法,该算法按照广度或宽度进行扩展搜索的,如果目标节点存在,用该算法总可以找到该目标节点,而且是最短路径节点,但该算法的时间和空间复杂度都相对比较高。
人工智能上机实验报告人工智能上机实验题目:自动求解八数码难题。
八数码难题:在3×3的方格棋盘上,分别放置了标有数字1,2,3,4,5,6,7,8的八张牌,初始状态S0,目标状态如下图所示,可以使用的操作有:空格左移,空格上移,空格右移,空格下移。
图1 八数码难题的目标状态请上机参考给定的类用C++实现八数码难题的自动求解,给出操作步骤。
参考代码的说明如下:1.CSearchEngine类:搜索引擎基类,你可以在它的基础上编写更好的搜索引擎2.CGSESearchEngine类:使用全局择优搜索算法的搜索引擎3.CEveluation类: 节点估价类, 对棋盘局面进行估值, 以引导搜索4.CMoveGenerator类:走法产生器,对某一局面产生合适的走法具体要求:1.对于指定的(程序内定的)初始问题状态,上机输入调试运行程序,给出自动求解步骤。
2.原估价函数为“不在位”的数码个数,请修改估价函数为“不在位的数码距离正确位置的距离”。
3.选做1:通过输出扩展节点,比较2中两种不同估价函数的效率。
选做2:编写随机生成初始状态的类,增强程序功能。
思考:是不是任意初始状态都能找到解?问题一:上图各节点中的数据,前三行为八个数字的布局,最后一行是评价结果,红色框和箭头指出最优路径。
搜索过程使用广度优先策略。
估价函数为:不在位的数码个数。
以下为运行结果步骤:2 8 31 6 47 0 52 8 31 0 47 6 5press enter to continue the next step:2 0 31 8 47 6 5press enter to continue the next step:0 2 31 8 47 6 5press enter to continue the next step:1 2 30 8 47 6 5press enter to continue the next step:1 2 38 0 47 6 5You've have the solution!问题二: //新的评价函数,不在位的数码距离正确位置的距离int CEvaluation::Evaluate(BYTE byBoard[][3]){BYTE destBoard[3][3] = { {1,2,3}, {8,0,4}, {7,6,5} };int iDist = 0;int i_1, j_1, i_2, j_2;BYTE num;for( num = 0; num <= 8; num ++ ){GetNumPos(byBoard, i_1, j_1, num);GetNumPos(destBoard, i_2, j_2, num);iDist += abs(i_1 - i_2) + abs(j_1 - j_2);}return iDist;}void CEvaluation::GetNumPos(BYTE byBoard[][3], int &i, int &j, BYTE num) {for( i = 0; i < 3; i ++ )for( j = 0; j < 3; j ++ )if( byBoard[i][j] == num )return;}问题三:上图各节点中的数据,前三行为八个数字的布局,最后一行是评价结果,红色框和箭头指出最优路径。
大工20秋《人工智能》作业汇总1. 作业概述本作业汇总了大连理工大学2020年秋季《人工智能》课程的所有作业题目及其答案。
本次课程涵盖了人工智能的基本概念、原理、技术和应用,旨在帮助学生深入理解人工智能的核心内容,提高实际应用能力。
2. 作业题目2.1 作业一:基本概念理解1. 请简述人工智能的定义及其发展历程。
2. 请阐述机器学习、深度学习以及强化学习之间的关系。
3. 请列举三种常见的人工智能应用场景。
2.2 作业二:理论知识掌握1. 请详细解释感知机、神经网络以及卷积神经网络的工作原理。
2. 请简述K近邻算法、决策树以及支持向量机分类算法的原理及优缺点。
3. 请描述贝叶斯网络、隐马尔可夫模型以及生成对抗网络的基本概念及应用。
2.3 作业三:编程实践1. 利用Python实现一个简单的线性回归模型。
2. 基于TensorFlow框架,构建一个手写数字识别的卷积神经网络模型。
3. 使用scikit-learn库实现一个文本分类器,对给定的新闻数据集进行分类。
3. 作业答案3.1 作业一答案1. 人工智能的定义:人工智能是一门研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的科学技术。
发展历程:早期(20世纪50年代-60年代)以基于逻辑的符号操作为主;中期(20世纪70年代-80年代)转向基于规则的专家系统;近期(20世纪90年代至今)以机器学习、深度学习为主导。
2. 关系:机器学习是人工智能的一个分支,深度学习是机器学习的一个子领域,强化学习是机器学习的一种方法。
3. 应用场景:语音识别、图像识别、自动驾驶等。
3.2 作业二答案1. 感知机:通过感知机模型对输入进行二值化处理,实现分类任务。
神经网络:通过多层神经元相互连接,实现对输入的高维特征的非线性变换。
卷积神经网络:在神经网络的基础上,引入卷积层和池化层,实现对图像等数据的特征提取和分类。
2. K近邻算法:通过计算测试样本与训练样本之间的距离,选取最近的K个样本进行分类。
人工智能应用技术新手案例含代码当谈到人工智能应用技术的新手案例时,一个非常常见的例子是使用Python编程语言和相关的库和框架来构建一个简单的图像分类器。
下面是一个完整的案例,包含代码和解释。
首先,我们需要安装必要的库和框架。
在Python中,我们可以使用`pip`命令来安装所需的库。
在这个案例中,我们需要安装`numpy`、`matplotlib`和`tensorflow`。
python.pip install numpy matplotlib tensorflow.接下来,我们需要准备一些训练数据。
假设我们要构建一个图像分类器,可以将猫和狗的图像进行分类。
我们可以从互联网上下载一些猫和狗的图像,并将它们分别存储在两个文件夹中。
然后,我们可以使用`tensorflow`库来构建一个简单的卷积神经网络(Convolutional Neural Network,CNN)模型。
下面是一个示例代码:python.import tensorflow as tf.from tensorflow.keras import layers.# 创建一个顺序模型。
model = tf.keras.Sequential()。
# 添加卷积层和池化层。
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)))。
model.add(layers.MaxPooling2D((2, 2)))。
model.add(layers.Conv2D(64, (3, 3), activation='relu'))。
model.add(layers.MaxPooling2D((2, 2)))。
model.add(layers.Conv2D(128, (3, 3),activation='relu'))。