PacMan:主要使用哪些启发式方法?

2024-02-08

除了 A*、BFS、DFS 等之外,Pacman 中还广泛使用其他哪些好的寻路算法/启发式算法?如果吃豆人可以找到不止一种水果,我认为我提到的那些不会起作用。

我需要一些好的寻路算法,PacMan 可以使用它们以尽可能少的步数完成迷宫。我试图四处寻找指南,但到目前为止还没有运气。曼哈顿距离的 A* 随处可见,但它只适用于只有一个(或两个?或者可能最多几个?)水果的迷宫。

顺便说一句,为了简单起见,假设周围没有鬼魂。

原始 PacMan 问题的一些示例:First https://code.google.com/p/pacman-search/source/browse/trunk/+pacman-search+--username+hnly228078@gmail.com/src/layouts/bigSearch.lay?r=2, Second https://code.google.com/p/pacman-search/source/browse/trunk/+pacman-search+--username+hnly228078@gmail.com/src/layouts/trickySearch.lay?r=2 and Third https://code.google.com/p/pacman-search/source/browse/trunk/+pacman-search+--username+hnly228078@gmail.com/src/layouts/mediumCorners.lay?r=2


如果你知道迷宫的外观,启发式对我有用:

  1. 找到迷宫中当前最远的两个水果之间的真实距离 - 让我们称之为x.
  2. 找到从当前吃豆人位置到前两个水果中较近的一个的真实距离 - 让我们称之为y.

那么,答案就是:x + y.

请注意,实际距离不是曼哈顿距离,而是real迷宫中的距离 - 你可以计算它(如果你愿意的话甚至可以预先计算),因为你知道迷宫的外观(你知道所有的墙壁,......)。该信息(迷宫中某些两点之间的实际距离)是静态的,因为墙壁不会改变。

对此的解释x + y公式可能是这样的:

  • x- 无论哪种方式,你都必须走这段距离,至少在最后
  • y- 当您到达两个最远的水果中的一些时,最好收集靠近它的食物,这样您就不必返回

如果您正在解决这个问题作为伯克利人工智能类项目的一部分,为了计算两点之间的实际距离,您可以使用函数mazeDistance(pos1, pos2, gameState)它已经实现并且正在使用您的 bfs 实现。另外,这个启发式是可以接受的 and 持续的,至少对于他们的测试用例来说是这样。顺便说一句,通过这种启发,我成功地仅扩展了 376 个节点trickySearch maze.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PacMan:主要使用哪些启发式方法? 的相关文章

  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 检索受“rowspan”影响的行的列索引的最有效方法是什么?

    考虑下表 table thead tr th th th A th th B th th C th tr thead tbody tr th 1 th td Apples td td Oranges td td Pears td tr tb
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组
  • 删除队列中的最后一个元素

    我需要删除队列的最后一个元素 我唯一可以使用的操作是 Peek 获取第一个元素而不删除它 Enqueue element 向队列末尾插入一个元素 Dequeue 删除第一个元素 IsEmpty true 或 false 队列是否为空 而且我
  • 快速搜索压缩文本文件

    我需要能够在大量压缩文件 txt 中搜索文本 压缩可能会改变为其他东西 甚至成为专有的 我想避免解压所有文件并压缩 编码 搜索字符串并在压缩文件中搜索 这应该可以通过对所有文件使用相同的码本使用霍夫曼压缩来实现 我不想重新发明轮子 所以 任
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • URL路径相似度/字符串相似度算法

    我的问题是我需要比较 URL 路径并推断它们是否相似 下面我提供了要处理的示例数据 GROUP 1 robots txt GROUP 2 bot html GROUP 3 phpMyAdmin 2 5 6 rc1 scripts setup
  • 用 C++ 生成 AST

    我正在用 C 制作一个解释器 到目前为止我已经有了词法分析器来生成标记 问题是我不确定如何生成 行走 解析树 我正在考虑使用数组数组来制作解析树 但我不确定如何以正确的顺序将标记实际插入到解析树中 我不确定是自上而下 左右还是自下而上 左右
  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • Java递归方法求阶乘返回负输出[重复]

    这个问题在这里已经有答案了 我知道这是溢出 但问题是 20 是相对较小的数字 这不应该发生 对吧 有没有更好的方法来查找大数 例如 1000 的阶乘 而不会得到这种奇怪的结果 public class RecursiveFunctionsE
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 照片马赛克算法。如何在给定基本图像和瓷砖列表的情况下创建马赛克照片?

    Hy 我要做的是创建一个程序 使用 C 或 C 它将 24 位 像素位图和图像集合作为输入 我必须创建一个马赛克图像 类似于使用库的输入图像给定的图像 创建与输入类似的马赛克照片 到目前为止 我可以访问输入的图像像素及其颜色 但我有点卡住了
  • 如何对对象进行排序? (画家算法)

    所以我有 4 个矩形形状 我正在尝试应用排序算法 画家算法 https en wikipedia org wiki Painter 27s algorithm 来知道我需要先绘制哪些形状 在 3d 中 然后绘制哪个形状 Note 相机位于右
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex

