news 2026/8/28 1:28:52

PRM概率路图法:高维空间路径规划的核心算法与工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PRM概率路图法:高维空间路径规划的核心算法与工程实践

1. 项目概述:从“走迷宫”到“画地图”的思维跃迁

在机器人、自动驾驶、无人机航迹规划乃至游戏AI寻路这些领域,一个核心且经典的问题始终横亘在我们面前:如何让一个智能体在充满障碍物的复杂环境中,找到一条从起点到终点的安全、高效路径?这个问题听起来简单,就像我们小时候玩的走迷宫游戏,但一旦环境从二维图纸变成三维空间,障碍物从静态墙壁变成动态车辆,问题复杂度便呈指数级增长。传统的搜索算法,如A*(A-Star),在已知的、结构化的网格地图上表现优异,但面对连续、高维、非结构化的“配置空间”(Configuration Space)时,往往力不从心,计算量会变得极其庞大。

这时,一种被称为“概率路图法”(Probabilistic Roadmap Method, PRM)的采样规划算法,就像一位善于“先测绘,后导航”的探险家,为我们提供了一种截然不同的解题思路。它不执着于在庞杂的连续空间里一寸一寸地搜索,而是聪明地采用“撒点采样-局部连接-全局查询”的三段式策略。简单来说,PRM算法的核心思想是:与其在迷宫里盲目乱撞,不如先随机在迷宫(配置空间)里扔下许多“路标点”(采样点),然后尝试在这些路标点之间修建一些短而安全的“小路”(局部规划器连接),最终将这些小路连接成一张覆盖迷宫的可通行“路网”(Roadmap)。当我们需要从A点走到B点时,只需将A、B两点临时接入这张路网,然后在这张现成的、离散化的网络上,用经典的图搜索算法(如Dijkstra或A*)快速找到路径即可。

我最初接触PRM是在参与一个机械臂避障规划项目时,当时环境点云数据噪点多,障碍物形状不规则,直接用基于网格的搜索要么内存爆炸,要么规划失败。在尝试了多种方法后,PRM以其对高维空间的良好适应性和“预处理-查询”分离的高效性,成为了我们的最终选择。它特别适合解决“多查询”(Multiple-Query)问题,即环境固定不变,但需要为不同的起止点多次规划路径的场景,比如仓库中AGV小车的调度、机械臂对不同工件的抓取序列规划等。

2. PRM算法核心原理与设计思路拆解

PRM算法之所以强大,在于它将一个连续的、复杂的路径规划问题,巧妙地分解为两个相对独立的阶段:学习阶段(Learning Phase)和查询阶段(Query Phase)。这种“分而治之”的思想,是其高效处理高维空间问题的关键。

2.1 学习阶段:构建静态路网

学习阶段是PRM的“基建”过程,目标是构建一张覆盖自由空间(无碰撞区域)的路网图G=(V, E)。这个过程完全独立于具体的路径查询任务,可以离线进行,从而将耗时的计算提前完成。

1. 随机采样(Sampling):这是整个算法的起点,也是影响路网质量最关键的一步。最简单的策略是在整个配置空间内均匀随机采样。但这样效率很低,很多点会落在障碍物内部(无效点)或狭窄通道附近(难以连接的点)。因此,实践中发展出了多种启发式采样策略:

  • 均匀随机采样:基础方法,实现简单,但在狭窄通道处采样概率低。
  • 高斯采样:在以障碍物边界为中心的高斯分布中采样,能提高在障碍物附近(即通道入口处)的采样密度,有助于发现狭窄通道。
  • 桥测试采样:专门针对狭窄通道设计。先随机采样一个大概率在障碍物内的点q1,然后在其附近再采样一个点q2,如果q1碰撞而q2自由,则取它们的中点q_m作为候选。若q_m也自由,则它很可能位于连接两个自由区域的“桥”(即狭窄通道)上,将其加入路网。
  • 障碍物边界采样:直接在障碍物表面附近采样,对于抓取、装配等需要贴近障碍物运动的场景特别有效。

实操心得:采样策略的选择没有银弹。在项目初期,我通常先用“均匀随机采样+高斯采样”的混合策略快速验证算法框架。当遇到特定瓶颈,如机械臂需要通过一个很窄的窗口时,才会引入“桥测试”这类针对性策略。采样点的数量也需要权衡,太少则路网连通性差,太多则构建和查询效率下降。一个实用的技巧是设置一个最大采样次数(如10000次),并监控自由点数量,当其增长趋于平缓时即可停止。

