基于Python设计的吃豆人游戏

基于Python设计的吃豆人游戏 一,实现 Expectimax 期望最大(Expectimax)是在 MINIMAX 的基础上进行了概率的计算,这个最开始我还是很没有理解的

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

基于Python设计的吃豆人游戏

一、实现 Expectimax

期望最大(Expectimax)是在 MINIMAX 的基础上进行了概率的计算,这个最开始我还是很没有理解的,后来和叶老师与111173田鑫讨论后才悟了,如图 1:

图 1 一颗普通的状态树 图 2 新的计算公式 这一层原本是 MINI 层,按照原来的算法,应该在其子节点中选择一个最小值传递到上一层,因此结果应该是-12。但现在添加了到达每个节点的概率,计算的方式就变成了求期望值,即图 2 的公式。其中 p 表示概率,value 该点的值。这样一来,该点的值就是 8 * 1/2+ 1/3 + -12 * 1/6 = 10,就不是之前的-12 了。

在吃豆人问题中,由于向每个方向走的概率都是相同的,因此只需要将子节点求和后除以合 action 的数量,就可以达到 Expecrimax 所描述的计算要求。

1.1 结果展示

通过对比AphasiaBeta和Expectimax对同一个地图进行测试,可以得到如下结果:

图 3 结果截图

可以看到相比之下,AphasiaBeta一场都没有赢过,而Expectimax赢了半数以上的对局,足以说明其策略更优。

二、实现 Reflex

在实现自定义评价函数的时候没懂是什么意思,因此和叶老师沟通后,开始着手做第一题。因为第一题也有自定义评价函数的内容,与第五题类似。Reflex中基本的思路就是

离食物越近越好

离鬼越远越好

因此评分标准就要围绕着上面两个思想来进行。首先离食物越近越好这个可以用倒数的形式来完成,而离鬼越远越好的话,我通过很长一段时间考虑…觉得用那种“离鬼越近负分越高”的评价会比较好,因此我决定用一个呈指数级别的函数,即 e的-x 次方。此时横坐标的x表示的就是吃豆人离鬼的距离。我们可以分析得到,当距离为0的时候是最危险的,因此其负的分数更高,如图5所示。

图 4 给我启发的 exp 的图象 图 5 最终使用的-exp 的图象

接下来的代码就比较玄学了,我直接(1/到最近食物距离)-exp(到鬼的距离),并且也尝试了很久调试参数,但是无论如何都不能使其运作的很好…最终我在github上参考了别人的代码,发现他也用的exp进行权值计算。但是他首先利用到了“oldFood”,用移动之前的食物记录,来判断当前这次有没有吃到食物,有的话就设置一个很高的分数,没有的话就设置为0。然后她也计算出了“到最近食物距离”和“到鬼的距离”,用刚才的分数减去这两个值。虽然不知道他咋想的,但这样确实管用…下面附上这位同学的代码链接:

图 6 这位同学的精妙算法结果

三、实现 Evaluation Function

实现 Evaluation Function 的时候,我先按照自带的评价函数 scoreEvaluationFunction 直接计算 state 的得分,并作为评价值返回。运行结果如下:

图 8 打印分数由于原来的评分功能已经很好的实现了正常吃豆和躲避鬼的代码,因此这里我添加了吃“药丸”的权重判断(在阅读源码的时候发现了 getCapsules 这个函数,可以获得地图中药丸的坐标)。在这个判断的规则下,吃豆人会更倾向于靠近药丸,并且在吃到药丸后,也更倾向于追逐鬼。这里我参考了 Reflex 中的计算方法,即计算得到曼哈顿距离后用 exp 计算获得一个较大的分数。

代码如下:

图 9 评价计算公式

这两段代码的计算方式十分相似,都是得到所有药丸/鬼的位置,然后计算曼哈顿得到一个最近的距离,对这个距离进行形如 math.exp(-(Value-5))的计算,便可得到评价值。需要说明的是,当吃豆人没有吃到药丸的时候,对鬼的分数依然是要打负分,因此有了图 9 中的那个 else 语句。

最终将原本的评分数值加上图 9 两个计算出来的两个值,就是最终的评分了,代码如下

图 10 最终评价计算

需要注意的是,这里加了一个小 tick:药丸得到的分数我乘以了 1.5 倍,因为如果不乘以这个系数的话,最终的平均得分是小于 1000 的,只能拿到这题的 5/6 分,如图 11:

图 11 一次不太完美的结果

之所以乘以 1.5,这是在和111172周伟国同学讨论 Reflex 的时候他给我提供的思路,就是当好几个评分结果都影响最终得分的时候,可以设置权重系数,把你认为影响最大的那个结果通过系数放大,影响小的就通过系数变得更小。这样一来就能将局势判断朝你更倾向的那个思路进行下去。最终 PASS 的结果如图 12 所示:

