从架构到算法,详解美团外卖订单分配内部机制

2024-06-04 20:48

本文主要是介绍从架构到算法,详解美团外卖订单分配内部机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

序言

 

最近两年,外卖的市场规模持续以超常速度发展。近期美团外卖订单量峰值达到 1600 万,是全球规模最大的外卖平台。目前各外卖平台正在优质供给、配送体验、软件体验等各维度展开全方位的竞争,其中,配送时效、准时率作为履约环节的重要指标,是外卖平台的核心竞争力之一。

 

要提升用户的配送时效和准时率,最直接的方法是配备较多的配送员,扩大运力规模,然而这也意味着配送成本会很高。所以,外卖平台一方面要追求好的配送体验,另一方面又被配送的人力成本掣肘。怎么在配送体验和配送成本之间取得最佳的平衡,是即时配送平台生存的根基和关键所在。

 

随着互联网时代的上半场结束,用户增长红利驱动的粗放式发展模式已经难以适应下半场的角逐。如何通过技术手段,让美团外卖平台超过 40 万的骑手高效工作,在用户满意度持续提升的同时,降低配送成本、提高骑手满意度、驱动配送系统的自动化和智能化,是美团配送技术团队始终致力于解决的难题。

 

在过去一年多时间里,美团配送团队在机器学习、运筹优化、仿真技术等方面,持续发力,深入研究,并针对即时配送场景特点将上述技术综合运用,推出了用于即时配送的「超级大脑」——O2O 即时配送智能调度系统。

 

系统首先通过优化设定配送费以及预计送达时间来调整订单结构;在接收订单之后,考虑骑手位置、在途订单情况、骑手能力、商家出餐、交付难度、天气、地理路况、未来单量等因素,在正确的时间将订单分配给最合适的骑手,并在骑手执行过程中随时预判订单超时情况并动态触发改派操作,实现订单和骑手的动态最优匹配。

 

同时,系统派单后,为骑手提示该商家的预计出餐时间和合理的配送线路,并通过语音方式和骑手实现高效交互;在骑手送完订单后,系统根据订单需求预测和运力分布情况,告知骑手不同商圈的运力需求情况,实现闲时的运力调度。

 

通过上述技术和模式的引入,持续改善了用户体验和配送成本:订单的平均配送时长从 2015 年的 41 分钟,下降到 32 分钟,进一步缩短至 28 分钟,另一方面,在骑手薪资稳步提升的前提下,单均配送成本也有了 20% 以上的缩减。

 

本文将以外卖场景下上述调度流程中的关键问题之一——订单分配问题为例,阐述该问题的本质特点、模式变迁、方案架构和关键要点,为大家在解决业务优化问题上提供一个案例参考。

 

外卖订单分配问题描述

 

外卖订单的分配问题一般可建模为带有若干复杂约束的 DVRP(Dynamic Vehicle Routing Problem)问题。这类问题一般可表述为:有一定数量的骑手,每名骑手身上有若干订单正在配送过程中,在过去一段时间(如 1 分钟)内产生了一批新订单,已知骑手的行驶速度、任意两点间的行驶距离、每个订单的出餐时间和交付时间(骑手到达用户所在地之后将订单交付至用户所需的时间),那么如何将这批新订单在正确的时间分配至正确的骑手,使得用户体验得到保证的同时,骑手的配送效率最高。

 

下图是外卖配送场景下一个配送区域上众多骑手的分布示意图。

 

 

 

即时配送订单分配模式的演进

 

在 O2O 领域,订单和服务提供方的匹配问题是一个非常关键的问题。在外卖行业发展初期主要依赖骑手抢单模式和人工派单模式。抢单模式的优势是开发难度低,服务提供者(如司机、骑手)的自由度较高,可以按照自身的需要进行抢单,但其缺点也很明显:骑手/司机只考虑自身的场景需求,做出一个局部近优的选择,然而由于每个骑手掌握的信息有限又只从自身利益出发来决策,导致配送整体效率低下,从用户端来看,还存在大量订单无人抢或者抢了之后造成服务质量无法保证(因为部分骑手无法准确预判自己的配送服务能力)的场景,用户体验比较差。

 

人工派单的方式,从订单分配的结果上来看,一般优于抢单模式。在订单量、骑手数相对比较少的情形下,有经验的调度员可以根据订单的属性特点、骑手的能力、骑手已接单情况、环境因素等,在骑手中逐个比对,根据若干经验规则挑选一个比较合适的骑手来配送。一般而言,人工调度一个订单往往至少需要半分钟左右的时间才能完成。

 