2. 邻居查找与局部连接(Neighbor Finding & Local Planning):对于每一个新采样的自由点q_new,我们需要将其连接到路网中已有的点上。不是连接所有点,那样会导致边数爆炸(O(n²))。通常的做法是:

  • 定义邻居:q_new为圆心,设定一个连接半径r,所有落在该半径球体内的已有路图点,都被视为q_new的邻居。或者,更高效的方法是只连接距离q_new最近的k个点(K近邻)。
  • 尝试连接:对于每一个邻居点q_near,调用一个局部规划器(Local Planner)来尝试生成一条从q_nearq_new的路径。最常用的局部规划器就是简单的直线连接器(Straight-Line Planner),它会在两点连线上进行密集的碰撞检测。如果整条线段都处于自由空间,则认为连接是安全的,便在q_nearq_new之间添加一条边。

3. 碰撞检测(Collision Checking):这是PRM算法中计算开销最大的部分,贯穿于采样点验证和局部连接测试。高效的碰撞检测库(如FCL, Bullet)至关重要。在学术原型或数学建模中,我们常将障碍物简化为几何形体(球体、长方体、圆柱体)的集合,通过计算几何关系(如点与多边形的包含关系、线段与多边形的相交测试)来判断。对于机器人,还需要考虑其连杆本身的体积,这通常通过计算其包络体(Bounding Volume)与障碍物的干涉来判断。

注意事项:碰撞检测的精度与速度是一对矛盾。在数学建模竞赛或算法验证初期,可以使用相对粗糙的包围盒进行快速检测,先保证算法逻辑正确。在工程部署时,则需要根据机器人的安全裕度(Safety Margin)和实时性要求,选择合适的检测粒度。一个常见的坑是忽略了机器人的姿态,对于机械臂,同一个坐标点,不同的关节角度可能意味着碰撞或自由,必须进行完整的运动学正解和包络体计算。

2.2 查询阶段:在路网上快速寻路

当路网G构建完成后,查询阶段就变得非常高效。对于任意给定的起点q_start和终点q_goal

  1. 接入路网:q_startq_goal作为临时节点,尝试用同样的局部规划器(如直线连接)将它们连接到路网G中最近的若干个邻居节点上。如果连接失败,可能需要返回学习阶段,在起点/终点附近增加采样密度,或提示用户此路不通。
  2. 图搜索:一旦起点和终点成功接入路网,原始的连续空间路径规划问题,就转化为了在离散图G上寻找从q_startq_goal的最短路径问题。这时,我们可以轻松应用成熟的图搜索算法,如:
    • Dijkstra算法:保证找到最短路径(以边长为权重),适用于对路径最优性要求高的场景。
    • A*算法:在Dijkstra的基础上加入启发式函数(如欧氏距离),能显著加快搜索速度,是更常用的选择。
  3. 路径平滑(可选):由于PRM路径是由一系列采样点和直线段组成的,路径可能显得“锯齿状”不够平滑。后处理时,可以采用诸如“捷径”(Shortcut)或“样条插值”(Spline Interpolation)的方法对路径进行平滑,使其更符合机器人的运动动力学。

3. 算法实现细节与关键参数剖析

理解了原理,我们来看看如何动手实现一个基础的PRM规划器。这里我将结合Python伪代码和关键参数讨论,你可以很容易地将其移植到MATLAB、C++等任何你熟悉的建模语言中。

3.1 数据结构定义

首先,我们需要定义核心的数据结构。

import numpy as np import networkx as nx from scipy.spatial import KDTree import matplotlib.pyplot as plt class PRMPlanner: def __init__(self, space_dim=2, collision_checker=None): self.space_dim = space_dim # 配置空间维度,如二维平面是2,机械臂关节空间是n self.collision_checker = collision_checker # 碰撞检测函数 self.roadmap = nx.Graph() # 使用NetworkX库存储路网图 self.kdtree = None # 用于快速最近邻搜索的KD树 self.samples = [] # 存储所有自由采样点的列表

3.2 学习阶段实现

