人工智能实验二图搜索

上传人:第*** 文档编号:34234256 上传时间:2018-02-22 格式:DOCX 页数:6 大小:261.41KB
返回 下载 相关 举报
人工智能实验二图搜索_第1页
第1页 / 共6页
人工智能实验二图搜索_第2页
第2页 / 共6页
人工智能实验二图搜索_第3页
第3页 / 共6页
人工智能实验二图搜索_第4页
第4页 / 共6页
人工智能实验二图搜索_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《人工智能实验二图搜索》由会员分享,可在线阅读,更多相关《人工智能实验二图搜索(6页珍藏版)》请在金锄头文库上搜索。

1、 人 工 智 能 技 术 基 础图搜索问题求解实验报告一、实验目的加强对图搜索技术的理解,初步掌握图搜索基本编程方法,并能运用图搜索技术解决一些应用问题。二、实验要求(1)可使用第 3 章中的状态图搜索通用程序,这时只需编写规则集程序;也可以用PROLOG 语言或其他语言另行编写。(2)程序运行时,应能在屏幕上显示程序运行结果。三、实验内容或题目实验题目:迷宫求解实验内容:利用状态图搜索方法求解下列迷宫图入口出口1 2 3 4 512345四、实验步骤与源程序实验步骤:(1) 理解题目;(2) 对状态进行编码;(3) 转换规则集;(4) 编写程序;(5) 调试运行;源程序:/*状态图搜索通用程

2、序*/DOMAINSstate=symbol %例如:state=symbolDATABASE-mydatabaseopen(state,integer) %用动态数据库实现OPEN表closed(integer,state,integer)%和CLOSED表res(state)open1(state,integer)min(state,integer)mark(state)fail_PREDICATESsolveroad(state,state)search(state,state)resultsearchingstep4(integer,state)step56(integer,state

3、)equal(state,state)repeatresulting(integer)rule(state,state)GOALsolve.CLAUSESsolve:- search(s,e),result./*例如solve:-search(st(0,1,2,3,4,5,6,7,8),st(0,2,8,3,4,5,6,7,1),result.*/search(Begin,End):- %搜索retractall(_,mydatabase),assert(closed(0,Begin,0),assert(open(Begin,0), %步1 将初始节点放入OPEN表assert(mark(En

4、d),repeat,searching,!.result:-%输出解not(fail_),retract(closed(0,_,0),closed(M,_,_),resulting(M),!.result:-%输出解not(fail_),retract(closed(0,_,0),closed(M,_,_),resulting(M),!.result:- beep,write(sorry dont find a road!).searching:-open(State,Pointer), %步2 若OPEN表为空,则失败,退出retract(open(State,Pointer),%步3 取出

5、OPEN表中第一个节点,给其closed(No,_,_),No2=No+1, %编号asserta(closed(No2,State,Pointer), %放入CLOSED表!,step4(No2,State).searching:-assert(fail_).%步4 若当前节点为目标节点,则成功step4(_,State):- mark(End),equal(State,End). %转步2step4(No,State):- step56(No,State),!,fail.step56(No,StateX):- %步5 若当前节点不可扩展,转步2rule(StateX,StateY), %步

6、6 扩展当前节点X得Ynot(open(StateY,_), %考查Y是否已在OPEN表中not(closed(_,StateY,_), %考查Y是否已在CLOSED表中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),write(t),fail.resulting(_):- !.rule(X,Y):-

7、road(X,Y).road(s,s11).road(s11,s12).road(s12,s11).road(s12,s13).road(s13,s12).road(s13,s14).road(s14,s13).road(s11,s21).road(s21,s11).road(s12,s22).road(s15,s25).road(s25,s15).road(s23,s24).road(s24,s23).road(s24,s25).road(s25,s24).road(s21,s31).road(s31,s21).road(s23,s33).road(s33,s23).road(s24,s34

8、).road(s34,s24).road(s25,s35).road(s35,s25).road(s31,s32).road(s32,s31).road(s32,s33).road(s33,s32).road(s34,s35).road(s35,s34).road(s31,s41).road(s41,s31).road(s34,s44).road(s44,s34).road(s42,s43).road(s43,s42).road(s43,s44).road(s44,s43).road(s44,s45).road(s45,s44).road(s42,s52).road(s52,s42).road

9、(s51,s52).road(s52,s51).road(s52,s53).road(s53,s52).road(s53,s54).road(s54,s53).road(s54,s55).road(s55,s54).road(s55,e) .%例如:rule(X,Y):-road(X,Y).五、实验结果六、 实验总结该实验的例题较为特殊,要实现深度优先和广度优先搜索,在源代码中修改一致,只需将assertz(open(StateY,No)改为asserta(open(StateY,No)。实验刚开始出现运行错误,road未定义,在PREDICATES中给road加以定义road(state,state)。之后运行还有一个报错,经过反复检查,发现最后结尾语句没加句号。因为急于验收,修改完代码,直接加载,导致犯下一个结尾少加句号的低级错误,耗时耗力,影响进度。随着今后编程的增多,深深体会到编程时要静心严谨,否则一个小小的疏忽,将增加额外的工作量。通过第二次上机实验,自己对prolog运行平台的使用更为熟练。今后课下会多多关注人工智能方面的科研资讯,学习课外的知识,增加自己知识储备,提高自己的专业技能。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号