随机推荐

  • 更改 R data.frame 的列名称的两种看似相同的方法 - 只有另一种有效

    我有一个数据框 我需要为一些变量名称添加后缀 就我而言 这是将变量扩展为宽格式后的所有数值变量 有人可以解释一下为什么第一个选项不起作用但第二个选项起作用 df lt data frame ID id var1 1 var2 2 var3
  • 使用 Swift 的 TTTAttributedLabel 中的可点击链接

    我想做一个UILabel一些带有可点击链接的文本 不是指向网页的链接 而是指向像我所做的那样的操作UIButton 所以我用了TTTAttributedLabel这是完美配合Objective C 现在我想做同样的事情Swift 所以我写了
  • 在 Android 中禁用/删除 EditText 中的文本选择句柄

    当用户单击 EditText 时 光标会出现文本选择句柄 文本选择手柄可以移动到字段中的不同位置 文本选择句柄是 有什么方法可以删除它 使其不显示吗 为了解决这个问题 我创建了一个空的形状图像
  • 使用 fullPage.js 中的“afterRender”回调通过 jQuery 事件运行代码

    我正在使用一个名为 fullPage js 的库来创建一个网站 在此我使用 setTimeout 函数来更改背景图像 setTimeout function bg opacity css opacity 1 background image
  • Codeigniter:如果下拉数据来自数据库,则使用 set_select()

    我有一个下拉 字段 它从数据库获取其值 我目前正在寻找一种使用方法set select 但没有成功 这是我现有的观点
  • Swift:沿路径部分移动 UIImage

    我正在使用此代码沿曲线移动 UIImage paint curve for sun let path UIBezierPath let imageSunName small sun png let imageSun UIImage name
  • 如何在 Quarkus 中以编程方式注册 bean?

    我正在尝试找到一种在 quarkus DI 中以编程方式创建 bean 的方法 但没有成功 在这个框架下可以吗 看起来BeanManager尚未实现所需的方法 首先我们要明确什么 以编程方式创建bean 确切的意思是 但首先我们应该定义什么
  • 从 NSDate 对象获取 UTC 时间和本地时间

    在 Objective C 中 以下代码使用以下命令生成 UTC 日期时间信息date API NSDate currentUTCDate NSDate date 然而在斯威夫特中 let date NSDate date 结果为本地日期和
  • 如何在 Golang 的单元测试中测试 net.Conn?

    我目前正在考虑为 Go 中的 net Conn 接口以及在该功能之上构建的其他函数创建一些单元测试 我想知道在 Google Go 中进行单元测试的最佳方法是什么 我的代码如下所示 conn net Dial tcp 127 0 0 1 8
  • 对 SQL Server 存储过程进行版本控制的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 设置 rhc(红帽客户端工具)时出错

    我已经按照 Openshift 网站上的说明安装了 rhc 当我跑步时一切看起来都很好gem install rhc and hgem update rhc但当我尝试打电话时rhc我在下面收到以下消息 我尝试重新安装 ruby 和 git
  • SSD 驱动器会让 Maven 构建更快吗?

    好帖子在这里 https stackoverflow com questions 4557934 would a ssd vs fast hdd drive make my eclipse run compile faster据说使用 SS
  • 如何使用公共函数从 Bytes 返回 KB、MB 和 GB

    我正在编写一个返回文件大小 以 B KB MB GB 为单位 的 函数 VB Net 代码总是首先获取以字节为单位的大小 因此当文件的大小 以字节为单位 小于 100 时 它返回 B 如果它 gt 1000 则将其除以 1000 然后返回
  • EJB 3.1 |通过 JNDI 调用远程会话 bean 时出错

    我试图从 Java SE 简单类 调用一个简单的无状态会话 bean 这是我的豆子 import javax ejb Stateless author MMRUser Stateless public class CapitalBean i
  • Android 11 5G 获取小区参数

    我正在新的 Android studio 预览版上尝试网络类型 5G 上的 Android 11 我的目标是获取单元信息详细信息 但是 方法 getAllCellInfo 在模拟器上返回空 空列表 Android 11 之前的所有模拟器都会
  • Android 在可扩展列表视图中禁用自动滚动

    我在可扩展列表视图中使用 当我打开列表视图中的某个项目时 我的滚动会自动聚焦在打开的项目上 我可以阻止列表聚焦在新项目上并停留在同一个地方吗 我尝试从打开的视图中删除可聚焦的内容 但它不起作用 您需要重写 OnGroupClickListe
  • 无法从 EC2 实例元数据服务检索凭证

    我正在尝试使用 SDK 通过 AWS SES API 发送电子邮件 我的代码基于此处的官方文档 https docs aws amazon com ses latest DeveloperGuide examples send using
  • 最少使用的 unicode 分隔符

    我正在尝试在特定位置使用分隔符标记我的文本 稍后将使用该分隔符进行解析 我想使用最不常用的分隔符 我当前正在查看 2 或 U 0002 字符 使用起来足够安全吗 还有哪些其他建议 文本为 unicode 同时包含英语和非英语字符 A想要使用
  • 字体真棒图标在 Chrome 中显示为正方形?

    我正在尝试在按钮中使用字体很棒的图标 该图标在 Firefox 中工作正常 但当我在 Chrome 中使用它时 它显示为正方形 我环顾四周 唯一发现的是字体的路径可能不正确 但我后来尝试了 cdn 版本here http www boots
  • PacMan:主要使用哪些启发式方法?

    除了 A BFS DFS 等之外 Pacman 中还广泛使用其他哪些好的寻路算法 启发式算法 如果吃豆人可以找到不止一种水果 我认为我提到的那些不会起作用 我需要一些好的寻路算法 PacMan 可以使用它们以尽可能少的步数完成迷宫 我试图四