关键参数解析:

  • n_samples: 计划采样的总点数。并非所有点都是自由的,实际自由点会少于它。
  • connection_radius: 连接半径r。太大则连接尝试多、计算慢,且可能试图穿越障碍物;太小则图连通性差。一个经验法则是r ∝ (log(n)/n)^(1/d),其中d是空间维度。实践中常通过实验调整。
  • k_neighbors: 近邻数量k。与连接半径二选一,我更喜欢用K近邻,因为它能保证每个点至少尝试连接k次,避免在稀疏区域被孤立。
def build_roadmap(self, n_samples=1000, k_neighbors=10): """构建PRM路网""" self.samples = [] for _ in range(n_samples): # 1. 采样 q_rand = self._random_sample() # 2. 碰撞检测 if not self.collision_checker(q_rand): self.samples.append(q_rand) # 3. 寻找近邻 (使用KD树加速) if len(self.samples) > 1: # 构建或更新KD树 if self.kdtree is None: self.kdtree = KDTree(self.samples[:-1]) # 不包括刚加入的点本身 else: # 增量更新KD树效率较低,这里为简化,每次重建。工程中需优化。 self.kdtree = KDTree(self.samples[:-1]) # 查找k个最近邻(距离第二近的开始,因为最近的是自己?这里需注意索引) # 更稳妥的做法:对所有已有样本点计算距离,取前k个(排除自身) distances, indices = self.kdtree.query(q_rand, k=min(k_neighbors, len(self.samples)-1)) # 4. 尝试连接 for idx in indices: q_near = self.samples[idx] if self._local_planner(q_near, q_rand): # 添加节点和边,权重可以是欧氏距离 dist = np.linalg.norm(q_near - q_rand) self.roadmap.add_edge(tuple(q_near), tuple(q_rand), weight=dist) print(f"路网构建完成。自由采样点: {len(self.samples)}, 边数: {self.roadmap.number_of_edges()}") def _random_sample(self): """在配置空间边界内均匀随机采样""" # 假设空间边界为 [0,1]^d return np.random.rand(self.space_dim) def _local_planner(self, q1, q2, resolution=50): """简单的直线局部规划器""" for i in range(resolution + 1): t = i / resolution q_interp = (1 - t) * q1 + t * q2 # 线性插值 if self.collision_checker(q_interp): return False # 中途碰撞 return True # 路径安全

实操心得:connection_radiusk_neighbors的调参是个经验活。我的建议是:先固定k_neighbors(如10-15),再调整采样数量n_samples。观察路网的连通性(是否有很多孤立的小簇?)和边数。如果路网不连通,优先增加n_samples;如果连通但搜索路径绕远,可以适当增大k_neighbors或引入更智能的采样策略。KDTree对于加速近邻搜索至关重要,但在动态添加点时,重建整个树开销大。工程实现中可以考虑使用scipy.spatial.cKDTree并谨慎管理增量更新,或使用球树(Ball Tree)等结构。

3.3 查询阶段与路径平滑实现

def query(self, start, goal, smoothing=True): """查询从起点到终点的路径""" path = [] # 1. 将起点和终点接入路网 start_neighbors = self._connect_to_roadmap(start) goal_neighbors = self._connect_to_roadmap(goal) if not start_neighbors or not goal_neighbors: print("错误:起点或终点无法连接到路网!") return path # 为搜索临时添加节点和边 temp_graph = self.roadmap.copy() temp_graph.add_node('start') temp_graph.add_node('goal') for n in start_neighbors: dist = np.linalg.norm(start - np.array(n)) temp_graph.add_edge('start', n, weight=dist) for n in goal_neighbors: dist = np.linalg.norm(goal - np.array(n)) temp_graph.add_edge('goal', n, weight=dist) # 2. 使用Dijkstra算法搜索最短路径 try: node_path = nx.shortest_path(temp_graph, source='start', target='goal', weight='weight') # 将节点名转换回坐标 for node in node_path: if node == 'start': path.append(start) elif node == 'goal': path.append(goal) else: path.append(np.array(node)) except nx.NetworkXNoPath: print("警告:在路网中未找到路径!") return [] # 3. 路径平滑(捷径法) if smoothing and len(path) > 2: path = self._shortcut_smoothing(path) return np.array(path) def _connect_to_roadmap(self, q, max_attempts=20): """尝试将点q连接到路网的最近邻居""" if not self.samples: return [] # 使用KD树找最近邻 distances, indices = self.kdtree.query(q, k=min(max_attempts, len(self.samples))) neighbors = [] for idx in indices: q_near = self.samples[idx] if self._local_planner(q, q_near): neighbors.append(tuple(q_near)) return neighbors def _shortcut_smoothing(self, path, iterations=100): """简单的路径平滑:随机尝试连接非相邻节点以缩短路径""" smoothed_path = path.tolist() for _ in range(iterations): if len(smoothed_path) <= 2: break # 随机选择两个不相邻的索引 i, j = np.sort(np.random.choice(len(smoothed_path), 2, replace=False)) if j - i > 1: # 确保不是相邻点 q1 = np.array(smoothed_path[i]) q2 = np.array(smoothed_path[j]) if self._local_planner(q1, q2): # 如果直接连接安全,则删除中间点 del smoothed_path[i+1:j] return np.array(smoothed_path)

