资源描述:
《《人工智能》实验二 图搜索问题求解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、淮海工学院计算工程学院实验报告书课程名:《人工智能》题目:实验二:图搜索问题求解 班级:D软件081学号:510856106姓名:汪晓骏评语:成绩:指导教师:批阅时间:年月日《人工智能》实验报告实验二图搜索问题求解实验目的和要求1、熟悉Prolog程序编写环境。2、掌握图搜索问题求解的基本方式。3、完成实验,并自己编写程序。实验重点1、自己编写程序。2、掌握头搜索实现方法。实验难点自己编写程序。实验环境WindowsXPprolog实验学时3学时,必做实验实验内容及实验步骤:实验内容:有一农夫带一只狼、
2、一只羊和一筐菜欲从河的左岸乘船到右岸,但受下列条件限制:1)船太小,农夫每次只能带一样东西过河。2)如果没有农夫看管,则狼要吃羊,样要吃菜。请设计一个国和方案,使得农夫、狼、羊、菜都能不受损失地过河。画出相应的状态空间图。提示:1)用四元组(农夫、狼、羊、菜)表示状态,其中每个元素都可为0或1,用0表示在左岸,用以表示在右岸。2)把每次过河的一种安排作为一个算符,每次过河都必须有农夫,因为只有他可以划船。实验步骤:DOMAINSLOC=east;west/*定义河的两岸*/STATE=state(LOC,
3、LOC,LOC,LOC)/*定义一个状态表示河两岸的情况*/PATH=STATE*/*状态改变的列表*/PREDICATESgo(STATE,STATE)/*开始状态*/path(STATE,STATE,PATH,PATH)/*记录过河路径*/move(STATE,STATE)/*移动一个对象*/opposite(LOC,LOC)/*可能的位置*/unsafe(STATE)/*安全状态检查*/member(STATE,PATH)/*检查是否记录过此状态*/write_path(PATH)3《人工智能》实验
4、报告write_move(STATE,STATE)GOALwrite("pressanykeyforeachstepofsolution"),go(state(east,east,east,east),state(west,west,west,west)),write("solvedpressanykeytocontinue"),readchar(_),exit.CLAUSESgo(S,G):-path(S,G,[S],L),nl,write("Asolutionis:"),nl,write_path(L
5、),fail.go(_,_).path(S,G,L,L1):-move(S,S1),not(unsafe(S1)),not(member(S1,L)),path(S1,G,[S1
6、L],L1),!.path(G,G,T,T):-!./*最终状态*/move(state(X,X,G,C),state(Y,Y,G,C)):-opposite(X,Y)./*FARMERandWOLF*/move(state(X,W,X,C),state(Y,W,Y,C)):-opposite(X,Y)./*FARMERandG
7、OAT*/move(state(X,W,G,X),state(Y,W,G,Y)):-opposite(X,Y)./*FARMERandCABBAGE*/move(state(X,W,G,C),state(Y,W,G,C)):-opposite(X,Y)./*FARMER*/opposite(east,west).opposite(west,east):-!.unsafe(state(F,X,X,_)):-opposite(F,X)./*狼和羊不安全*/unsafe(state(F,_,X,X)):-opp
8、osite(F,X)./*山羊和卷心菜不安全*/member(X,[X
9、_]).member(X,[_
10、L]):-member(X,L).write_path([H1,H2
11、T]):-!,readchar(_),write_move(H1,H2),write_path([H2
12、T]).write_path([]).3《人工智能》实验报告write_move(state(X,W,G,C),state(Y,W,G,C)):-!,write("farmercrossestheriverfrom",X,"to",
13、Y),nl.write_move(state(X,X,G,C),state(Y,Y,G,C)):-!,write("farmerandWolfcrossrivefrom",X,"to",Y),nl.write_move(state(X,W,X,C),state(Y,W,Y,C)):-!,write("farmerandGoatcrossrivefrom",X,"to",Y),nl.write_move(state(X,W,G,