《《人工智能》实验二-图搜索问题求解(共5页).doc》由会员分享,可在线阅读,更多相关《《人工智能》实验二-图搜索问题求解(共5页).doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上淮海工学院计算工程学院实验报告书课程名: 人工智能 题 目: 实验二:图搜索问题求解 班 级: D软件081 学 号: 姓 名: 汪晓骏 评语:成绩: 指导教师: 批阅时间: 年 月 日专心-专注-专业实验二 图搜索问题求解实验目的和要求1、熟悉Prolog程序编写环境。2、掌握图搜索问题求解的基本方式。3、完成实验,并自己编写程序。实验重点1、 自己编写程序。2、 掌握头搜索实现方法。实验难点自己编写程序。实验环境Windows XP prolog实验学时3学时,必做实验实验内容及实验步骤:实验内容:有一农夫带一只狼、一只羊和一筐菜欲从河的左岸乘船到右岸,但受下列条
2、件限制:1) 船太小,农夫每次只能带一样东西过河。2) 如果没有农夫看管,则狼要吃羊,样要吃菜。 请设计一个国和方案,使得农夫、狼、羊、菜都能不受损失地过河。画出相应的状态空间图。提示:1) 用四元组(农夫、狼、羊、菜)表示状态,其中每个元素都可为0或1,用0表示在左岸,用以表示在右岸。2) 把每次过河的一种安排作为一个算符,每次过河都必须有农夫,因为只有他可以划船。实验步骤:DOMAINSLOC = east ; west /*定义河的两岸*/STATE = state(LOC,LOC,LOC,LOC) /*定义一个状态表示河两岸的情况*/PATH = STATE* /*状态改变的列表*/P
3、REDICATESgo(STATE,STATE) /* 开始状态 */path(STATE,STATE,PATH,PATH) /* 记录过河路径 */move(STATE,STATE) /* 移动一个对象 */opposite(LOC,LOC) /*可能的位置 */unsafe(STATE) /* 安全状态检查 */member(STATE,PATH) /* 检查是否记录过此状态 */write_path(PATH)write_move(STATE,STATE)GOAL write(press any key for each step of solution), go(state(east,
4、east,east,east),state(west,west,west,west),write(solved press any key to continue),readchar(_),exit.CLAUSESgo(S,G):-path(S,G,S,L),nl,write(A solution is:),nl,write_path(L),fail.go(_,_).path(S,G,L,L1):- move(S,S1), not( unsafe(S1) ), not( member(S1,L) ), path( S1,G,S1|L,L1),!.path(G,G,T,T):- !. /* 最终
5、状态 */ move(state(X,X,G,C),state(Y,Y,G,C):-opposite(X,Y). /* FARMER and WOLF */move(state(X,W,X,C),state(Y,W,Y,C):-opposite(X,Y). /* FARMER and GOAT */move(state(X,W,G,X),state(Y,W,G,Y):-opposite(X,Y). /* FARMER and CABBAGE */move(state(X,W,G,C),state(Y,W,G,C):-opposite(X,Y). /* FARMER */opposite(eas
6、t,west).opposite(west,east):-!.unsafe( state(F,X,X,_) ):- opposite(F,X). /* 狼和羊不安全 */unsafe( state(F,_,X,X) ):- opposite(F,X). /* 山羊和卷心菜不安全 */member(X,X|_).member(X,_|L):-member(X,L).write_path( H1,H2|T ) :- !, readchar(_), write_move(H1,H2), write_path(H2|T).write_path( ).write_move( state(X,W,G,C)
7、, state(Y,W,G,C) ) :-!, write( farmer crosses the river from ,X, to ,Y),nl.write_move( state(X,X,G,C), state(Y,Y,G,C) ) :-!, write( farmer and Wolf cross rive from ,X, to ,Y),nl.write_move( state(X,W,X,C), state(Y,W,Y,C) ) :-!, write( farmer and Goat cross rive from,X, to ,Y),nl.write_move( state(X,W,G,X), state(Y,W,G,Y) ) :-!,write( farmer and cabbage cross rive from ,X, to ,Y),nl. 实验体会 通过这次实验更加加深了我对prolog使用的理解,对于代码的编写也有了更进一步的认识,虽然在这次的编写中也遇到了很多困难,但是我还是克服了,完成了代码的运行!