图 12 Perfect!

四、总结

学到的东西

想要放大距离对分数的影响可以用指数函数,其曲线满足分数距离越近越高,越远越低。同样的,也可以用系数来扩大分数的影响。

相比预测全部确定状态做出的决定,有时不如考虑随机性的因素而做出的决定

参考文献

  • 基于轻量级J2EE的网络游戏虚拟物品交易系统的设计与实现(北京邮电大学·曹鹃)
  • 基于手持移动设备的教学游戏设计与开发(上海师范大学·覃柳思)
  • 面向高职信息技术教育的严肃游戏设计与实施(大连理工大学·王晓姝)
  • 基于B/S架构的酷跑社区系统的设计与实现(内蒙古大学·张晓乐)
  • 豆玩手机游戏平台的设计与实现(吉林大学·李天明)
  • 网页游戏平台的管理与设计(哈尔滨师范大学·苏润泽)
  • 网页游戏平台的管理与设计(哈尔滨师范大学·苏润泽)
  • 面向计算思维发展的游戏创作学习活动设计与应用研究——以小学编程教学为例(华东师范大学·程亮)
  • 基于web的旅游服务平台的设计与实现(内蒙古大学·张凡)
  • 基于web的旅游服务平台的设计与实现(内蒙古大学·张凡)
  • 教育类电子游戏设计与开发(上海交通大学·陶渊琛)
  • 基于.NET平台的游戏门户系统设计与实现(电子科技大学·余胜鹏)
  • 科学探究游戏的设计与应用研究——以《食品侦察队》为例(杭州师范大学·朱洲洋)
  • 基于web的旅游服务平台的设计与实现(内蒙古大学·张凡)
  • 基于Struts+JSP的SNS网站系统的设计与实现(吉林大学·王雷)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码导航 ,原文地址:https://m.bishedaima.com/yuanma/36180.html

相关推荐

  • 基于Java+JSP+Servlet的图书管理系统

    研究背景和当前研究现状: 随着信息技术的迅猛发展和互联网的普及,图书管理系统作为信息管理的重要工具,在图书馆,学校,企事业单位等各个领域得到了广泛应用,传统的图书管理方式已经无法满足日益增长的信息管理需求
    2024年05月07日
    9 1 1
  • 购物推荐网站

    这是一个🔥🔥基于SpringBoot框架的购物推荐网站设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于Python制作的24点生成器

    基于 Python 制作的 24 点生成器 导语 看了下上周那篇推文,阅读量相对有些惨淡,看来大家都不太喜欢那个主题(说实话我也不喜欢),这周还是来点正常的吧
    2024年05月14日
    3 1 1
  • 基于SpringBoot框架的新闻稿件管理系统

    这是一套采用Java语言编写的新闻稿管理系统的源代码,基于流行的SpringBoot框架,我们利用了SpringBoot与Vue技术栈进行开发,支持Idea或Eclipse等集成开发环境
    2024年05月23日
    6 1 1
  • 二维非稳态热传导 膏体发动机之Python

    二维非稳态热传导 膏体发动机 一,划分网格: X 方向网格:20;Y 方向网格:20 材料 1:材料 2:材料 1=8:4:8 总网格数量:400 网格尺寸: 注意有界性条件:方程的各项系数大于 0 显式格式: 网格时 网格时 隐式格式: 有界性条件自动满足 C-N 格式: 二
    2024年05月14日
    1 1 1
  • 基于Python制作吃豆豆小游戏

    基于 Python 制作吃豆豆小游戏 导语 今天上 GitHub 发现 Python 制作小游戏系列文章的代码 repo 竟然有 500stars 了
    2024年05月14日
    4 1 1
  • 基于python制作一个打砖块小游戏

    基于 python 制作一个打砖块小游戏 导语 想起来好久没更这个系列的文章了,周末过来补一波好了,本期我们将利用 python 制作一个打砖块小游戏
    2024年05月14日
    1 1 1
  • 汽车资讯网站

    这是一个🔥🔥基于SpringBoot框架的汽车资讯网站设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    5 1 1
  • 基于JSP和Oracle实现的志愿服务银行系统

    基于JSP和Oracle实现的志愿服务银行系统 1,系统概述 1,1 系统背景 本次实习我们小组选择志愿服务银行网站的建设,志愿服务的行为是高尚的
    2024年05月14日
    43 1 8
  • 基于Java Web的智能二维码门禁管理系统

    基于 Java Web 的智能二维码门禁管理系统的设计与实现 摘要 我们身边的很多事物都已悄然接入互联网,由此本文提出基于 Java Web 和微信小程序的一套门禁系统的设计
    2024年05月14日
    5 1 1

发表回复

登录后才能评论