收藏 分销(赏)

《人工智能》实验二-图搜索问题求解.doc

上传人:仙人****88 文档编号:12012725 上传时间:2025-08-27 格式:DOC 页数:5 大小:446KB 下载积分:10 金币
下载 相关 举报
《人工智能》实验二-图搜索问题求解.doc_第1页
第1页 / 共5页
《人工智能》实验二-图搜索问题求解.doc_第2页
第2页 / 共5页


点击查看更多>>
资源描述
淮海工学院计算工程学院 实验报告书 课程名: 《 人工智能》 题 目: 实验二:图搜索问题求解   班 级: D软件081 学 号: 510856106 姓 名: 汪晓骏 评语: 成绩: 指导教师: 批阅时间: 年 月 日 《人工智能》实验报告 实验二 图搜索问题求解 实验目的和要求 1、熟悉Prolog程序编写环境。 2、掌握图搜索问题求解的基本方式。 3、完成实验,并自己编写程序。 实验重点 1、 自己编写程序。 2、 掌握头搜索实现方法。 实验难点 自己编写程序。 实验环境 Windows XP prolog 实验学时 3学时,必做实验 实验内容及实验步骤: 实验内容:有一农夫带一只狼、一只羊和一筐菜欲从河的左岸乘船到右岸,但受下列条件限制: 1) 船太小,农夫每次只能带一样东西过河。 2) 如果没有农夫看管,则狼要吃羊,样要吃菜。 请设计一个国和方案,使得农夫、狼、羊、菜都能不受损失地过河。画出相应的状态空间图。 提示: 1) 用四元组(农夫、狼、羊、菜)表示状态,其中每个元素都可为0或1,用0表示在左岸,用以表示在右岸。 2) 把每次过河的一种安排作为一个算符,每次过河都必须有农夫,因为只有他可以划船。 实验步骤: DOMAINS LOC = east ; west /*定义河的两岸*/ STATE = state(LOC,LOC,LOC,LOC) /*定义一个状态表示河两岸的情况*/ PATH = STATE* /*状态改变的列表*/ PREDICATES go(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,east,east,east),state(west,west,west,west)), write("solved press any key to continue"), readchar(_), exit. CLAUSES go(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):- !. /* 最终状态 */ 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(east,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), 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使用的理解,对于代码的编写也有了更进一步的认识,虽然在这次的编写中也遇到了很多困难,但是我还是克服了,完成了代码的运行! 3
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服