人工智能实验报告

时间:2024.4.20

华北电力大学

|

|

                实验名称          图搜索问题求解          

课程名称          人工智能及应用          

|

|

                 专业班级:     学生姓名:

                 学    号:  成    绩:

指导教师: 李继荣        实验日期:  2014.5



第二篇:C语言解八数码问题之人工智能实验报告


人工智能导论上机实验指导书


基于人工智能的状态空间搜索策略研究

——八数码问题求解

(一)实验软件

TC2.0 或 VC6.0 编程语言或其它编程语言

(二)实验目的

1. 熟悉人工智能系统中的问题求解过程;

2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用;

3. 熟悉对八数码问题的建模、求解及编程语言的应用。

(三)需要的预备知识

1. 熟悉TC2.0 或 VC6.0 编程语言或者其它编程语言;

2. 熟悉状态空间的宽度优先搜索、深度优先搜索和启发式搜索算法;

3. 熟悉计算机语言对常用数据结构如链表、队列等的描述应用;

4. 熟悉计算机常用人机接口设计。

(四)实验数据及步骤

1. 实验内容

八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。

(a) 初始状态          (b) 目标状态

图1 八数码问题示意图

请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或 任选一种启发式搜索方法(A 算法或 A* 算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。

2. 实验步骤

(1)分析算法基本原理和基本流程;

程序采用宽度优先搜索算法,基本流程如下:

(2)确定对问题描述的基本数据结构,如 Open 表和 Closed 表等;

(3)编写算符运算、目标比较等函数;

(4)编写输入、输出接口;

(5)全部模块联调;

(6)撰写实验报告。

(五)实验报告要求

所撰写的实验报告必须包含以下内容:

1. 算法基本原理和流程框图;

2. 基本数据结构分析和实现;

3. 编写程序的各个子模块,按模块编写文档,含每个模块的建立时间、功能、输入输出参数意义和与其它模块联系等;

4. 程序运行结果,含使用的搜索算法及搜索路径等;

5. 实验结果分析;

6. 结论;

7. 提供全部源程序及软件的可执行程序。

附:实验报告格式

一、实验问题

二、实验目的

三、实验原理

四、程序框图

五、实验结果及分析

六、结论

七、源程序及注释

#include<stdio.h>

#include<conio.h>

int n,m;

typedef struct Node

{

char matrix[10];/*存储矩阵*/

char operate;/*存储不可以进行的操作,L代表不能左移R代表不能右移U代表不能上移D代表不能下移*/

char extend;/*是否可以扩展,Y代表可以,N代表不可以*/

int  father;/*指向产生自身的父结点*/

}Node;

char start[10]={"83426517 "};/*此处没有必要初始化*/

char end[10]={"1238 4765"};/*此处没有必要初始化*/

Node base[4000];

int result[100];/*存放结果的base数组下标号,逆序存放*/

int match()/*判断是否为目标*/

{

int i;

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

{

  if(base[n-1].matrix[i]!=end[i])

  {

   return 0;

  }

}

return 1;

}

void show()/*显示矩阵的内容*/

{

int i=1;

while(m>=0)

{

  int mm=result[m];

  //clrscr();

  printf("\n\n\n   状态方格\t\t步骤 %d",i);

  printf("\n\n\n\n\n\t\t\t%c\t%c\t%c\n",base[mm].matrix[0],base[mm].matrix[1],base[mm].matrix[2]);

  printf("\n\n\t\t\t%c\t%c\t%c\n",base[mm].matrix[3],base[mm].matrix[4],base[mm].matrix[5]);

  printf("\n\n\t\t\t%c\t%c\t%c\n",base[mm].matrix[6],base[mm].matrix[7],base[mm].matrix[8]);

  //sleep(1);

  m--;

  i++;

}

}

void leave()/*推理成功后退出程序之前要执行的函数,主要作用是输出结果*/

{

n--;

while(base[n].father!=-1)

{

  result[m]=n;

  m++;

  n=base[n].father;

}

result[m]=0;

result[m+1]='\0';

show();

//clrscr();

printf("\n\n\n\n\n\n\n\n\n\t\t\t\t搜索结束\n\n\n\n\n\n\n\n\n\n");

getch();

//exit(0);

}

int left(int x)/*把下标为X的数组中的矩阵的空格左移*/

{

int i,j;

char ch;

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

{

  if(base[x].matrix[i]==' ')

   break;

}

if(i==0||i==3||i==6||i==9)

{

  return 0;

}

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

{

  base[n].matrix[j]=base[x].matrix[j];

}

ch=base[n].matrix[i-1];

base[n].matrix[i-1]=base[n].matrix[i];

base[n].matrix[i]=ch;

base[n].operate='R';

base[n].extend='Y';

base[n].father=x;

base[x].extend='N';

n++;

        if(match(i))

leave();

return 1;

}

int right(int x)/*把下标为X的数组中的矩阵的空格右移*/

{

int i,j;

char ch;

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

{

  if(base[x].matrix[i]==' ')

   break;

}

if(i==2||i==5||i==8||i==9)

{

  return 0;

}

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

{

  base[n].matrix[j]=base[x].matrix[j];

}

ch=base[n].matrix[i+1];

base[n].matrix[i+1]=base[n].matrix[i];

base[n].matrix[i]=ch;

base[n].operate='L';

base[n].extend='Y';

base[n].father=x;

base[x].extend='N';

n++;

if(match(i))

leave();

return 1;

}

int up(int x)/*把下标为X的数组中的矩阵的空格上移*/

{

int i,j;

char ch;

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

{

  if(base[x].matrix[i]==' ')

   break;

}

if(i==0||i==1||i==2||i==9)

{

  return 0;

}

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

{

  base[n].matrix[j]=base[x].matrix[j];

}

ch=base[n].matrix[i-3];

base[n].matrix[i-3]=base[n].matrix[i];

base[n].matrix[i]=ch;

base[n].operate='D';

base[n].extend='Y';

base[n].father=x;

base[x].extend='N';

n++;

        if(match(i))

leave();

return 1;

}

int down(int x)/*把下标为X的数组中的矩阵的空格下移*/

{

int i,j;

char ch;

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

{

  if(base[x].matrix[i]==' ')

   break;

}

if(i==6||i==7||i==8||i==9)

{

  return 0;

}

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

{

  base[n].matrix[j]=base[x].matrix[j];

}

ch=base[n].matrix[i+3];

base[n].matrix[i+3]=base[n].matrix[i];

base[n].matrix[i]=ch;

base[n].operate='U';

base[n].extend='Y';

base[n].father=x;

base[x].extend='N';

n++;

        if(match(i))

leave();

return 1;

}

main()

{

int i;

char a[20],b[20];

n=1;

//textcolor(LIGHTGREEN);

//clrscr();

/*以下是输入初始和目标矩阵,并把输入的0转换为空格*/

printf("Please input the start 9 chars:");

scanf("%s",a);

printf("Please input the end 9 chars:");

scanf("%s",b);

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

{

  if(a[i]=='0')

  {

   start[i]=' ';

   continue;

  }

  if(b[i]=='0')

  {

   end[i]=' ';

   continue;

  }

  start[i]=a[i];

  end[i]=b[i];

}

start[9]='\0';

end[9]='\0';

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

{

  base[0].matrix[i]=start[i];

}

base[0].operate='N';

base[0].extend='Y';

base[0].father=-1;

/*以上是为第一个base数组元素赋值*/

for(i=0;n<4000;i++)

{

  if(base[i].extend=='Y')

  {

   if(base[i].operate=='L')

   {

    right(i);up(i);down(i);

   }

   if(base[i].operate=='R')

   {

    left(i);up(i);down(i);

   }

   if(base[i].operate=='U')

   {

    left(i);right(i);down(i);

   }

   if(base[i].operate=='D')

   {

    left(i);right(i);up(i);

   }

   if(base[i].operate=='N')

   {

    left(i);right(i);up(i);down(i);

   }

  }

}

}

更多相关推荐:
人工智能实验报告

人工智能九宫格重移搜索成员赵春杰20xx210665羊森20xx210653黄鑫20xx210周成兵20xx210664王素娟20xx2106441问题描述八数码问题也称为九宫问题在33的棋盘摆有八个棋子每个棋...

人工智能试验报告汇总

人工智能课程实验指导书实验内容实验一产生式系统实验实验二移动机器人的路径规划与行为决策实验实验三梵塔问题实验实验四A算法实验实验五化为子句集的九步法实验实验六子句消解实验实验七模糊假言推理器实验实验八BP网络实...

人工智能实验报告

人工智能第二次实验报告一实验题目遗传算法的设计与实现二实验目的通过人工智能课程的学习熟悉遗传算法的简单应用三实验内容用遗传算法求解fxx2的最大值x031x取整数可以看出该函数比较简单只要是为了体现遗传算法的思...

人工智能实验报告

人工智能技术实验报告实验名称人工智能实验1姓名班级指导教师完成时间20xx04301读程序指出运行结果domainsssymbolpredicatespsp1sp2sp3sp4sp5ssp11sp12sp31s...

人工智能实验报告

西南大学实验报告人工智能院系计算机与信息科学学院专业学号姓名指导老师

中南大学人工智能实验报告

人工智能实验报告专业自动化班级09级学号姓名日期20xx12人工智能实验报告目录一实验八自动规划实验群3二实验一生产式系统实验群6三实验二搜索策略实验群7四实验七神经网络9五实验心得和体会102人工智能实验报告...

人工智能实验报告一

实验内容方法和步骤一实验内容1熟悉Turboprolog的运行环境包括所用的机器的硬件与软件环境2学习使用Turboprolog包括进入Prolog主程序编辑源程序修改环境目录退出等基本操作3学习Turbopr...

人工智能实验报告

大学人工智能基础课程实验报告20xx20xx学年第一学期启发式搜索王浩算法班级学号姓名指导教师成绩20xx年1月10日实验一启发式搜索算法1实验内容使用启发式搜索算法求解8数码问题编制程序实现求解8数码问题A算...

人工智能实验报告

华北电力大学实验报告实验名称课程名称人工智能及应用专业班级软件0902学生姓名董一号20xx0920xx4成绩指导教师刘丽实验日期20xx429学实验报告如打印纸张用A4左装订页边距上下25cm左29cm右21...

人工智能实验报告

华北电力大学实验报告实验名称课程名称人工智能及应用专业班级:软件1102学生姓名:学号:成绩:指导教师:实验日期:20.5(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm,右2.1cm…

智能机器人实验报告

《智能机器人》实验报告学院:数理与信息工程学院专业:计算机科学与技术(师范)学号:姓名:教师:上交时间:20XX年12月19日成绩:实验中用到函数整理l函数:drive(x,y)功能:控制两个电机的转动。说明:…

机器人实验报告

院系电气信息工程学院班级XX级电气X班姓名XXX提交日期机器人实验报告前言作为先进制造业中不可替代的重要装备和手段工业机器人已经成为衡量一个国家制造水平和科技水平的重要标志机器人的应用越来越广泛需求越来越大其技...

人工智能实验报告(49篇)