人工智能实验报告.docx

上传人:b****6 文档编号:8662239 上传时间:2023-02-01 格式:DOCX 页数:18 大小:851.23KB
下载 相关 举报
人工智能实验报告.docx_第1页
第1页 / 共18页
人工智能实验报告.docx_第2页
第2页 / 共18页
人工智能实验报告.docx_第3页
第3页 / 共18页
人工智能实验报告.docx_第4页
第4页 / 共18页
人工智能实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

人工智能实验报告.docx

《人工智能实验报告.docx》由会员分享,可在线阅读,更多相关《人工智能实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

人工智能实验报告.docx

人工智能实验报告

 

院系:

计算机科学学院

专业:

计算机科学与技术

年级:

XXX

课程名称:

人工智能导论

学号:

XXX

姓名:

XXX

指导教师:

XXX

 

XXX年XX月XX日

年级

 

班号

 学号

 

专业

 姓名

实验名称

实验一:

水壶问题

实验

类型

设计型

综合型

创新型

实验题目:

有3个没有刻度的油壶,其容量分别为10升,3升,4升。

其中,只有

10升的壶里面装满了油,其他两个壶是空的。

现在需要较为准确地得到5

升油并且油不能被倒在其他的地方浪费掉。

实验步骤:

1、程序代码

#include

#include

#include

inth10=10,h4=0,h3=0;

intmain()

