当前位置: 首页 > news >正文

BIT*算法

BIT*(Batch Informed Trees)算法是一种基于采样的最优路径规划算法,结合了 批量采样椭圆约束启发式剪枝 策略,能高效找到起点到目标的最优路径。其核心流程可分为 初始化批量采样与扩展路径验证与更新剪枝优化 四个阶段,具体步骤如下:

一、初始化阶段

  1. 参数与数据结构初始化

    • 定义起点(start)和目标(goal)节点,计算起点到目标的直线距离 c_min(理论最短路径下界)。
    • 初始化路径树(Tree),包含:
      • vertices:已验证的有效顶点集合(初始仅含起点 start)。
      • edges:已验证的有效边集合(初始为空)。
      • queue_vertices:待验证顶点队列(初始含起点 start)。
      • queue_edges:待验证边队列(初始为空)。
    • 初始化代价字典 g_t:记录每个节点的实际路径代价(起点代价为 0,目标及其他节点初始为 np.inf)。
    • 初始化采样集 x_sample:存储所有候选采样点(初始可包含起点)。
  2. 初始路径判断

    • 检查起点到目标的直线路径是否无碰撞(path_through_obstacle)。若直接可达,则目标代价 g_t[goal] 设为该直线距离,算法可提前终止。

二、批量采样与扩展阶段

循环执行 “批量采样→生成待验证边→筛选有效边”,直到找到目标路径或满足终止条件:

  1. 批量采样(椭圆约束内)

    • 根据当前已知的最优路径代价 c_max(初始为 np.inf,找到路径后更新为实际代价),在 椭圆区域 内采样 num_samples 个点(默认 100 个)。
      • 椭圆定义:以起点和目标为焦点,长轴 a = c_max/2,短轴 b = √(a² - (c_min/2)²),确保采样点集中在可能改进路径的区域。
    • 采样过程:通过 “单位圆采样→缩放→旋转→平移” 生成椭圆内的点(rand),封装为 Node 对象,加入采样集 x_sample
  2. 从待验证顶点生成边

    • queue_vertices 中选择 代价最小的顶点 v(通过 best_in_queue_vertex,代价为 g_hat(v) + h_hat(v))。
    • 对采样集 x_sample 中的每个点 w,生成边 (v, w),并通过以下条件筛选后加入 queue_edges
      • (v, w) 未在 edges 中(去重)。
      • 理论总代价(g_hat(v) + 欧氏距离(v,w) + h_hat(w))< c_max(有全局改进潜力)。
      • 局部代价(g_t[v] + 欧氏距离(v,w))< w 的当前代价(有局部优势)。

三、路径验证与更新阶段

  1. 验证待验证边

    • queue_edges 中选择 代价最小的边 (v, w)(通过 best_queue_edge_value,代价为 g_t[v] + 欧氏距离(v,w) + h_hat(w))。
    • 验证边的有效性:
      • 检查 vw 的路径是否无碰撞(path_through_obstacle)。
      • 检查是否能改进路径:
        1. 快速筛选:g_t[v] + 欧氏距离(v,w) + h_hat(w) < c_max
        2. 严格验证:g_hat(v) + 实际代价(v,w) + h_hat(w) < c_max(实际代价含碰撞检测)。
  2. 更新路径树与代价

    • 若边 (v, w) 有效,且通过 v 到达 w 的代价(g_t[v] + 实际代价(v,w))小于 w 的当前代价 g_t[w]
      • 更新 g_t[w] = g_t[v] + 实际代价(v,w),设置 w 的父节点为 v
      • w 加入 vertices,边 (v, w) 加入 edges
      • w 是目标节点,更新 c_max = g_t[w](当前最优路径代价)。
    • w 加入 queue_vertices(作为新的待扩展顶点)。

四、剪枝优化阶段

每次找到更优路径(c_max 减小)后,执行剪枝(prune 函数),移除冗余元素:

  • x_sampleverticesedges 中删除所有 总启发式代价 ≥ c_max 的节点和边(它们不可能改进当前最优路径)。
  • 将代价为 np.inf(不可达)的顶点从 vertices 移回 x_sample(留待后续可能利用)。

五、终止条件

  • 找到目标节点且验证路径有效,返回通过 backtrack 函数回溯的最优路径(从目标节点沿父节点追溯到起点)。
  • 达到最大迭代次数或采样点数,未找到路径则返回失败。
http://www.dtcms.com/a/446291.html

相关文章:

  • Python常用三方模块——psutil
  • 网站开发的优势建设京东物流网站的目标是什么
  • 制作网站详细步骤爱客crm系统登录
  • Linux事件循环——高效处理多任务(高并发)
  • 【Linux】POSIX信号量、环形队列、基于环形队列实现生产者消费者模型
  • SELinux系列专题(一):SELinux是什么?
  • 三角函数公式全归纳
  • 热 动漫-网站正在建设中-手机版wordpress活动报名
  • 建设银行扬中网站织梦网站仿站
  • 网站建设公司伟置鄂尔多斯 网站制作
  • Hi3516DV500/HI3519DV500开发笔记之例程编译和测试
  • 路由策略与路由控制实验
  • Leetcode 84. 柱状图中最大的矩形 单调栈
  • 专门用来制作网页的软件是河南网站关键词优化
  • 什么是企业网站策划案企业网站空间买虚拟主机
  • 高并发场景下API网关的熔断策略:Hystrix与Sentinel的对比测试
  • llama.cpp Flash Attention 论文与实现深度对比分析
  • Python 3 与 MongoDB 的集成指南
  • 网站生成手机端wordpress高亮插件
  • 基础动态规划问题
  • js多久可以做网站网站建设后帐号密码
  • 第十五篇:Python高效调试与性能优化技巧
  • leetcode 66.加一 python
  • 书生浦语实战营L1-G4000探索大模型能力边界
  • Prometheus 05-02: 告警规则与Alertmanager配置
  • 工信部申诉备案网站免费关键词优化工具
  • RabbitMQ-死信交换机(延时队列)
  • 建网站源码建站详解中国工商建设标准化协会网站
  • phpcms仿站教程it教育培训机构
  • 事务所网站制作方案加盟代理好项目农村