4. 数学建模中的应用场景与问题适配

PRM算法在数学建模竞赛中是一个极具竞争力的工具,尤其适合解决涉及复杂空间寻优的问题。它不仅仅是一个“路径规划”算法,更是一种“在高维连续空间中构建连通图”的通用建模思想。

典型赛题适配分析:

  1. 无人机灾情巡查与物资投递(如2024年国赛B题风格):

    • 问题核心:多无人机从基地出发,巡查分散的受灾点或投递物资,需规避山体、禁飞区等障碍,并满足续航、时间约束。
    • PRM应用:将三维空域建模为配置空间,障碍物为禁飞区。PRM学习阶段可离线构建整个区域的安全飞行走廊路网。查询阶段,为每个巡查任务(起点-受灾点-终点)在路网上快速规划航迹。结合旅行商问题(TSP)或车辆路径问题(VRP)模型,安排多机的任务分配与序列。
    • 优势:相比直接对连续坐标优化,PRM将问题转化为离散网络上的组合优化,大大降低求解难度,并能直观保证避障。
  2. 智能仓储AGV调度与避障(经典优化问题):

    • 问题核心:多个AGV在仓库货架间行驶,取放货物,需避免AGV之间碰撞以及与货架、墙壁的碰撞。
    • PRM应用:为仓库地面二维平面构建静态PRM路网(通道作为自由空间)。将AGV视为点机器人(或将其形状膨胀到路网中)。调度时,为每个AGV的任务在路网上分配路径,并通过在时间维度上预约路径节点(时空A*思想)或设置交通规则来解决AGV间的动态碰撞。
    • 优势:“路网”概念与仓库通道天然契合,预处理的路网使得实时动态调度成为可能。
  3. 机械臂装配或喷涂轨迹规划(工业场景):

    • 问题核心:机械臂末端执行器需要从初始位置运动到目标位置(如抓取点、焊接点),过程中不能与工件、环境、自身发生碰撞。
    • PRM应用:配置空间是机械臂的关节空间(维度高,如6轴机械臂是6维)。PRM在关节空间中采样,碰撞检测需计算对应姿态下整个手臂的包络体。构建的路网是关节角度的安全连接图。规划出的路径是一系列关节角度序列,可直接控制机器人。
    • 挑战与技巧:高维空间采样效率低,需采用启发式采样(如偏向目标区域的采样)。碰撞检测计算昂贵,是性能瓶颈。在建模论文中,可以简化机器人模型(用连杆圆柱体近似)和障碍物模型以加速仿真。
  4. 游戏AI或虚拟角色导航:

    • 问题核心:在复杂的游戏地图中,为NPC寻找从A点到B点的自然行走路径。
    • PRM应用:游戏引擎中的导航网格(NavMesh)生成思想与PRM高度相关。先在地图可行走表面采样,连接形成三角网格路网。AI寻路时在网格上运行A*算法。
    • 建模启示:可以将地图地形、植被密度等因素转化为采样概率或边权重(如沼泽地权重高),使规划出的路径更“智能”。

