pacman吃豆人
一、解决方法与必要分析
任务一:在 search.py 的 aStarSearch 方法中按照 A 算法补充 A 搜索代码,myHeuristic 方法中补充启发式函数代码,启发式函数尝试了两种形式,分别为曼哈顿距离和欧氏距离。经过实际运行发现,曼哈顿距离的效果略好于欧氏距离,搜索中展开的节点数更少。分析可知,由于精灵只能上下左右移动,曼哈顿距离能更好地预估精灵离终点的距离,故效果会更好。
```python for newState, action, cost in nowSuccessors: newActions = nowActions + [action] stateQueue.push((newState, newActions), problem.getCostOfActions(newActions) + heuristic(newState, problem)) return actions def myHeuristic(state, problem=None): " YOUR CODE HERE " x,y = state goalX,goalY = problem.getGoalState()
使用当前位置与目标位置之间的曼哈顿距离作为启发式函数
return abs(x - goalX) + abs(y - goalY)
使用当前位置与目标位置之间的欧氏距离作为启发式函数
return math.sqrt(math.pow(x - goalX, 2) + math.pow(y - goalY, 2))
```
任务二:对于 FoodSearchProblem,在 searchAgent.py 的 foodHeuristic 方法中补充对应的启发式函数代码。分析使用的三个地图,发现 food 均为线状分布,很自然会想到先走到食物构成的线上,再沿着线一路吃掉所有食物。故启发式函数设计的思路就是如果在线上,那沿着线走的启发式函数值最小,如果不在线上,则离线上最近的状态的启发式函数值最小。可以使用曼哈顿距离来统一定义,若在线上,下一个食物所在的位置到最近的食物曼哈顿距离是最小的;若不在线上,离线上越近的位置到最近的食物曼哈顿距离也越小。由于距离使用曼哈顿距离表示,该启发式函数满足满足 admissible 和 consistent。因为由于精灵只能上下左右移动,且可能会受到墙的阻隔,曼哈顿距离一定小于等于实际的距离,该启发式函数满足 admissible;还是因为精灵只能上下左右移动,原状态累计的开销加走一步的开销加上走过一步后的状态的启发式函数值不可能小于原状态累积的开销加原状态的启发式函数值,故该启发式函数也满足 consistent。
但运行以后发现实际效果并不是很好,怀疑是继续沿食物线走的状态与离开食物线的状态区分不明显所致,故在原来的算法上做了一些修改,将两种情况完全区分开了,算法效果大大提升,但修改后的启发式函数既不满足 admissible 也不满足 consistent,只能作为一种针对特定问题的特化算法。
任务三:将算法直接应用于新的三个布局即可,不需要改动代码
二、实验效果
由于同一个地图不同启发式函数运行的结果中 Score 均相同,故在表格中只展示 Search nodes expanded
bigMaze | openMaze | smallMaze | |
---|---|---|---|
空启发式 | 620 | 682 | 92 |
曼哈顿距离 | 549 | 535 | 53 |
欧氏距离 | 557 | 550 | 56 |
对比可知,使用非空启发式函数以后,搜索过程中扩展的节点数减少了 12%-43%,且对于越小越简单的地图,减少的幅度越大,对于大且复杂的地图,曼哈顿和欧氏距离启发式函数的效果比较有限。
Search3 运行后无响应,超过三分钟仍未出结果。
实现后的启发式函数(未特化)
Search3 运行后无响应,超过三分钟仍未出结果。
由于同一个地图不同启发式函数运行的结果中 Score 均相同,故在表格中只展示 Search nodes expanded
Search1 | Search2 | Search3 | |
---|---|---|---|
h=0 | 14 | 707 | —— |
实现后的启发式函数(未特化) | 12 | 538 | —— |
特化后的启发式函数 | 9 | 120 | 217 |
对比可知,使用实现后的启发式函数以后,搜索过程中扩展的节点数有所减少,但对于过大过复杂的地图,该算法拓展的节点仍然过多,无法在短时间内给出解。特化后的启发式函数效果更为明显,搜索过程中扩展的节点数大幅减少,且对于越大越复杂的地图,减少的幅度越大,对于在 h=0 和未特化时均无响应的 Search3,特化后的启发式函数依然可以在 0.1s 内找到路径,效果十分明显,但由于不满足 admissible 和 consistent,该算法并不能称为一个好的启发式算法。
originalClassic 和 powerClassic 运行后无响应,超过三分钟仍未出结果。
由于任务二中的启发式函数设计思路是在食物为线状分布的前提下提出的,具有一定的局限性,而任务三中的后两个地图食物并非简单的线状分布,故该启发式函数的表现较差。
三、操作说明
依照实验效果截图中的命令(即发布的作业说明文档给出的命令)运行即可。
PS:对于任务一,若想使用空启发式函数不需指定 heuristic 参数;代码默认使用曼哈顿距离,若想使用欧氏距离需将 return 曼哈顿距离的行注释掉,并将 return 欧氏距离的行取消注释。
PS:对于任务二/三,代码默认使用未特化的启发式函数,若想使用 h=0,将 return 0 取消注释并将之前的启发式代码注释掉即可;若想使用特化后的启发式函数,需将未特化的值更新公式注释掉,并将特化后的值更新公式取消注释即可。
参考文献
- 饮食数据知识图谱推荐系统(电子科技大学·王胜培)
- 基于知识图谱的电影推荐研究(深圳大学·)
- 基于SSH的大学生联谊交友管理系统设计与实现(华中科技大学·王海波)
- 基于知识图谱的健康膳食知识智能问答系统(兰州大学·王璐)
- 基于知识地图的教师个人知识管理平台的设计与实现(华中师范大学·乔贵春)
- 面向特定网页的Web爬虫的设计与实现(吉林大学·马慧)
- 基于J2EE平台的工作流管理系统的运行引擎和客户端及管理工具的设计与实现(西北大学·门浩)
- 基于协同过滤的视频推荐系统(山东大学·王雯思)
- 深度可定制的工具化爬虫系统的设计与实现(北京邮电大学·李笑语)
- 基于J2EE平台的工作流管理系统的运行引擎和客户端及管理工具的设计与实现(西北大学·门浩)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于知识地图的教师个人知识管理平台的设计与实现(华中师范大学·乔贵春)
- 基于J2EE平台的工作流管理系统的运行引擎和客户端及管理工具的设计与实现(西北大学·门浩)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码客栈 ,原文地址:https://bishedaima.com/yuanma/35996.html