供应链算法整理(二)--- 智能补货

        供应链业务的目标价值是:优化货品的供给、销售提供支撑,以降低成本,提高时效、收益,最终提升用户体验。基于目标价值,整体的算法模块分为:智能选品、智能预测、品仓铺货、智能补货、智能调拨、仓网路由、快递分配、智能定价。因此整体物流供应链算法的目标是提升周转率,提升动销率,降低在架率。 

         本文重点讨论智能补货算法: 智能补货分为补货时间选择、补调决策、仓网路由决策。

一、物流供应链优化目标

1.1 业务目标

        库存健康分为:库存周转率、库存动销率和库存呆滞率

库存周转率是反应库存周转快慢程度的一个指标 --- 某时间段的出库总金额(总数量)与该时间段库存平均金额(或数量)的比率,是指在一定期间内库存周转的速度。其中数量排除价格干扰,聚焦周转速度; 而金额统一货币单位,衡量整体资金效率。

        1. 快速消费品行业‌:如食品、饮料、日化品等,存货周转率通常较高,正常范围可能在15-20次之间。

        2.‌传统零售行业‌:如百货、超市等,存货周转率相对较低,正常范围一般在4-5次之间。

        3.‌高端消费品行业‌:如奢侈品、高端电子产品等,存货周转率可能较低,正常范围一般在4次以下。

        4.‌电子行业‌:由于产品生命周期较短且价格波动大,年库存周转率一般不能低于10次。

库存动销率,原是销售指标,指店铺有销售的商品品种数与本店经营商品总品种数的比率。因其能很好的反应库存结构变化,故经常与呆滞率、库存周转率一起用于衡量库存健康程度。

库存呆滞率是呆滞库存金额占总库存金额的比率。呆滞库存(E&O,excess & obsolete),是指长时间不用或者一直用不上的具有风险的库存。也就是说,库存呆滞率反馈的是,我们现有的库存里面,有多少是有风险的库存。

1.2 技术目标

一级技术指标

        技术降低成本

二级技术指标

        预估准确率、补货接受率  

二、智能补货算法

        智能补货有三个核心问题: 是否铺货、补货点 和  补货量。

补货时间 

在补调货上可以分为: ① 传统模型:ss安全库存模型(确定性模型-> 不确定性模型,考虑大促和折扣) ② 运筹优化  ③ 强化学习 

安全库存模型(ss)

(1)确定性模型:最初的补货模型在经济学中有一个确定性模型--“经济订货量”(EOQ)模型,该模型的主要假设是持货成本、启动费用及市场需求率都是固定值,在这个条件下就能求出最优解。

安全库存: 

为防止需求波动或供应延迟导致的缺货而额外持有的库存缓冲。

SS = z \times \sqrt{LT \times \delta_{D}^{2} + \mu _ {D}^{2} \times \sigma _{LT}^{2} }

其中: 

  • zz:服务水平系数(如95%对应1.65)。

  • LT:平均提前期(Lead Time)。

  • σD:需求标准差。

  • μD​:平均需求。

  • σLT:提前期标准差

若提前期固定,后面一项即为0,可以得到: 

SS = z \times \sqrt{LT} \times \delta_{D}

无固定补货周期
补货时间点

库存水平降至该点时触发补货订单,确保在补货到达前不脱销。

ROP= \mu_{D} \times LT+SS

  • μD×LT:提前期内的平均需求。

  • SS:安全库存。

最优订货量

Q^*= \sqrt{2DS / H }

  • DD:年需求量。

  • SS:单次订货成本。

  • HH:单位库存年持有成本(如商品价值的20%)。

经济订货量 EOP

(2)不确定性模型:然而在实际应用场景中很多都是不确定的,所以有了不确定性模型--“安全库存(Safety Stock)”模型。首先比较直观的是需求的不确定性,即未来销售需求量;其次是提前期的不确定性,即供应商送货时长会存在一定的波动。对应的优化解法是加入销量预测、加权 VLT 统计预测等。右上角图片比较直观的展示了补货考虑的缓冲库存(buffer stock):横轴展示了送货时长,可能需要 3 天或者 10 天,这是 VLT 的波动性;纵轴则展示了需求的波动性,有可能卖 100 件,也有可能卖 150 件。安全库存即是基于这两点进行了考虑。

(3)ss 模型:该模型是基于安全库存、销量预测、供应商送货时长、服务水平构建的补货模型框架。右下角图中展示了模型相应的公式,其中需求以 d 表示,提前期以 L 表示,ss 的基础构建方式如图。在 ss 假设的前提下,即可计算补货点。其中补货点加上提前送货期、销量预测,即可得到补货点的基础值。补货点的意义在于满足整体的需求需要有一个预警,当库存低于这个点时,未来销售有可能击穿库存而造成缺货。在确定了补货点以后,可以根据相关假设或先验信息计算最优的订货量。同时智能补货也需要考虑 在途的补货商品,且可以结合商品周转率对周转率低的商品不进行补货。

