資源描述:
《《人工智能》實驗二 圖搜索問題求解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、淮海工學(xué)院計算工程學(xué)院實驗報告書課程名:《人工智能》題目:實驗二:圖搜索問題求解 班級:D軟件081學(xué)號:510856106姓名:汪曉駿評語:成績:指導(dǎo)教師:批閱時間:年月日《人工智能》實驗報告實驗二圖搜索問題求解實驗?zāi)康暮鸵?、熟悉Prolog程序編寫環(huán)境。2、掌握圖搜索問題求解的基本方式。3、完成實驗,并自己編寫程序。實驗重點1、自己編寫程序。2、掌握頭搜索實現(xiàn)方法。實驗難點自己編寫程序。實驗環(huán)境WindowsXPprolog實驗學(xué)時3學(xué)時,必做實驗實驗內(nèi)容及實驗步驟:實驗內(nèi)容:有一農(nóng)夫帶一只狼、
2、一只羊和一筐菜欲從河的左岸乘船到右岸,但受下列條件限制:1)船太小,農(nóng)夫每次只能帶一樣?xùn)|西過河。2)如果沒有農(nóng)夫看管,則狼要吃羊,樣要吃菜。請設(shè)計一個國和方案,使得農(nóng)夫、狼、羊、菜都能不受損失地過河。畫出相應(yīng)的狀態(tài)空間圖。提示:1)用四元組(農(nóng)夫、狼、羊、菜)表示狀態(tài),其中每個元素都可為0或1,用0表示在左岸,用以表示在右岸。2)把每次過河的一種安排作為一個算符,每次過河都必須有農(nóng)夫,因為只有他可以劃船。實驗步驟:DOMAINSLOC=east;west/*定義河的兩岸*/STATE=state(LOC,
3、LOC,LOC,LOC)/*定義一個狀態(tài)表示河兩岸的情況*/PATH=STATE*/*狀態(tài)改變的列表*/PREDICATESgo(STATE,STATE)/*開始狀態(tài)*/path(STATE,STATE,PATH,PATH)/*記錄過河路徑*/move(STATE,STATE)/*移動一個對象*/opposite(LOC,LOC)/*可能的位置*/unsafe(STATE)/*安全狀態(tài)檢查*/member(STATE,PATH)/*檢查是否記錄過此狀態(tài)*/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):-!./*最終狀態(tài)*/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,