然而,随着外卖订单规模的日益增长,在热门商圈(方圆 3 公里左右)的高峰时段,1 分钟的时间内可能会有 50 单以上,在这种情况下,要求人工调度员每 1-2 秒钟做出一次合理的调度决策,显然是不可能的。

 

另一方面,由于即时配送过程的复杂性,要做出合理的匹配决策,要求调度员对配送范围内各商家的出餐速度、各用户地址的配送难度(例如有的写字楼午高峰要等很长时间的电梯)、各骑手自身的配送工具/熟悉的商家和用户范围/工作习惯等等要有非常深入的了解,在此基础上具备统筹优化能力,考虑未来进单量、减少空驶等因素,做出全局近优的选择,这对人工调度员而言,又是一项极其艰巨的任务。另外,美团外卖有数千个配送区域,如果采用人工调度方式则每个区域均需要配置调度员,会消耗非常高的人力成本。

 

该问题虽然复杂,但仍具备一定的规律性。尤其是移动互联网高度发达的今天,我们拥有骑手配送订单过程中的各类大量历史数据,e.g. 骑手的位置、订单状态、天气数据、LBS 数据,利用这些数据辅以相关数学工具使得实现计算机系统的自动派单成为可能。

 

系统派单具备如下优势:

 

  • 系统可以在全局层面上掌握和配送有关的骑手、商家、用户、订单等各类信息,在此基础上,可以做出全局较优的方案,从而提升配送效率和配送体验,减少配送成本;

  • 显著减轻人工调度员的工作,从而降低人工成本,人工调度员只需要在一些意外场景(如配送员出现紧急情况无法继续配送等)发生的时候进行干预即可。

 

所以,随着数据采集的不断完善和人工智能技术的不断成熟,通过人工智能的方法来进行订单的指派,具有巨大的收益,成为各个配送平台研究的热点之一。

 

订单智能分配系统的基本架构

 

美团外卖每天产生巨量的订单配送日志、行驶轨迹数据。通过对配送大数据进行分析、挖掘,会得到每个用户、楼宇、商家、骑手、地理区域的个性化信息,以及有关各地理区块骑行路径的有效数据,那么订单智能分配系统的目标就是基于大数据平台,根据订单的配送需求、地理环境以及每名骑手的个性化特点,实现订单与骑手的高效动态最优匹配,从而为每个用户和商家提供最佳的配送服务,并降低配送成本。

 

 

 

即时配送大数据平台实现对骑手轨迹数据、配送业务数据、特征数据、指标数据的全面管理和监控,并通过模型平台、特征平台支持相关算法策略的快速迭代和优化。

 

机器学习模块负责从数据中寻求规律和知识,例如对商家的出餐时间、到用户所在楼宇上下楼的时间、未来的订单、骑行速度、红绿灯耗时、骑行导航路径等因素进行准确预估,为调度决策提供准确的基础信息;而运筹优化模块则在即时配送大数据平台以及机器学习的预测数据基础上,采用最优化理论、强化学习等优化策略进行计算,做出全局最优的分配决策,并和骑手高效互动,处理执行过程中的问题,实现动态最优化。

 

问题分析和建模:高效求解问题的第一步

 

学术研究领域有很多经典的优化问题(如旅行商问题 TSP、装箱问题 BP、车辆路径问题 VRP 等),它们的决策变量、优化目标和约束条件往往非常明确、简单。这在学术研究中是很必要的,因为它简化了问题,让研究者把精力放在如何设计高效算法上。

 

然而,由于实际工业场景的复杂性,绝大部分实际场景的决策优化问题很难描述的如此简单,此时,如果不仔细分析实际业务过程特点而错误地建立了和实际场景不符的模型,自然会造成我们获得的所谓「最优解」应用于实际后也会「水土不服」,最后被大量抱怨甚至抛弃。所以我们说,准确建模是实际决策优化项目的第一步,也是最关键的一步。

 

准确建模,包括两个方面的问题:

 

  • 我们正确理解了实际业务场景的优化问题,并且通过某种形式化语言进行了准确描述;

  • 我们建立的模型中,涉及的各类参数和数据,能够准确得获取。

 