固定补货周期

        在供货商强协同的场景会引入固定周期补货,同时如果在补货周期内需求土整,也会触发紧急补货对周期内安全库存的动态修正。

  1. 安全库存(SS):需覆盖整个补货周期+提前期的波动。

  2. 无需ROP:补货由时间触发,而非库存水平。

  3. 订货量(Q*):基于周期需求计算,需动态修正。

智能补货 RL 模型

强化学习主要有状态、动作、回报三个基本要素。在供应链场景下,因为业务本身就是这样的串行过程,故可以较好的进行迁移,如状态可以用商品库存、在途、价格等进行相关表示;动作就是依据当前商品状态做的补货决策;回报就是一个决策周期内的整体优化目标指标的综合评判。

下面将介绍整体网络的相关优化:模型整体使用了 Actor-Critic 网络结构,训练和 DDPG 差不多,通过 Train-Target 网络进行迭代更新,进而学习到库存针对环境的补货点和补货量判定。在建模的过程中还有很多 trick,其中需要注意以下两点:

(1)贝尔曼方程:在考虑贝尔曼方程(Bellman Equation)时,对未来的不确定性应该放低。因为整体 Reward 是在仿真环境中进行的,与实际线上情况是有一定出入的,需要更加关注即时奖励。

(2)Reward 函数的修正:Reward 是决策对指标的评估函数,这里进行了一些相关的尝试:尝试了一些离散函数后发现效果不是很好,并不能很好的学习到结果,故设置为连续非线性函数。针对指标也进行了相关的优化,如希望对缺货的反应更加灵敏、更关注缺货,同时希望周转不应该特别低、应该保持在健康水位。周转并不是越低越好,周转过低可能会造成一定的缺货。综合以上这些调整我们可以调整得到最终的 Reward 函数。

右图展示了 actor 网络的构造,主要介绍两个优化点:

(1)双塔网络结构:使用了双塔辅助模型,需要注意的是,输出本身存在着相辅和依赖的决策关系,如果不建立依赖关系可能会输出一些离谱的结果。

(2)embedding 层:需要考虑更多的因素,如商品属性、历史信息、采购相关等。

在整个模型构建完成后,进行了一些仿真和线上验证测试。在仿真系统中,周转结果会高 1 天左右,缺货能降低 1 pt,整体来说能达到目标;在线上验证中,最终周转持平,缺货能降低 2 pt,是一个比较好的效果。

智能补货仿真系统

 首先简单概述一下库存仿真逻辑。不论是预测还是补货调拨都需要一个有效的评判,库存仿真就是对整体供应链系统进行模拟评判的一个比较重要的过程。简单的逻辑抽取如下:

(1)流程:串行整个补货的流程;

(2)环境:模拟市场、供应商行为;

(3)代理:执行决策部分,用于模拟采控行为。

整个仿真过程实际就是基于历史数据使用不同策略进行迭代回溯的过程,这个过程中需要考虑很多不确定性,包括销量、供应商送货等的不确定性,如销量可能会有一定波动,供应商发货可能延迟,下单后供应商是否能接货送货等。在确定这些随机项后,会对不同的策略进行历史回溯,来对比相关策略。

右边左图中显示了不同策略模型在同一系统中的表现,三个策略对不同指标的表现可能不一样,会根据实际场景的需要对策略进行评估选择;右图则展示了同一策略在不同参数下的评估,哪个参数最终对模型的影响较大,也能达到较好的验证。最终会对仿真系统的可用性和一致性进行评价,就能得到整个仿真系统对于补货实际应用的保证。

补货和仿真系统的建设,由问题出发、建模、仿真评估的一系列过程形成了一个很好的闭环。

三、智能调拨算法

        问题的背景:仓库分布在不同的省份,每个仓会负责不同区域的发货,如果仓发货给本区域的顾客,那么送货时效是能得到保证的,不论是当日达还是次日达都能得到保证。但如果库存经营不善,有仓库发生缺货,该仓覆盖区域的顾客下单时,就不能从此仓库进行发货,由此会产生跨区配送,虽然跨区配送会使用较近仓,但距离实际还是较远的,整体来说当日达、次日达就无法得到保证,用户的整体体验就会下降,整体的次日达指标也无法完成。故在检测到仓库快缺货,采购也无法及时到达时,需要进行相关的调拨,能在它将缺货时到达,这样整体的次日达就能得到保证。

除此之外,调拨还能解决很多其他问题:

(1)可以解决仓间平衡问题。如有些仓库存较高,有些仓库存较低,这时就可以通过调拨进行仓间平衡;

(2)可以提升次日达率、降低拆单率(某品在某仓没有,在另外仓有,就会产生拆单跨区配送);

(3)提高时效性,提升用户满意度。

在了解调拨问题后,通过整体目标来抽出关键指标进行建模。在调拨计划的实际场景中,主要关注以下指标:

(1)最大化次日达;

(2)最小化仓间调拨成本;

(3)最大化降低缺货天数/最小化缺货率。

由此可见,调拨问题是一个带约束的多目标规划问题。为了更好求解,需要对指标进行量化:

(1)成本:可以通过仓间费用进行衡量;

(2)次日达:可以通过统计分析,次日达预估;

(3)预计缺货:可以通过日销、库存、调拨周期,构建预估函数进行表达。

此外还需要关注一些相关约束条件:

(1)调拨量不应该超出可调拨上限。调出仓本身货量不够,就无法完成调拨。

(2)应该满足收货仓的需求量,但不应显著高于该需求量。如实际需要 100 件,不应该调拨 200 件,满足即可。

(3)每个仓应该满足最小起订量。如求解后得到 A 仓往 B 仓仅调拨了 2 件,运输成本较高,达不到整体最小的起订约束。

(4)应该满足箱规约束,不配送散件。即一般调货按照整箱调拨,如一箱一般为 10 件,如果需要调拨 12 件,就需要规到 10 件的约束中。

关于决策变量总结如下:

(1)需要决策每个品仓应该如何进行调拨,即调拨量矩阵;

(2)还需要决策某仓是否能够进行调拨的矩阵。

(3)有了问题、约束、求解变量后,就能对问题进行公式化。

四、补调一体化算法

        前面的方案是对补货和调货分别进行设计,实际上因为供应链多级仓库设计,某个仓库缺货未必需要从供应商补货,而是可能可以从上级或同级仓库进行补货。因此我们可以设计补调货一体化算法。 

        

        

​盒马供应链算法实战

【罗戈网】衡量库存健康有哪三个库存控制指标?衡量库存健康有哪三个库存控制指标?

阿里健康供应链智能补货算法

库存管理十大指标有哪些 | 零代码企业数字化知识站

https://zhuanlan.zhihu.com/p/861588391

阿里新零售中的智能补货

https://zhuanlan.zhihu.com/p/12470961055

订货补货模型逻辑与简单实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode 个性化

vscode 个性化 设置 吸顶效果 使用前使用后 设置方法 VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行 插件 代码片段分享 - CodeSnap 使用方式 CtrlShiftP输入CodeSnap 唤起插件选择代码 行内报错提示 - Error Lens 使用前使用后 VSCode Error Lens插件介绍&…

Rockermq的部署与使用(0-1)

​RocketMQ​ 是阿里巴巴开源的一款 ​分布式消息中间件,具有高吞吐、低延迟、高可用等特点,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物…

软件测试报告机构如何保障软件质量并维护其安全性?

软件测试报告机构在软件开发流程里起着十分关键的作用,它可以保障软件的质量,它还能够维护软件的安全性。下面,我们就来深入了解一下这类机构。 机构作用 软件测试报告机构是软件质量的“把关者”,能对软件进行全面评估&#xf…

4个纯CSS自定义的简单而优雅的滚动条样式

今天发现 uni-app 项目的滚动条不显示,查了下原来是设置了 ::-webkit-scrollbar {display: none; } 那么怎么用 css 设置滚动条样式呢? 定义滚动条整体样式‌ ::-webkit-scrollbar 定义滚动条滑块样式 ::-webkit-scrollbar-thumb 定义滚动条轨道样式‌…

ES6入门---第二单元 模块五:模块化

js不支持模块化 注意: 需要放到服务器环境 1、如何定义模块? export 东西 例:1.js文件中 console.log(1模块加载了);//显示是否加载了 export const a 12; export const b 5; export let c 101; const a12; const b5; const c101;ex…

14.Excel:排序和筛选

一 位置 两个位置。 二 排序:如何使用 1.常规使用 补充:不弹出排序提醒排序。 选中要排序列中的任意一个单元格,然后排序。 2.根据要求进行排序 1.根据姓名笔画进行降序排序 要勾选上数据包含标题,默认是勾选了。 2.根据运营部、…

嵌入式系统基础知识

目录 一、冯诺依曼结构与哈佛结构 (一)冯诺依曼结构 (二)哈佛架构 二、ARM存储模式 (一)大端模式 (二)小端模式 (三)混合模式 三、CISC 与 RISC &am…

CSS 预处理器 Sass