{

while(h10!

=5)

{

inti=rand()%6;

intrule=i;

switch(i)

{

case0:

h10=h10-(4-h4);h4=4;break;

case1:

h10=h10-(3-h3);h3=3;break;

case2:

h10=h10+h4;h4=0;break;

case3:

h10=h10+h3;h3=0;break;

case4:

if((h4+h3)>3)

{h4=h4+h3-3;h3=3;}

else{h3=h4+h3;h4=0;}break;

case5:

if((h4+h3)>4){h3=h4+h3-4;h4=4;}

else{h4=h4+h3;h3=0;}break;

}

printf("h10:

%d,h4:

%d,h3:

%d,rule:

%d\n",h10,h4,h3,rule);

}

return0;

}

 

1、实验结果分析

运行得到的结果后,可能会出现重复的情况,这是无法避免的。

在分析实验的结果时,应将得到的重复的结果去掉再进行分析,才能得出正确的结果。

2、心得体会

应将实际问题转化为数学模型从而进行建模分析。

再用代码来解决问题。

而且

要学会用代码解决身边的常识性问题,提高自己将实际问题转化为用程序解决实际问题的能力。

 

教师签名:

2013年月日

备注:

源代码附后,源代码要求有注释说明

年级

 

班号

 

 学号

 

专业

 姓名

实验名称

实验二:

传教士野人问题

实验

类型

设计型

综合型

创新型

题目:

传教士人数M,野人C,M≥C,开始都在岸左边,

   ①船只能载两人,传教士和野人都会划船

   ②两岸边保证野人人数不能大于传教士人数,否则传教士将被野人吃掉

把所有人都送过河,设计方案,要求编程实现。

实验步骤:

1、程序代码

#include

#include

#include

typedefstruct

{

intxds;//xiudaoshi

intyr;//yeren

intcw;//chuanwei

}DataType;

DataTypefa[50000];

typedefstructnode

{

DataTypedata;

structnode*son;

structnode*bro;

structnode*par;

structnode*next;

}Ltable;

voidLtableinit(Ltable**head)//初始化邻接表的操作

{

*head=(Ltable*)malloc(sizeof(Ltable));//动态分配空间

(*head)->son=NULL;

(*head)->bro=NULL;

(*head)->par=NULL;

(*head)->next=NULL;

}

voidinsertson(Ltable*head,DataTypex)//在邻接表中插入儿子结点的操作

{

Ltable*q,*s;

q=(Ltable*)malloc(sizeof(Ltable));

q->data=x;

head->son=q;

s=head;

while(s->next!

=NULL)

s=s->next;

q->par=head;

q->son=NULL;

q->bro=NULL;

s->next=q;

q->next=NULL;

}

voidinsertbro(Ltable*head,DataTypex)//在邻接表中插入兄弟结点的操作,所有的兄弟结点都指向他们右边的结点;

{

Ltable*q,*s;

q=(Ltable*)malloc(sizeof(Ltable));

s=head->son;

q->data=x;

while(s->bro!

=NULL)

s=s->bro;

s->bro=q;

s->next=q;

q->next=NULL;

q->bro=NULL;

q->par=head;

q->son=NULL;

}

intfindfa(DataTypex,intn)//生成在船上修道士仍安全的几种情况;

{

inti=0,a,b,t=0;

if(x.cw)

{

a=0;b=n-a;

while(a+b>=1)

{

t++;

while(b>=0)

{

fa[i].xds=a;

fa[i].yr=b;

i++;

a++;

b--;

}

a=0;

b=n-a-t;

}

}

else

{

a=1;b=0;t=0;

while(a+b<=n)

{

t++;

while(a>=0)

{

fa[i].xds=a*(-1);

fa[i].yr=b*(-1);

i++;

a--;

b++;

}

a=fa[0].xds*(-1)+t;

b=0;

}

}

returni;

}

intjiancha(DataTypex,intn)//安全性检测,检查当前情况下,修道士是否安全

{

if((x.xds>=x.yr||x.xds==0)&&((n-x.xds)>=(n-x.yr)||x.xds==n)&&x.xds>=0&&x.xds<=n&&x.yr>=0&&x.yr<=n)

return1;

else

return0;

}

voidprint(Ltable*q,Ltable*p)//打印安全渡河的过程

{

DataTypea[100];

inti=1;

a[0].cw=0;

a[0].xds=0;

a[0].yr=0;

while(q!

=p)

{

a[i++]=q->data;

q=q->par;

}

while((--i)>-1)

{

printf("(%d%d%d)",a[i].xds,a[i].yr,a[i].cw);

if(!

(a[i].xds==0&&a[i].yr==0&&a[i].cw==0))

{if(a[i].cw==1)

printf("-->(%d%d)-->(%d%d0)\n",a[i].xds-a[i-1].xds,a[i].yr-a[i-1].yr,a[i-1].xds,a[i-1].yr);

//else printf("<--(%d%d)<--(%d%d1)\n",(a[i].xds-a[i-1].xds)*(-1),(-1)*(a[i].yr-a[i-1].yr),a[i-1].xds,a[i-1].yr);

}

elseprintf("\n");

}

printf("渡河成功!

\n");

}

voidwork(Ltable*p,intn,intc)

{

Ltable*q,*t;

DataTypetem;

inti,flag,flag1,g=0,j,count=0;

q=p->son;

while(q!

=NULL)

{

flag=0;

j=findfa(q->data,c);

for(i=0;i

{

tem.xds=q->data.xds-fa[i].xds;

tem.yr=q->data.yr-fa[i].yr;

tem.cw=1-q->data.cw;

t=q;

if(jiancha(tem,n))

{

flag1=1;

while(t!

=p)

{

if(tem.xds==t->data.xds&&tem.yr==t->data.yr&&tem.cw==t->data.cw)

{

flag1=0;

break;

}

t=t->par;

}

if(flag1==1)

{

if(flag==0)

{

insertson(q,tem);

flag=1;

}

else

insertbro(q,tem);

if(tem.xds==0&&tem.yr==0&&tem.cw==0)

{

print(q,p);

count++;

}

}

}

}

q=q->next;

}

if(count==0)

printf("无法成功渡河,修道士好郁闷!

\n");

else

printf("有%d种渡河方式。

\n",count);

}

intmain()

{

Ltable*p;

DataTypetem;

Ltableinit(&p);//初始化邻接表;

intn,c;

while

(1)

{

printf("请输入修道士与野人的人数n:

\n");

scanf("%d",&n);

if(n==0)

break;

printf("请输入船可容纳的人数c:

\n");

scanf("%d",&c);

tem.xds=n;

tem.yr=n;

tem.cw=1;

insertson(p,tem);//将初始状态作为头结点的孩子结点;

work(p,n,c);//进行广度搜索;

}

return1;

}

 

2、结果截图

 

 

通过传教士过河问题,可以提高我们的编程能力。

让我们清楚的知道如何将实际问题转化为程序问题。

让计算机来解决实际中的问题。

 

教师签名:

2013年月日

年级

班号

 学号

专业

 姓名

 

实验名称

实验三:

演化算法

实验

类型

设计型

综合型

创新型

题目:

根据以下MATLAB程序编写C语言代码

pop=rand(20,1)*10;%随机产生初始群体

objvalue=10*sin(5*pop)+7*cos(4*pop);%//10*sin(5*x)+7*cos(4*x);

fori=1:

200%200为迭代次数

forj=1:

19

a=rand();

x=a*pop(j)+(1-a)*pop(j+1);

obj=10*sin(5*x)+7*cos(4*x);

ifobj>objvalue(j)

pop(j)=x;

objvalue(j)=obj;

end

end

end

实验步骤:

1、程序代码

#include

#include

#include

intmain()

{

doublea,obj[20],b1[20],c,d,a1;

inti,j;

srand(5);

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

{

a=(double)rand()*10.0/RAND_MAX;

b1[i]=a;

obj[i]=10*sin(5*a)+7*cos(4*a);

}

for(j=0;j<200;j++)

{

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

{

c=(double)rand()/RAND_MAX;

d=c*b1[i]+(1-c)*b1[i+1];

a1=10*sin(5*d)+7*cos(4*d);

if(a1>obj[i])

{

b1[i]=d;

obj[i]=a1;

}

}

}

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

{

printf("b2=%1.4f\n",obj[i]);

}

system("pause");

}

2、程序运行结果截图

 

 

演化算法在实际中有着许多重要的意义。

他是根据达尔文的生物进化得来的。

它主要有两点方面的特点:

(1)自组织、自适应和自学习性(智能性)。

(2)本质并行性。

演化计算主要的经过长时间的发展,主要出现了以下几个研究领域:

(1)演化计算的理论研究;

(2)新的计算模型;

(3)演化优化;

(4)演化人工神经网络;

(5)并行和分布式演化计算;

(6)演化机器学习;

(7)演化计算应用系统;

(8)演化硬件;

(9)演化软件;

(10)演化计算内涵的扩充。

所以,学会演化算法也是相当重要的

 

教师签名:

2013年月日

备注:

源代码附后,源代码要求有注释说明

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

当前位置:首页 > 成人教育 > 专升本

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

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