在上述两个前提下,采用相应的高效优化算法求解模型所得到的最优解,就是符合实际场景需求的最优决策方案。第一个问题,一般是通过业务调研、分析并结合建模工具来得到;而解决第二个问题,则更多地需要依赖数据分析、机器学习、数据挖掘技术结合领域知识,对模型进行精确的量化表达。

 

一个决策优化问题的数学模型,一般包括三个要素:

 

  • 决策变量

  • 优化目标

  • 约束条件

 

其中,决策变量说明了我们希望算法来帮助我们做哪些决策;优化目标则是指我们通过调整决策变量,使得哪些指标得到优化;而约束条件则是在优化决策的过程中所考虑的各类限制性因素。

 

为了说明即时配送场景下的订单分配问题,我们先引入若干符号定义:

 

 

 

在即时配送调度场景下,决策变量包括各个订单需要分配的骑手,以及骑手的建议行驶路线。

 

 

即时配送订单分配问题的优化目标一般包括希望用户的单均配送时长尽量短、骑手付出的劳动尽量少、超时率尽量低,等等。一般可表达为:

 

 

 

针对实际场景下的配送订单分配问题,设置哪些指标作为目标函数是一个较为复杂的问题。

 

原因在于两个方面:

 

1)该优化问题是多目标的,且各个目标在不同时段、不同环境下会有差别。举个例子,经验丰富的调度员希望在负载较低的空闲时段,将订单派给那些不熟悉区域地形的骑手,以锻炼骑手能力;在天气恶劣的情况下,希望能够容忍一定的超时率更多地派顺路单,以提高订单消化速度等。这些考量有其合理性,需要在优化目标中予以体现。

 

2)缺乏有助于量化优化目标的数据。如果带标签数据足够多,同时假设调度员的能力足够好,那么可以通过数据挖掘的手段获取优化目标的量化表达。不幸的是,这两个前提都不成立。我们针对该难题,首先通过深入调研明确业务痛点和目标,在此基础上,采用机理和数据相结合的办法,由人工设定目标函数的结构,通过仿真系统(下文介绍)和实际数据去设定目标函数的参数,来确定最终采用的目标函数形态。

 

即时配送调度问题的约束条件至少涵盖如下几种类型:

 

 

除了以上约束外,有时还需要考虑部分订单只能由具备某些特点的骑手来配送(例如火锅订单只能交给携带专门装备的骑手等)、载具的容量限制等。

 

 

 

以上只是针对给定的一批订单进行匹配决策的优化问题在建模时所需考虑的部分因素。事实上,在外卖配送场景中,我们希望的不是单次决策的最优,而是策略在一段时间应用后的累积收益最大。

 

换句话说,我们不追求某一个订单的指派是最优的,而是希望一天下来,所有的订单指派结果整体上是全局最优的。这进一步加大了问题建模的难度,原因在于算法在做订单指派决策的时候,未来的订单信息是不确定的,如下图所示,在 t 时刻进行决策的时候,既需要考虑已确定的订单,还需要考虑未来的尚未确定的订单。运筹优化领域中的马尔可夫决策过程描述的就是这样的一类在不确定、信息不完备环境下的序贯决策优化问题。

 

 

 

问题建模中的机器学习

 

过去,在信息化水平较低的环境下,很多工业运筹优化类的项目不成功,重要原因之一就是缺少足够完备的数据采集基础工具,大量数据由人工根据经验设定,其准确性难以保证,且难以随着环境变化而自适应调整,从而造成模型的优化结果渐渐变得不符合实际。机器学习领域有个谚语「Garbage in,garbage out」,说明了精准的基础数据对于人工智能类项目的重要性。

 

即时配送订单分配场景下的数据包括两类:

 

  • 直接通过业务系统采集可获取的数据,例如订单数据、骑手负载数据、骑手状态数据等。

  • 无法直接采集得到,需要预测或统计才能获取的数据,如商户出餐时间、用户驻留时间(骑手到达用户处将订单交付给用户的时间)、骑手配送能力等。

 

第一类数据的获取一般由业务系统、骑手端 App 直接给出,其精度通过提升工程质量或操作规范可有效保证;而第二类数据的获取是即时配送调度的关键难点之一。

 

在订单的配送过程中,骑手在商家、用户处的取餐和交付时间会占到整个订单配送时长的一半以上。准确估计出餐和交付时间,可以减少骑手的额外等待,也能避免「餐等人」的现象。商家出餐时间的长短,跟品类、时段、天气等因素都有关,而交付时间更为复杂,用户在几楼,是否处于午高峰时段,有没有电梯等等,都会影响骑手(到了用户所在地之后)交付订单给用户的时间。

 

