大地图寻路

2024-01-30

我正在创建一个带有 10,000 x 10,000 地图的游戏。
我希望用户能够设置位置并让计算机立即找到最佳路径。
然而,由于地图是10,000 x 10,000,有100,000,000个节点,并且通过诸如A*或Dijkstra之类的传统方法来找到这条路径需要大量的内存和很长的时间。
所以我的问题是:我怎样才能找到最佳路径?
我正在考虑的算法会将世界分为 100 个部分,每个部分有 1,000,000 个节点。然后每个部分将分为 100 个小节。重复此操作,直到每个子部分包含 100 个节点。然后,该算法将找到最佳路径的部分,然后是子部分,然后是子子部分,直到找到最佳的节点集。这可行吗?有更好的方法吗?
我也在考虑跳点搜索,但我不知道,学起来却发现它做不到,那会很痛苦。

编辑:我尝试添加 A*。然而,运行时间大约为 5 秒,比理想情况长了约 4 秒。


由于地图为 10.000 x 10.000,因此节点数为 100.000.000。使用 A* 的直接实现是不切实际的,并且肯定不会使游戏在地图大小上可扩展。

我建议您使用以下解决方案,这基本上就是您的想法:

HPA*(分层路径 A*)。该方法创建不同层次的地图。您可以通过说每个 100x100 像素块都是一个区域来自动化该过程。然后,对于每个块,我们需要找到相邻的块以及每个块的入口和出口在哪里。 如果两个块之间的连接多于一个节点,那么我们使用两个节点来表示问题。此图解释了我们正在尝试构建的新图表。 (黑色=障碍物,灰色是块之间的连接节点)。

该方法提供了良好的结果,从使用博德之门游戏中每个块为 10x10 的地图的执行中可以看出。

如需了解更多信息,请阅读 Nathan Sturtevant 的这篇文章(他是游戏领域最成功的寻路研究员之一)。https://skatgame.net/mburo/ps/path.pdf https://skatgame.net/mburo/ps/path.pdf

有关 HPA 的解释请查看 Sturtevant 的讲座(HPA 时间为 43:50)。https://www.youtube.com/watch?v=BVd5f66U4Rw https://www.youtube.com/watch?v=BVd5f66U4Rw

另外,如果您想了解 HPA* 的实际应用,请观看 Sturtevant 制作的这段视频:https://www.youtube.com/watch?v=l7YQ5_Nbifo https://www.youtube.com/watch?v=l7YQ5_Nbifo

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

大地图寻路 的相关文章

  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • Kafka - 如何同时使用过滤器和过滤器?

    我有一个 Kafka 流 它从一个主题获取数据 并且需要将该信息过滤到两个不同的主题 KStream
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 如何使用 Java Apache POI 隐藏 Excel 工作表中以下未使用的行?

    我正在使用数据库中的数据填充模板 Excel 工作表 for Map
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve

随机推荐

  • 通过Excel连接Oracle数据库

    我正在尝试从 Excel 工作表连接到我们服务器上的 Oracle 数据库 但无法理解原因 我目前有both32位和64位Oracle 12c安装在不同的位置ORACLE HOME并在我的 64 位计算机上安装了 32 位 Excel 我正
  • Prisma:如何找到与 id 列表匹配的所有元素?

    我将 Prisma 与 NextJs 一起使用 在我的 API 中 我向后端发送与数据库中对象 ID 相对应的数字列表 举个例子 如果我收到列表 1 2 12 我想返回 id 为 1 2 或 12 的对象 这是更复杂的查询的一部分 排序 计
  • Solr:多语言索引和多值字段的 DIH?

    我有一个 MySQL 表 CREATE TABLE documents id INT NOT NULL AUTO INCREMENT language code CHAR 2 tags CHAR 30 text TEXT PRIMARY K
  • WebDriverException:未知错误:Runtime.executionContextCreated 具有无效的“上下文”:初始化 Chrome 浏览器时

    我正在尝试开始使用 selenium 并下载了 chrome 驱动程序并将其放入我的类路径中 我现在只是想获得标题 看看是否可以让它发挥作用 目前代码如下所示 import org openqa selenium WebDriver imp
  • 动态模块什么时候会出现类型加载异常?

    我有一个动态模块 当我的应用程序运行时 它会添加类型 该模块是通过以下代码创建的 var assemblyName new AssemblyName MyAssembly var assemblyBuilder AppDomain Curr
  • 如何在 check 子句中使用 CURDATE()?

    我尝试创建一个表 其中 dateFrom 和 dateTo 字段需要高于今天的日期 所以我这样使用 CHECK CREATE TABLE Booking hotelNo int 10 guestNo int 10 dateFrom date
  • Python,使用多处理进一步加速 cython 函数

    此处显示的代码经过简化 但会触发相同的 PicklingError 我知道关于什么可以腌制和什么不能腌制有很多讨论 但我确实从他们那里找到了解决方案 我编写了一个简单的 cython 脚本 具有以下功能 def pow2 int a ret
  • 如何在xlwings中选择整个工作表

    我在用xlwings 我想复制整个wb1 sheets 1 并粘贴到wb sheets 1 A4细胞 目前我必须设置一个非常大的单元格Z100000 有没有通用的方法来选择整个工作表而不是不安全区域A1 Z10000 import xlwi
  • 使用 AES256 和 Node.js 解密长度超过 15 个字符的输入数据时出错

    我正在使用 Node js 的加密模块和 AES 256 CBC 密码算法编写自己的安全类 但是 当我尝试解密从长度超过 15 个字符的输入数据加密的加密字符串时 失败并出现以下错误 crypto js 153 var ret this h
  • 了解自制程序和仅小桶的依赖关系

    我最近开始使用自制软件 我对当我在我的系统上酿造某些东西时会发生什么感到有点困惑 但它的酿造依赖项是仅桶的 这意味着它们链接在 usr local 例如 我正在安装vips 图像处理库 它的众多依赖项之一是 pixman Pixman 仅作
  • 流程图 x 轴时间问题... AARGHHH

    我很难将数据显示在以 x 轴作为时间线的流程图中 这是我的 JSON 文件的缩写副本 label ServiceReport data 1328983200 53 1328986800 53 1328990400 60 我已按照 Flot
  • Vue 路由器可以在开发服务器上运行,但不能在 vercel vite 上运行

    我正在使用 vite 制作一个项目 该项目使用 vue router 4 它工作得很好 但是当查看 vercel 或 netlify 上的链接时 我收到 404 错误 这是我的 index js 文件 路由器设置 import create
  • group_by 返回重复的键

    Python 3 6 我有一个简单的对象列表 for obj in obj ts print obj address 这告诉我 mwpJCSEEkphA1utQGA2Y9Vx8cufv85CgpR mwpJCSEEkphA1utQGA2Y9
  • JFreeChart:如何使系列不可见?

    我正在尝试使 ohlc 柱形图不可见 以便我可以仅保留移动平均线的窗口 这是两个系列 ohlc 柱和移动平均线 的代码 private static JFreeChart createChart OHLCDataset dataset JF
  • 不同的背景图像和左面板错误

    我使用的是 jQuery mobile 1 4 如果单击左侧面板 我的背景就会消失 我在奥马尔的帮助下解决了这个错误 非常感谢 Aim 主页应该有深色背景 所有其他页面应该有浅色背景 问题一 如果我单击主页上的面板 它就会起作用 如果我转到
  • 如何在React中使用animejs?

    我已经从 npm 安装了animejs 并导入了所需的文件 但是当在我的代码中添加anime code 时 它无法正常工作并显示错误 这是我所做的一个小例子 import React from react import anime from
  • Python message.content 不和谐机器人

    我正在努力让我的discord py当有人发送一些单词时 机器人会自动响应 但问题是该命令仅在该单词是句子中首先写入的情况下才有效 我希望我的机器人能够响应该消息 即使该单词位于某个句子的中间 如果这是可能的 我该怎么做 以下示例将执行您想
  • iOS 支持哪些字体格式?

    我想知道iOS支持哪些字体格式 我已经知道iOS支持TTF格式 它是否支持任何其他功能 例如 PFM 或 PMB 从 iOS 7 开始 支持 TTF 和 OTF 字体格式 您可以在应用程序中或通过配置文件分发这些字体 以使它们在系统范围内可
  • 如何将 boost::bind 与不可复制的参数一起使用,例如 boost::promise?

    某些 C 对象没有复制构造函数 但有移动构造函数 例如 boost promise 如何使用它们的移动构造函数绑定这些对象 include
  • 大地图寻路

    我正在创建一个带有 10 000 x 10 000 地图的游戏 我希望用户能够设置位置并让计算机立即找到最佳路径 然而 由于地图是10 000 x 10 000 有100 000 000个节点 并且通过诸如A 或Dijkstra之类的传统方