【正文】
類中,我們使用__init__函數(shù)存儲(chǔ)墻壁的位置,吃豆人的起點(diǎn)和角落位置,定義新的函數(shù)getStartState用于獲得節(jié)點(diǎn)起始狀態(tài),isGoalState函數(shù)判斷當(dāng)前節(jié)點(diǎn)是否為目標(biāo)節(jié)點(diǎn),getSuccessors函數(shù)返回后繼狀態(tài),所需的操作以及代價(jià),getCostOfActions函數(shù)計(jì)算動(dòng)作序列所需的代價(jià)。查找后繼節(jié)點(diǎn)時(shí),在四個(gè)方向一次遍歷,使用directionToVector移動(dòng)位置,如果沒有墻,則把下一個(gè)的狀態(tài),動(dòng)作,花費(fèi)的步數(shù)加入下一節(jié)點(diǎn)Q6: Corners Problem: Heuristic構(gòu)建合適的啟發(fā)函數(shù),完成問題5中的角落搜索問題。在問題五使用的CornersProblem類中定義cornersHeuristic函數(shù),為角落問題構(gòu)造啟發(fā)函數(shù)。在cornersHeuristic函數(shù)中使用了GetNextNodes函數(shù)獲取下一個(gè)節(jié)點(diǎn),isGoal函數(shù)判斷是否為目標(biāo)。Q7: Eating All The Dots: Heuristic用盡可能少的步數(shù)吃掉所有的豆子。這個(gè)問題利用之前A*算法可以很容易找到解,此種方法在這里不再詳述。下面在FoodSearchProblem類中定義函數(shù)foodHeuristic,構(gòu)建合適的啟發(fā)函數(shù)完成豆子搜索(啟發(fā)式)問題。Q8: Suboptimal Search次最優(yōu)搜索,定義一個(gè)優(yōu)先吃最近的豆子的函數(shù),以此來提高搜索速度。補(bǔ)充AnyFoodSearchProblem目標(biāo)測(cè)試函數(shù),并在ClosestDotSearchAgent當(dāng)中添加findPathToClosestDot函數(shù),用于尋找最近的豆子。三、 實(shí)驗(yàn)結(jié)果(解決每個(gè)問題的結(jié)果)Q1: Depth First Search python l tinyMaze p SearchAgent python l mediumMaze p SearchAgentpython l bigMaze z .5 p SearchAgentQ2: Breadth First Search python l mediumMaze p SearchAgent a fn=bfspython l bigMaze p SearchAgent a fn=bfs z .5Q3: Uniform Cost Search python l mediumMa