在建模论文中如何书写PRM部分:

  1. 模型假设:明确配置空间定义(是二维平面、三维空间还是关节空间),明确机器人简化模型(点、圆形、多边形),明确障碍物已知且静态。
  2. 算法流程图:绘制清晰的“学习阶段”和“查询阶段”流程图。
  3. 关键参数说明:说明采样策略(如均匀随机+桥测试)、采样点数N、连接近邻数K的选择依据(可通过小规模实验确定)。
  4. 碰撞检测模型:给出几何判据公式,例如判断点是否在多边形内(射线法),线段是否与圆相交。
  5. 路径平滑后处理:说明采用的平滑方法(如捷径法、B样条平滑)及其目的。
  6. 与其他算法的对比:可以设置对比实验,在相同环境下,比较PRM与A*(在精细化网格上)、RRT(快速探索随机树)等算法的规划成功率、路径长度和计算时间,突出PRM在多查询场景下的效率优势。

5. 常见问题、调试技巧与进阶优化

在实际编码和调试PRM的过程中,你一定会遇到各种各样的问题。下面是我踩过的一些坑和总结的排查思路。

5.1 常见问题速查表

问题现象可能原因排查与解决思路
路径规划失败(找不到路径)1. 路网连通性差,存在孤立簇。
2. 起点/终点处于孤立位置,无法接入路网。
3. 连接半径/近邻数太小。
4. 狭窄通道未被采样到。
1.可视化路网:绘制所有采样点和边,检查是否有明显断开区域。
2.增加采样点数n_samples
3.增大连接半径r或近邻数k
4.采用针对性采样策略(如桥测试、高斯采样)。
5. 检查起点/终点本身是否在障碍物内。
找到的路径非常绕远、不优1. 路网本身连通但不够稠密,可选路径少。
2. 路径平滑步骤未生效或效果差。
1. 增加采样点密度,特别是在空旷区域。
2. 尝试不同的图搜索权重,如将边长改为distance^2以惩罚长边。
3.增强路径平滑,增加捷径法的迭代次数,或采用更高级的样条优化。
算法运行速度极慢1. 碰撞检测函数效率低下。
2. 采样点过多,邻居查找(暴力搜索)耗时。
3. 局部规划器分辨率过高。
1.优化碰撞检测:使用空间划分数据结构(如AABB树),或对障碍物进行粗略预筛选。
2.使用KD树等加速近邻搜索
3.降低局部规划器的分辨率resolution,或用自适应步长。
4. 考虑分步构建,先稀疏采样构建骨架,再在关键区域细化。
路径穿过障碍物(碰撞)1. 碰撞检测模型有误(如机器人尺寸未考虑)。
2. 局部规划器检查不充分(分辨率太低)。
3. 路径平滑时引入了碰撞。
1.仔细检查碰撞检测逻辑,确保机器人的包络体(包括安全裕度)被正确计算。
2.提高局部规划器分辨率,或在连接边中点增加额外的碰撞检查点。
3.平滑后重新进行碰撞验证
在高维空间(>3维)效果差“维度灾难”:随维度增加,自由空间体积占比急剧下降,采样效率低。1.使用启发式采样,引导采样朝向自由空间(如OBPRM)。
2.降低维度:利用工作空间约束减少关节空间自由度。
3.分层规划:先在低维子空间(如末端位置)规划,再映射回高维空间求解逆运动学。

5.2 调试与可视化技巧

  1. 可视化是王道:对于二维问题,务必实现路网、障碍物、起点、终点和最终路径的可视化。matplotlib是绝佳工具。通过观察图,你能直观判断采样是否均匀、路网是否连通、路径为何绕远。
  2. 分阶段调试:先注释掉碰撞检测,让算法在无障碍环境下运行,确保采样、连接、图搜索的逻辑正确。然后再逐步加入简单的障碍物(如一个矩形),验证碰撞检测。
  3. 输出中间信息:在关键步骤打印信息,如“已采样XXX点,其中自由点YYY个”,“正在尝试连接点A与点B”,“找到路径,包含ZZZ个节点”。这有助于定位程序卡在哪个阶段。
  4. 参数敏感性分析:写一个脚本,自动遍历不同的n_samplesk_neighbors组合,统计规划成功率和平均路径长度,绘制热力图。这不仅能帮你找到最佳参数,也是建模论文中一个漂亮的实验部分。

5.3 进阶优化方向