目录 Sass 一、Sass 是什么? 二、核心功能详解 1. 变量(Variables) 2. 嵌套(Nesting) 3. 混合宏(Mixins) 4. 继承(Inheritance) 5. 运算(Operations&…

信息收集新利器:SSearch Chrome 插件来了

SSearch 下载地址 SSearch 😣用途 每次谷歌语法搜索时还得自己写,我想省事一点,弄了一个插件,先加了几个常用的语法,点击后会跳转到对应搜索页面,也可以直接在搜索框微调 后续也会加些其他语法 &#…

Docker搭建SFTP

在这个教程中,我们将通过一个简单的例子来展示如何使用 Docker 和 atmoz/sftp 镜像设置一个基本的 SFTP 服务。这个服务将允许用户通过 SFTP 安全地访问和管理文件。我们将配置一个名为 ops 的用户,其密码为 123456,并限定用户只能访问特定的…

正态分布习题集 · 答案与解析篇

正态分布习题集 答案与解析篇 与题目篇编号一致,如有其他解题思路,欢迎在评论区交流。 1. 基础定义与性质 1.1 密度函数 X ∼ N ( μ , σ 2 ) X \sim N(\mu,\sigma^2) X∼N(μ,σ2) 的 PDF: [ f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)2}{2\sigma2}\…

Java学习手册:SQL 优化技巧

一、SQL 查询优化 选择合适的索引列 :索引可以显著提高查询速度,但需要选择合适的列来创建索引。通常,对于频繁作为查询条件的列、连接操作的列以及排序或分组操作的列,应该考虑创建索引。例如,在一个订单表中&#xf…

(02)Redis 的订阅发布Pub/Sub

我们为了自己实现一个MQ功能,就要深入底层挖掘现有开源产品的实现过程。 Redis 发布订阅底层结构解析 Redis 不存储消息,仅作为“实时中转”;只有订阅者在线时才能收到消息;消息是广播给所有订阅此频道的客户端。 1. 核心数据结…

使用Docker一键安装SigLens:简单快捷的日志分析解决方案

在当今复杂的IT环境中,高效的日志管理和分析变得越来越重要。SigLens作为一款强大的开源日志分析工具,为开发者和运维人员提供了直观、高效的日志处理体验。本文将介绍如何使用Docker快速安装SigLens,让您在几分钟内就能开始进行日志分析。 为什么选择Docker安装SigLens? Do…

C#与西门子PLC通信:S7NetPlus和HslCommunication使用指南

西门子S7协议是用来和PLC进行通讯的一个协议,默认端口是102,数据会保存在一个个DB块中,比较经典的用法是一个DB块专门用来读取,一个用来写入。 DB(数据块) {块号}.DBX/DBD/DBW{字节地址}.{位偏移} 1、数据…

【中间件】brpc_基础_remote_task_queue

文章目录 remote task queue1 简介2 核心功能2.1 任务提交与分发2.2 无锁或低锁设计2.3 与 bthread 深度集成2.4 流量控制与背压 3 关键实现机制3.1 数据结构3.2 任务提交接口3.3 任务窃取(Work Stealing)3.4 同步与唤醒 4 性能优化5 典型应用场景6 代码…

C语言实现数据结构:堆排序和二叉树_链式

一.堆的应用 1.堆排序 void test01() {int arr[] { 17,20,10,13,19,15 };int n sizeof(arr) / sizeof(arr[0]);HP p;HPInit(&p);for (int i 0; i < n; i){HPPush(&p, arr[i]);}int i 0;while (!HPEmpty(&p)){arr[i] HPTop(&p);HPPop(&p);}for (i…

C和指针——预处理

预处理是编译前的过程&#xff0c;主要对define&#xff0c;include以及一些编译器定义的内容进行替换 #define的本质就是替换 1、例子 #define FOREVER for(;;) 2、例子 #define TEMPD "1231231231\ 123123123" \\如果太长了&#xff0c;可以用\换行 3、例子——可…

C++ set和map

目录 一、关联式容器 1.1 键值对 1.1.1 概念 1.1.2 pair 1.2 树形结构的关联式容器 二、set 2.1 set 的介绍 2.2 set 的使用 2.2.1 set 的构造 2.2.2 set 的迭代器 2.2.3 set 的容量操作 2.2.4 set 的修改操作 2.2.5 set 的查找操作 三、multiset 3.1 multiset …

「Mac畅玩AIGC与多模态07」开发篇03 - 开发第一个 Agent 插件调用应用

一、概述 本篇介绍如何在 macOS 环境下,基于 Dify 平台自带的网页爬虫插件工具,开发一个可以提取网页内容并作答的 Agent 应用。通过使用内置插件,无需自定义开发,即可实现基本的网页信息提取与智能体回答整合。 二、环境准备 1. 确认本地部署环境 确保以下环境已搭建并…