pacman吃豆人之Python

pacman吃豆人 一,解决方法与必要分析 任务一:在 search,py 的 aStarSearch 方法中按照 A 算法补充 A 搜索代码

本文包含相关资料包-----> 点击直达获取<-------

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

相关推荐

  • 基于Java+SSM的健身房俱乐部管理系统、基于JavaWeb的健身房俱乐部管理系统

    这是一个🔥🔥基于SSM的健身房俱乐部管理系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 健身管理系统开发技术栈为SSM项目,可以作为毕业设计课程设计作业编写并实现一个基于Java Web/Java的健身房俱乐部管理系统
    2024年05月23日
    8 1 2
  • 基于JSP的学生信息管理系统

    Student-information-managemen 基于JSP的学生信息管理系统 参考文献 开放性实验室管理系统的设计与实现(南昌大学·刘定军) 基于JSP的辽宁大学毕业设计指导系统的设计与实现(吉林大学·王一凡) 基于J2EE的高校人力资源信息管理的设计与实现(四川大学·付明柏) 学生综合信息管理平台的设计与实现(吉林大学·刘铁刚) 基于Web的学生管理信息系统的分析和设计(厦门大学·叶露阳) 基于MVC与ASP
    2024年05月14日
    5 1 1
  • 基于SpringBoot框架的英语知识应用网站

    这是一份采用🔥🔥SpringBoot框架构建的英语学习平台的源代码项目,主要编程语言为Java,并结合了SpringBoot和Vue技术,开发工具包括Idea或Eclipse
    2024年05月23日
    5 1 2
  • 基于Jsp和Servlet实现的图书管理系统

    基于JSP和MySQL实现的图书管理系统 一,采用的工具与技术总览 前端页面设计涉及技术 :html5+css3 后端开发设计技术 :jsp+servlet+javaBean+jdbc+dao 模板引擎 :jsp(el与jstl) 服务器与java版本 :Tomcat8
    2024年05月14日
    6 1 1
  • 基于SSM框架的APP应用管理平台源码

    这是一个🔥🔥基于SSM框架的APP应用管理平台源码🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 APP应用管理平台开发技术栈为SSM项目,可以作为毕业设计课程设计作业基于SSM框架(springmvc+spring+mybatis)实现一个APP应用管理平台
    2024年05月23日
    7 1 4
  • 基于springboot实现的高校健康上报系统

    高校健康上报系统设计与实现 0, 大作业讲解视频在根目录下 1, 项目介绍 在全国人民共同抗击新冠肺炎疫情的严峻形势下,为使高校师生健康信息及时汇报
    2024年05月14日
    3 1 2
  • 小徐影城管理系统

    这是一个🔥🔥基于SpringBoot框架的小徐影城管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 基于SpringBoot框架的问卷调查系统

    这是一项采用🔥🔥SpringBoot为核心的问卷调查系统开发项目源代码,主要编程语言为Java,并结合了Vue技术进行构建,开发工具选择的是Idea或Eclipse,该问卷调查系统适用于毕业设计或课程实践任务
    2024年05月23日
    3 1 1
  • 基于SpringBoot框架的B2B平台的医疗病历交互系统

    这是一套采用Java语言编写的🔥🔥SpringBoot框架为核心的B2B医疗病历共享系统源代码,该项目利用了SpringBoot和Vue,js技术栈,开发工具为Idea或Eclipse
    2024年05月23日
    3 1 3
  • 基于SpringBoot框架的论坛系统

    这是一套采用Java语言,基于SpringBoot框架构建的论坛系统源代码,项目中融入了Vue技术,开发工具为Idea或Eclipse,该论坛系统设计适用于毕业设计或课程设计任务
    2024年05月23日
    12 1 6

发表回复

登录后才能评论