当你掌握了基础PRM后,可以探索以下方向来提升算法性能或适应更复杂场景:

  • PRM* PRM的渐进最优变体。它在连接时不仅连接固定半径内的邻居,而是尝试连接一定范围内所有的邻居,并借鉴RRT*的“重布线”思想,检查新加入的点是否能让已有节点之间的路径变得更短。这能保证随着采样点增加,找到的路径收敛到真正的最优路径。
  • Lazy PRM:为了加速构建,在连接边时暂时不进行碰撞检测,先假设所有连接都是安全的,把图建起来。在查询路径时,再对找到的路径中的边进行碰撞验证。如果某条边碰撞,则将其从图中删除,重新搜索。这适用于碰撞检测非常昂贵的场景。
  • 动态PRM:当环境中的障碍物发生移动时,如何更新路网?一种思路是监测障碍物运动,只对受影响区域的路网进行局部重建和修复。
  • 与机器学习结合:利用历史规划数据或仿真经验,训练一个模型来预测哪些区域的采样成功率更高(即“重要性采样”),从而引导采样点更大概率落在关键的通道区域,极大提升构建效率。

PRM算法就像为复杂的连续世界绘制了一张离散的“地铁线路图”。它可能无法保证找到理论上的最短路径(除非使用PRM*),但在绝大多数实际应用中,它能以极高的概率快速找到一条可行、较优的路径,并且其“预处理-查询”的架构非常适合环境固定、任务多变的场景。从数学建模到工程实践,理解其核心思想并熟练运用,将为你在解决空间搜索与优化类问题时,提供一个强大而优雅的工具。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 1:28:00

Matlab蒙特卡罗模拟实战:从原理到金融风险评估应用

1. 从“赌场”到“实验室”&#xff1a;蒙特卡罗模拟的工程化思维如果你在数学建模竞赛或者科研项目中&#xff0c;遇到过那些解析解几乎不可能求得&#xff0c;或者计算量大到让人望而却步的问题——比如一个复杂系统的可靠性评估、一个金融衍生品的定价、或者一个城市交通网络…

作者头像 李华
网站建设 2026/8/28 1:26:51

机械设计3D数模解析:从山地车到级进模的工程实践与设计流程

1. 项目概述&#xff1a;一份机械工程师的“宝藏”图纸库拆解最近在整理硬盘&#xff0c;翻出来一个压箱底的文件夹&#xff0c;里面塞满了这些年从各种项目、参考案例甚至是一些“你懂的”渠道收集来的3D数模和设计图纸。文件名就是“山地自行车3D 水泥搅拌车模型 机器人车3D数…

作者头像 李华
网站建设 2026/8/28 1:26:29

电机底盘安装件选型与装配:联轴器、紧固件、减震全攻略

大家组装电机驱动设备时&#xff0c;往往把注意力全放在电机本体的扭矩、转速和功率上&#xff0c;结果底盘装到一半才发现&#xff1a;法兰孔距对不上、电机轴和负载轴不在一条线上、螺栓拧紧没跑几分钟就松了、线缆差点卷进齿轮箱。我见过太多项目&#xff0c;不是死在电机选…

作者头像 李华
网站建设 2026/8/28 1:25:54

SpringBoot+Mybatis学生就业管理系统:毕业设计与实战指南

简介&#xff1a;在Java Web开发领域&#xff0c;SpringBoot与Mybatis是构建企业级应用的主流技术组合。SpringBoot通过约定大于配置的理念和自动装配机制&#xff0c;极大地简化了项目初始化和部署流程&#xff0c;使开发者能更专注于业务逻辑的实现。Mybatis作为一款优秀的持…

作者头像 李华
网站建设 2026/8/28 1:22:26

动态规划入门:从打家劫舍问题解析状态定义与转移方程

1. 从“打家劫舍”到动态规划&#xff1a;一个算法竞赛的经典入口如果你正在备战蓝桥杯这类算法竞赛&#xff0c;看到“打家劫舍”这个题目&#xff0c;第一反应可能是觉得有趣甚至有点“不正经”。但恰恰是这道题&#xff0c;它几乎是所有动态规划入门者无法绕开的一座里程碑。…

作者头像 李华
网站建设 2026/8/28 1:21:26

AI相关论文学习总结

2023年7月 [2307.03172] Lost in the Middle: How Language Models Use Long Contexts 这篇论文的核心发现是&#xff1a;语言模型虽然能接收长上下文&#xff0c;但并不能稳定、充分地利用其中任意位置的信息。作者通过多文档问答和键值检索两类需要定位相关信息的任务发现&…

作者头像 李华