对这两类数据,无法单纯通过机理来进行预测,因为相关数据无法采集到(如商家今天有几个厨师值班、用户写字楼的电梯是否开放,等等)。为解决这些问题,我们利用机器学习工具,利用历史的骑手到店、等餐、取餐的数据,并充分考虑天气等外部因素的影响,建立了全面反映出餐能力的预测模型,并通过实时维度的特征进行修正,得到准确的出餐/交付时间估计。

 

 

 

进一步,我们建立了调度模型的自学习机制,借鉴多变量控制理论的思想,不断根据预估偏差调整预估模型中的相关参数。通过以上工作,我们通过调度模型来预估骑手的配送行为(取餐时间和送达时间),平均偏差小于 4 分钟,10 分钟置信度达到 90% 以上,有效地提升了派单效果和用户满意度。

 

订单-骑手的匹配优化

 

如果说上述建模过程的目标是构建和实际业务吻合的解空间,优化算法的作用则是在我们构建的解空间里找到最优的策略。配送调度问题属于典型的 NP-Hard 类离散系统优化问题,解空间巨大。以一段时间内产生 50 个订单,一个区域有 200 骑手,每个骑手身上有 5 个订单为例,那么对应的调度问题解空间规模将达到 pow(200,50)*10(部分为不可行解),这是一个天文数字!

 

所以,如何设计好的优化算法,从庞大的解空间中搜索得到一个满意解(由于问题的 NP-Hard 特性,得到最优解几乎是不可能的),是一个很大的挑战。即时配送对于优化算法的另一个要求是高实时性,算法只允许运行 2~3 秒钟的时间必须给出最终决策,这和传统物流场景的优化完全不同。

 

针对此难题,我们采用了两个关键思路。一是问题特征分析。运筹优化领域有个说法叫「No Free Lunch Theory」,没有免费的午餐,含义是说如果没有对问题的抽象分析并在算法中加以利用,那么没有算法会比一个随机算法好。

 

换句话说,就是我们必须对问题特点和结构进行深入分析,才能设计出性能优越的算法。在运筹优化领域中的各类基础性算法也是这样的更多思路,如单纯形、梯度下降、遗传算法、模拟退火、动态规划等,它们的本质其实是假定了问题具备某些特征(如动态规划的贝尔曼方程假设,遗传算法的 Building Blocks 假设等),并利用这些假设进行算法设计。那么,针对配送调度的场景,这个问题可以被分解为两个层次:骑手路径优化和订单分配方案的优化。

 

骑手路径优化问题要解决的问题是:在新订单分配至骑手后,确定骑手的最佳配送线路;而订单分配优化问题要解决的问题是:把一批订单分配至相应的骑手,使得我们关注的指标(如配送时长、准时率、骑手的行驶距离等)达到最优。这两个问题的关系是:通过订单分配优化算法进行初始的订单分配,然后通过骑手路径优化算法获取各骑手的最佳行驶路线,进而,订单分配优化算法根据骑手路径优化结果调整分配方案。这两个层次不断反复迭代,最终获得比较满意的解。

 

 

 

第二个思路是跨学科结合。订单分配问题在业内有两类方法,第一类方法是把订单分配问题转换成图论中的二分图匹配问题来解决。但是由于标准的二分图匹配问题中,一个人只能被分配一项任务,所以常用的一个方法是先对订单进行打包,将可以由一个人完成的多个订单组成一个任务,再使用二分图匹配算法(匈牙利算法、KM 算法)来解决。

 

这种做法是一个不错的近似方案,优点是实现简单计算速度快,但它的缺点是会损失一部分满意解。第二类方法是直接采用个性化的算法进行订单分配方案的优化,优点是不损失获得满意解的可能性,但实际做起来难度较大。我们结合领域知识、优化算法、机器学习策略以及相关图论算法,基于分解协调思想,设计了骑手路径优化算法和订单分配优化算法。

 

进一步,我们利用强化学习的思想,引入了离线学习和在线优化相结合的机制,离线学习得到策略模型,在线通过策略迭代,不断寻求更优解。通过不断地改进算法,在耗时下降的同时,算法的优化效果提升 50% 以上。

 

