- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
631306050115陆奇启发式搜索单层感知器实现and分类
重庆交通大学计算机与信息学院验证性实验报告班 级: 软件 专业 2013 级 1 班 学 号: 631306050115__________ 姓 名: 陆奇________________ 实验项目名称: 启发式搜索 A*算法实验项目性质: 验证性实验_______ 实验所属课程: 人工智能__________ 实验室(中心):软件中心实验室(语音楼8楼)指 导 教 师 : 朱振国____________ 实验完成时间: 2016 年 6 月 11 日评阅意见:实验成绩: 签名: 年 月 日一、实验目的 理解和掌握A*算法。二、实验内容及要求在8数码问题中,利用策略函数判断搜索,并使用A*算法减少搜索目标。 三、实验设备及软件 Windows操作系统,vs2013四、设计方案㈠ 题目 启发式搜索 A*算法㈡ 设计的主要思路该搜索为一个搜索树。为了简化问题,搜索树节点设计如下:typedef struct Node//棋盘{//节点结构体 int data[9];double f,g;struct Node * parent; //父节点}Node,*Lnode;int data[9];数码数组:记录棋局数码摆放状态。struct Chess * Parent;? 父节点:指向父亲节点。下一步可以通过启发搜索算法构造搜索树。1、局部搜索树样例:2、搜索过程 搜索采用广度搜索方式,利用待处理队列辅助,逐层搜索(跳过劣质节点)。搜索过程如下: (1)、把原棋盘压入队列; (2)、从棋盘取出一个节点; (3)、判断棋盘估价值,为零则表示搜索完成,退出搜索; (4)、扩展子节点,即从上下左右四个方向移动棋盘,生成相应子棋盘;(5)、对子节点作评估,是否为优越节点(子节点估价值小于或等于父节点则为优越节点),是则把子棋盘压入队列,否则抛弃; (5)、跳到步骤(2);㈢ 主要功能解决简单的八数码问题五、主要代码 #include stdlib.h#include stdio.h#include math.htypedef struct Node{//节点结构体 int data[9];double f,g;struct Node * parent;}Node,*Lnode;typedef struct Stack{//OPEN CLOSED 表结构体Node * npoint;struct Stack * next;}Stack,* Lstack;Node * Minf(Lstack * Open){//选取OPEN表上f值最小的节点,返回该节点地址Lstack temp = (*Open)-next,min = (*Open)-next,minp = (*Open);Node * minx; while(temp-next != NULL){if((temp-next -npoint-f) (min-npoint-f)){min = temp-next;minp = temp;}temp = temp-next;}minx = min-npoint;temp = minp-next;minp-next = minp-next-next;free(temp);return minx;}int Canslove(Node * suc, Node * goal){//判断是否可解int a = 0,b = 0,i,j;for(i = 1; i 9;i++)for(j = 0;j i;j++){if((suc-data[i] suc-data[j]) suc-data[j] != 0)a++;if((goal-data[i] goal-data[j]) goal-data[j] != 0)b++;}if(a%2 == b%2)return 1;else return 0;}int Equal(Node * suc,Node * goal){//判断节点是否相等,相等,不相等for(int i = 0; i 9; i ++ )if(suc-data[i] != goal-data[i])return 0; return 1;}Node * Belong(Node * suc,Lstack * list){//判断节点是否属于OPEN表或CLOSED表,是则返回节点地址,否则返回空地址Lstack temp = (*list) - next ;if(temp == NULL)return NULL;while(temp != NULL){if(Equal(suc,temp-npoint))return temp - npoint;temp = temp-next;}return
文档评论(0)