如何使用A*算法找到最佳的3条路线

2023-12-08

在 A* 中,通常您得到的结果只是一条路径。对于给定的出发地和目的地,是否有可能根据 A* 有 3 条推荐路径?所以第二个返回的是第二最佳路径,第三个返回的是第三最佳路径。

我正在考虑也许以某种方式修改启发式以反映第二和第三最佳路径。你们觉得怎么样?

UPDATE:我的实现是用 PHP 实现的,并且使用的是封闭集。因此,如果有办法做到这一点,请告诉我。


如果您的语言支持回溯/生成器/迭代器/协程,那么这可以很容易地完成。

# Python code
def astar(start):
    q = [start]    # priority queue
    while len(q) > 0:
        node = heappop(q)
        if isGoal(node):
            yield node
        for x in successors(node):
            heappush(q, x)

The yield关键字类似于return,除了该函数可以在yield以获得下一个解决方案。为了获得最好的三名:

solutions = []
i = 0
for sol in astar(start):
    solutions.append(sol)
    if i == 3:
        break
    i += 1

However,如果您使用闭集 (i.e., 罗素和诺维格's 图搜索算法),这样在搜索最优解时,部分非最优解可能会被“切断”。

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

如何使用A*算法找到最佳的3条路线 的相关文章

  • Python 给定 k 个分区的整数分区

    我正在尝试寻找或开发Python 的整数分区代码 仅供参考 整数分区将给定整数 n 表示为小于 n 的整数之和 例如 整数5可以表示为4 1 3 2 3 1 1 2 2 1 2 1 1 1 1 1 1 1 1 我为此找到了许多解决方案 ht
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组
  • 快速搜索压缩文本文件

    我需要能够在大量压缩文件 txt 中搜索文本 压缩可能会改变为其他东西 甚至成为专有的 我想避免解压所有文件并压缩 编码 搜索字符串并在压缩文件中搜索 这应该可以通过对所有文件使用相同的码本使用霍夫曼压缩来实现 我不想重新发明轮子 所以 任
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an
  • 两组点之间的最佳匹配

    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 我的任务是找到它们点之间的最佳匹配 以最小化它

随机推荐

  • 通过API调用删除FB相册

    我用谷歌搜索了一下 也在这里查看了一些相关的问题 但没有找到答案 有没有办法通过 Graph API 调用从 FB 删除相册 我正在做DELETE请求https graph facebook com ALBUM ID具有相应的访问令牌 但它
  • PostgreSQL 函数返回多个结果集

    是否可以从 Postgres 函数返回多个结果集 就像在 MSSQL 中一样 CREATE PROCEDURE test AS SELECT FROM first table SELECT FROM second table 从多个查询返回
  • 如何在 Azure 上部署 NextJs SSR React 应用程序

    我一直在尝试在 Azure 上部署使用 NextJS 构建的服务器端渲染的 React 应用程序 我设置了 Azure 管道并成功发布 但运行后 当我访问 azure 网站 URL 时 应用程序似乎没有加载 构建文件内容与客户端渲染的应用程
  • Python - 任何检查数字 0 或 False 的方法

    如果我将一个变量设置为 False 它会被读取为等于 0 有什么方法可以检查变量是否确实为 False 或者是否为数字 0 就像是 Spam False if Spam False and not Spam 0 do something 我
  • 无法启动 jupyter 笔记本:TypeError

    运行命令时jupyter notebook 我收到以下错误 Traceback most recent call last File usr local bin jupyter notebook line 6 in
  • R 中奇怪的 POSIXct 函数行为

    我正在 R 中使用 POSIXct 数据类型 在我的工作中 我合并了一个函数 该函数在向量中返回两个 POSIXct 日期 然而 我发现了一些意想不到的行为 我写了一些示例代码来说明我的问题 POSIXct returning issue
  • kerberized apache phoenix 的 node.js 和 npm jdbc 包问题

    我正在使用nodejs和npm jdbc包连接到hortonworks上的kerberized Apache phoenix 我能够使用nodejs和jdbc包连接到非kerberized phoenix 但面对下面的kerberos身份验
  • 在servlet中搜索代码到mysql?

    什么是在servlet中搜索代码到mysql 我需要简单的编码任何人都可以帮助我 我使用 Html 创建了一个注册页面 姓名 资格 国家 州 并在 mysql 中创建了一个注册表 然后我创建了servlet页面来获取从用户到数据库的值 该值
  • 使用 python -m pip install --upgrade pip 的 pip 升级问题

    最近 我一直在尝试使用以下命令升级我的 pip python m pip install upgrade pip 流程如下 Downloading pip 21 0 1 py3 none any whl 1 5 MB 1 5 MB 1 7
  • 如何让 Twitter-Bootstrap 导航显示活动链接?

    我不明白 Twitter Bootstrap 如何为导航提供活动链接 如果我有这样的常规导航 使用 ruby on Rails 链接 ul class nav li class active a href link Link a li li
  • 类型错误:“bytearray”对象无法解释为整数

    我想通过 HTTP 发送音频数据 但我不明白为什么会出现此异常 Exception happened during processing of request from 127 0 0 1 59976 Traceback most rece
  • 用于更新卡片上封面颜色的 Python Trello API

    Trello 增加了在单个卡片上放置 封面 的功能 这可以是纯色或图像 根据他们的 API 您应该能够通过 PUT 请求更新它 看here其中讨论了更新卡片 并包括 封面 该卡包含许多数据项 json 例如 desc 旧的描述 覆盖 亮度
  • 如何杀死runtime.exec?

    我在 jframe 中使用下面的代码 以便通过 java 程序执行 shell 脚本 但是当我实现其他方法来停止运行进程时 该方法首先被 th 阻止 我无法停止我的程序 所以我必须杀死新进程 问题是如何获取进程的pid以及如何将其放在后台
  • Silverlight tabchanged 事件 - tabcontrol

    我正在使用选项卡控件 并且我想处理 tabchanged 事件 我试图使用SelectionChanged没有运气的事件 它被触发太多次 加载选项卡控件或添加新选项卡后 我想仅当用户在选项卡之间导航时处理此事件 我找到了 WPF 的解决方案
  • VS2013 的开发者命令提示符在哪里?

    我需要从 Visual Studio 2013 中的开发人员命令提示符运行 web exe 文件 默认情况下 Visual Studio 2013 中未安装命令提示符 以前 我使用的是 Visual Studio 2012 它默认安装了开发
  • 迭代多个选择/文件夹项目

    我看了一眼MailItem并且没有看到任何表明我可以移动所选项目的信息 我有可以运行的代码 但是Set objItem GetCurrentItem 线路只接收一封邮件 我正在寻找ForEach通过文件夹 或者ForEach通过选择 我尝试
  • ClassCastException DataSource 无法转换为 javax.sql.ConnectionPoolDataSource

    我收到这个异常 java lang ClassCastException org apache tomcat jdbc pool DataSource cannot be cast to javax sql ConnectionPoolDa
  • 为什么使用“git rm”而不是“rm”来删除文件?

    在 SVN 上 直接从文件系统中删除某些内容 而不是使用 svn 会带来很多麻烦 我在使用时没有发现这是一个问题git 但我注意到 git 有它自己的rm执行 git rm 有什么区别rm and git rm 如果你只是使用rm 你需要跟
  • 画布宽度和高度均为 100% 时质量较差

    我用画布做了一个非常小的例子 它可以在JsFiddle http jsfiddle net yPtr5
  • 如何使用A*算法找到最佳的3条路线

    在 A 中 通常您得到的结果只是一条路径 对于给定的出发地和目的地 是否有可能根据 A 有 3 条推荐路径 所以第二个返回的是第二最佳路径 第三个返回的是第三最佳路径 我正在考虑也许以某种方式修改启发式以反映第二和第三最佳路径 你们觉得怎么