我们在大量的实际数据集上进行评估验证,99% 以上的情况下,骑手路径优化算法能够在 30ms 内给出最优解。为了有效降低算法运行时间,我们对优化算法进行并行化,并利用并行计算集群进行快速处理。一个区域的调度计算会在数百台计算机上同步执行,在 2~3 秒内返回满意结果,每天的路径规划次数超过 50 亿次。

 

应对强随机性

 

即时配送过程的一个突出特点是线下的突发因素多、影响大,例如商家出餐异常慢、联系不上用户、车坏了、临时交通管制等等。这些突发事件造成的一个恶劣结果是,虽然在指派订单的时刻,所指派的骑手是合理的,然而过了一段时间之后,由于骑手、订单等状态发生了变化,会变得不够合理。订单交给不合适的骑手来完成,会造成订单超时,以及骑手需要额外的等待时间来完成订单,影响了配送效率和用户体验的提升。

 

在出现上述不确定因素造成派单方案变得不合理的情况时,现有方法主要通过人工来完成,即:配送站长/调度员在配送信息系统里,查看各个骑手的位置、手中订单的状态及商户/用户的位置/期望送达时间等等信息,同时接听骑手的电话改派请求,在此基础上,分析哪些订单应该改派,以及应该改派给哪位骑手,并执行操作。

 

 

 

我们针对即时配送的强不确定性特点,提出了两点创新:一是延迟调度策略,即在某些场景订单可以不被指派出去,在不影响订单超时的情况下,延迟做出决策;二是系统自动改派策略,即订单即便已经派给了骑手,后台的智能算法仍然会实时评估各个骑手的位置、订单情况,并帮助骑手进行分析,判断是否存在超时风险。如果存在,则系统会评估是否有更优的骑手来配送。

 

延迟调度的好处一方面是在动态多变的不确定环境下,寻求最佳的订单指派时机,以提高效率;另一方面是在订单高峰时段存在大量堆积时,减轻骑手的配送压力。有了这两项策略,订单的调度过程更加立体、全面,覆盖了订单履行过程全生命周期中的主要优化环节,实现订单和骑手的动态最优化匹配。

 

仿真系统

 

工业系统非常看重监控和评估,「No measurement, No improvement」。在工业优化场景中,如何准确评估算法的好坏,其重要性不亚于设计一个好的算法。然而,由于多个订单在线下可能会由同一名骑手来配送,订单与订单之间存在耦合关系,导致无法做订单维度的 A/B 测试。

 

而区域维度指标受天气、订单结构、骑手水平等外在随机因素影响波动比较大,算法效果容易被随机因素湮没从而无法准确评估。为此,我们针对即时配送场景,建立了相应的仿真模型,开发了配送仿真系统。

 

系统能够模拟真实的配送过程和线上调度逻辑,并给出按照某种配送策略下的最终结果。该模拟过程和线下的实际导航、地理数据完全一致,系统同时能够根据实际配送数据进行模型自学习,不断提升仿真精度。

 

 

 

一个高精度的配送仿真系统,除了能够对配送调度算法进行准确评估和优化,从而实现高效的策略准入控制外,另一个巨大的价值在于能够对配送相关的上下游策略进行辅助优化,包括配送范围优化、订单结构优化、运力配置优化、配送成本评估等等,其应用的想象空间非常大。

 

结语

 

美团配送智能调度系统在应用之后,取得了非常不错的应用效果。下图说明了在订单结构比较类似的两个白领区域上的 A/B 测试结果。中关村配送站在 5 月 6 日切换了派单模式和相应的算法,大望路配送站的调度策略维持不变。可以看出,在切换后,中关村的平均配送时长有了 2.9 分钟的下降,严重超时率下降了 4.7 个百分点(相比较对比区域)。

 

同时,在更广泛的区域上进行了测试,结果表明,在体验指标不变的前提下,新策略能够降低 19% 的运力消耗。换言之,原来 5 个人干的活,现在 4 个人就能干好,所以说,智能调度在降低成本上价值是很大的。

 

美团配送的目标之一是做本地化的物流配送平台,那么,效率、体验和成本将成为平台追求的核心指标。人工智能技术在美团配送的成功应用有很多,通过大数据、人工智能手段打造一个高效、智能化、动态协同优化的本地智慧物流平台,能显著提高本地、同城范围内的物流配送效率,持续提升配送体验,降低配送成本。

 

这篇关于从架构到算法,详解美团外卖订单分配内部机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031087

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig