使用 A* JPS 进行 3D 搜索

2024-03-17

我该如何概括跳转点搜索 http://harablog.wordpress.com/2011/09/07/jump-point-search/3D 搜索量?

到目前为止,我已经定义了涉及三个运动的 3D 立方体的修剪规则 - 直线 (0,0,1)、一阶对角线 (0,1,1) 和二阶 (1,1,1) 。

我最关心的是中定义的最佳转折点paper http://users.cecs.anu.edu.au/~dharabor/data/papers/harabor-grastien-aaai11.pdf。我无法确切地确定它们是如何导出的,因此也无法确定如何导出我自己的三维空间。

关于如何做到这一点有什么建议吗?


它不是试图导出转折点,而是有助于使用对二维算法的直观理解。

因为两个位置之间的最短距离是直线,所以我们知道对角线移动速度最快,因为它相当于two一维步骤。在 3D 中,这意味着对角线相当于three脚步。 (实际上,这些值是sqrt(2) and sqrt(3))。有了这个,我们选择通过移动来优化尽可能多的轴... 转动沿 2D 轴移动比转动沿 3D 轴移动更糟糕。同样,沿一维(直线)移动是均匀的worse比 2D 运动。这是跳转点的核心假设.

在剔除算法中,假设如果您在最不理想的轴 (1D) 上跳跃,则不存在更高轴阶的最佳转弯(转向 2D 轴),直到在最不理想的轴 (1D) 上出现平行墙。相同的轴顺序。例如,看看图2(d) http://users.cecs.anu.edu.au/~dharabor/data/papers/harabor-grastien-aaai11.pdf,其中代码看到一维平行墙,并将 2D 运动添加回列表中。

作为启发式

向前求值,直到有一个空位(并且距离墙有 2 个空位),并将这一点添加到跳转列表中。对于跳转列表上的任意点,向新方向跳转。目标 > 2D 向前移动 > 1D 向前移动 > 1D 向后移动 > 2D 向后移动。我们可以将这个启发式推广到任何 n 维......

评估下一个方向,其中 + 指向目标,n 是增加的维度数量,给出了方程...... +nD > +n-1D > ... +1D > 0D > -1D > ... > -n-1D>-nD

3D 中最佳->最差转折点的顺序

  1. 3D+ = [1, 1, 1]
  2. 2D+ = [1, 1, 0], [1, 0, 1], [0, 1, 1]
  3. 1D+ = [1, 0, 0], [0, 1, 0], [0, 0, 1], [-1, 1, 1], [1, -1, 1], [1, 1, - 1]

(下面的次优;[0, 0, 0] 没用,所以我没有包括它)

  1. 0D = [1, -1, 0], [1, 0, -1], [-1, 1, 0], [-1, 0, 1], [0, -1, 1], [0, 1, -1]
  2. 1D- = [-1, 0, 0], [0, -1, 0], [0, 0, -1], [-1, -1, 1], [1, -1, -1], [-1, 1, -1]
  3. 2D- = [-1, -1, 0], [-1, 0, -1], [0, -1, -1]
  4. 3D- = [-1, -1, -1]

phew打字很痛苦,但它应该可以解决你的问题。

请记住,当您“跳跃”时,请记住您跳跃的轴顺序;你需要找到平行的墙同一轴。因此,沿 [1, 0, 1] 方向移动,您需要找到位于 [1, 1, 0] 和 [0, 1, 1] 处的墙壁,以便“解锁” [ 方向上的跳跃点1, 1, 1]。

按照相同的逻辑,如果在一维 [1, 0, 0] 中移动,则检查 [0, 1, 0] 中是否有墙,以添加 [0, 1, 1] 和 [1, 1, 0]。您还可以检查 [0, 0, 1] 以添加 [1, 0, 1] 和 [0, 1, 1] 作为跳转点。

希望你明白我的意思,因为它是really很难想象和计算,但一旦掌握了数学知识就很容易掌握。

结论

使用 A* 启发式...

  • Dijkstra = 距起点的距离
  • 贪心第一 = 距目标的距离

然后添加我们的新启发式!

  • +nD > +n-1D > ... +1D > -1D > ... > -n-1D>-nD
  • 如果有任何一点nD有平行​​障碍物,可以为每个空位添加一个跳跃点n+1D方向。

编辑: 代码的“并行”定义

  • 与您移动方向顺序相同的任何点
  • 不是该方向的下一个点
  • 与下一个点具有相同数量的正向和负向维度移动(例如,[1, 1, -1] 平行于 [1, -1, 1] 和 [-1, 1, 1],但是not到 [1, 0, 0]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 A* JPS 进行 3D 搜索 的相关文章

随机推荐

  • 如何在责任链中注入下一个处理程序的依赖关系?

    在我当前的项目中 我使用了相当多的责任链模式 然而 我发现通过依赖注入配置链有点尴尬 给定这个模型 public interface IChainOfResponsibility IChainOfResponsibility Next ge
  • 是否有准备好搜索文本框上的“清除”按钮?

    我想在应用程序的搜索文本框中添加一个清除按钮 是否有现成的 Ajax 扩展器或 JQuery 功能来实现它 提前致谢 没有任何现成的东西 但是很容易创建这样的东西 不需要额外的 HTML 一些 CSSmagic和 jQuery 来绑定事件
  • 如何在 Netbeans 中重新排序自动生成的方法?

    例如 当使用 Netbeans 的功能从 GUI 生成事件处理程序时 虽然生成的方法的主体是可编辑的 但我找不到更改类代码中生成的方法的顺序的方法 生成的代码不允许进行剪切和粘贴 我该怎么做呢 非常感谢 在 Netbeans 中您无法做到这
  • 如何验证 Laravel 5.4 单选按钮?

    如何在 Laravel 5 4 中验证我的单选按钮 div class radio div
  • 如何通过代理通过 POP 或 IMAP 获取电子邮件?

    poplib 或 imaplib 似乎都不提供代理支持 尽管我尝试了 google fu 但我找不到太多有关它的信息 我正在使用 python 从各种支持 imap pop 的服务器获取电子邮件 并且需要能够通过代理来完成此操作 理想情况下
  • 如何在Django中从html或js访问环境变量

    这里使用设置环境变量 os environ setdefault DJANGO SETTINGS MODULE myapp settings 我想在 UI 中显示一些值 有什么方法可以从中访问值DJANGO SETTINGS MODULE
  • Laravel 查询构建器返回对象还是数组?

    我正在使用 Laravel 构建一个非常简单的网络应用程序 我构建了两个单独的控制器 每个控制器返回两个单独的视图 如下所示 配置文件控制器 class ProfileController extends BaseController pu
  • 条件查询(搜索表单)的性能注意事项

    我经常发现存储过程的代码如下 SELECT columns FROM table source WHERE Param1 IS NULL OR Column1 LIKE Param1 AND Param2 IS NULL OR Column
  • 在 switch case 语句中使用方法

    我想知道在 switch 情况下是否可以使用 contains 等方法 我正在尝试将以下 if 语句放入 switch case 中 String sentence if sentence contains abcd do command
  • 负数组索引

    我有一个指针 定义如下 A b 按如下方式访问它会做什么 A c b 1 是否因为我们对数组使用负索引而导致访问冲突 或者是类似的合法操作 b EDIT请注意 负数组索引在 C 和 C 中具有不同的支持 因此 this https stac
  • 与 virtualenvs 和 Python 包的混淆

    在我的 python 程序中 使用 python3 5 由 virtualenv 运行 我需要使用 Pillow 库来处理图像 导入错误 没有名为 Pillow 的模块 告诉我 Pillow 没有安装在 virtualenv 中 但是 当我
  • Python的hashlib.sha256(x).hexdigest()相当于Rs摘要(x,algo =“sha256”)

    我不是Python程序员 但我正在尝试将一些Python代码转换为R 我遇到问题的Python代码是 hashlib sha256 x hexdigest 我对此代码的解释是 该函数将使用 sha256 算法计算 x 的哈希值并返回十六进制
  • 在 Dataflow Python flex 模板中包含另一个文件 ImportError

    是否有一个包含多个文件的 Python Dataflow Flex 模板示例 其中脚本导入同一文件夹中包含的其他文件 我的项目结构是这样的 pipeline init py main py setup py custom py 我正在尝试将
  • 按代码排序列表,然后按名称排序

    我有一个对象列表 我通过编写以下行按代码对此列表进行排序 Result Sort delegate Position p1 Position p2 return p1 Code CompareTo p2 Code 但我想首先按代码排序此行
  • @InjectMocks 之后为空

    在使用 JUnit 进行单元测试时 我在传递依赖项时遇到了一些麻烦 考虑这些代码 这是对我想要测试的类的依赖注入 我们称之为控制器 Inject private FastPowering fastPowering 这是单元测试 RunWit
  • 将gradle多项目转换为springboot fat jar应用

    我有一个 http servlet 应用程序多项目分级构建 我的项目是一个包含gradleHttpServlet 项目它依赖于其他两个 gradle java 项目 我将所有 3 个 jar 部署在tomcat webapps Web IN
  • toDataURL HTML5 获取画布数据的其他方式存在问题?

    我正在使用画布预先绘制图片 然后需要使用 Canvas toDataURL 将其保存到图像对象 但在 Chrome 上 我收到错误 未捕获的安全错误 无法在 HTMLCanvasElement 上执行 toDataURL 受污染的画布可能不
  • 我正在使用依赖注入:我应该将哪些类型绑定为单例?

    关于单例是否 不好 以及应该使用什么模式存在很多问题 他们通常关注单例设计模式 其中涉及从类的静态方法中检索单例实例 这不是这些问题之一 自从几个月前我真正 发现 依赖注入以来 我一直在推动它在我们团队中的采用 随着时间的推移从我们的代码中
  • read.csv() - 三列中的两列[重复]

    这个问题在这里已经有答案了 可能的重复 只读取 R 中有限数量的列 https stackoverflow com questions 5788117 only read limited number of columns in r 我有一
  • 使用 A* JPS 进行 3D 搜索

    我该如何概括跳转点搜索 http harablog wordpress com 2011 09 07 jump point search 3D 搜索量 到目前为止 我已经定义了涉及三个运动的 3D 立方体的修剪规则 直线 0 0 1 一阶对