传统算法是如何在销补调计划中发挥作用的

news2024/11/17 12:54:39

84929a2aa0ebafe8ab8998af4d9bf23d.gif

本文分享了一个「传统机器学习算法」在实际业务中的使用场景。

6ced56f11b1923b70d3a1b3f7d07b673.png

前言

如果嫌麻烦,你可以直接跳到正题观看~

最近无论是在工作中的交谈,还是在日常刷屏的新闻,铺天盖地的都是大模型。我横竖是看不明白,费了大劲终于从字缝里看到了两个字,玄学。仿佛回到了我的学生时代。

还记得6年前刚进入研究生实验室时,师兄兴奋的对我说:小伙子,欢迎来到我们的修仙世界!——当时学校跟英伟达合作,刚刚从英伟达那里弄了500块Tesla显卡,供各个实验室申请使用。这,是我们崭新的炼丹炉。经过3年的研究生生涯,我对深度学习的理解,仅仅到能够使用深度学习模型的程度。期间也有一些小成绩,包括一篇CCF B类会议论文和一篇KBS期刊(影响因子8.038) ,文章内容主要是使用LSTM对用户兴趣偏好和用户兴趣迁移建模,以此来搭建一个推荐算法模型。

我们通过对各种神经网络模型的堆叠以及反复的对比实验,确实发现LSTM模型的能够在准确率、召回率等指标上有比较突出的效果。但是有一个很大的问题拦在我面前:我如何去解释它?确实,我们没法从直观定性的角度去解释,也没有数学逻辑能解释。索性我们当时就套用了大家统一的口径,解释说LSTM具有长短时记忆能力,因此能够归纳随着时间轴变化的数据规律。还好当时的审稿人并没有对我们的解释提出质疑,也可能不只是我一个,而是大家的论文都没有很好的解释它。

无论是简单的FC、CNN、RNN、LSTM这些模型,还是当下最火的所谓的大模型依赖的Transformer模型,都是基于梯度下降和反向传播进行训练,至于为什么通过这样的训练就能让模型中参数自动自洽,到如今也没有人能够证明。我们只是知道通过这样去构造模型确实行之有效。

相反,很多传统的机器学习算法,要么有严格的数学证明,要么是直观就能观察到算法的过程。相比于深度学习模型,我认为能够提出这些传统机器学习算法的前辈们更加值得敬佩。因此,本文主要是简单的分享一个所谓「传统机器学习算法」在实际业务中的使用场景。当然,我再次声明我对深度学习的理解尚浅,如有表述不当之处,可以互相交流。

5bb1016b38ec8ccab9b3892e8032ae7a.png

正题

在计划域中,有很多很有意思的问题需要解决,包括如何制定中长期采购计划?如何制定短期补货计划?仓库库存偏仓怎么办,如何配平,是否需要调拨?我能预测一下未来一段时间某个货能卖多少吗?解决每一个问题,都能给供应链的效率和损益带来巨大价值。

那我们以调拨计划为例,看看这些算法是怎么优雅地解决这个问题的——这里说到的算法,都是传统的机器学习算法。

  模型定义:如何用数学模型定义一个调拨业务,并将业务目标变成模型目标函数

为了降低问题的复杂度,便于大家理解,这里我们的对问题的定义进行了一定的简化,比如不考虑未来销售可能存在的波动、偏仓造成的销售机会损失、货物在运输途中存在损毁概率等等。并且,下面的案例只给了一个调出仓、一个调入仓。实际业务中问题更复杂,定义约束也更多,求解的模型可能会不一样。算法大佬们轻喷~

  • 前置知识

偏仓:在仓库存在全国各个仓分布不均衡,是否均衡的判断标准是该仓覆盖范围内潜在的购买量和仓库已有库存量是否匹配

调拨:将货物从A仓集中搬运到B仓

发货:从仓库出库+运输+末端派送至消费者

跨区发货:消费者所在区域的仓缺货需要换仓从其他大区的仓发货给消费者

  • 业务分析

  1. 当在仓库存偏仓的时候,会造成跨区发货,跨区发货的快递成本比非跨区发货高

  2. 如果能提前通过集中调拨的方式将货物配平(即批量的将货物先配送到用户所在的地区的仓),且满足:单件集中调拨成本+单件发货成本 < 单件跨区发货成本

  3. 仓库的出库能力、收货能力、干线运输能力有上限限制

  4. 调出仓需要优先满足本仓覆盖范围内的潜在消费者

  • 建模

d81a7b85c42d2f4ad9137564f50da1c5.png


业务目标:我们要最小化货物从仓库到消费者手中的物流成本

成本函数:发货成本

  1. 假设有N个货品货品a5e246c6fc907bb717190d50409d9d58.png

  2. 调出仓A

  3. 调入仓B

  4. 约束1:对任意一个货品,从A仓调出量小于A仓库存-A仓自身需求量,即fb7b226de6dca240eb8a0a99f66a29f1.png,其中7a5a44b04b83ff5cade7c58b7b96124f.png表示货品e7d90a5655bd630bfb3b61c82919bf91.png从A仓的调出至B仓的量。d9d7641c92017405b7ab9156ad6140e8.png表示货品3c4579f79bb6bcf3b234af8754c7e5f1.png在A仓的库存,ba087e7353bf56c8de557f5eb2055955.png在仓库A覆盖范围内的预计售卖量表示货品0fc0368216b439d8b4415ead5b14833e.png

  5. 约束2:对任意一个货品,调入B仓的量小于B仓覆盖范围内的预计售卖量-B仓已有的在仓库存,即87eccc1cfddfc720e48de509653ed500.png,字符含义同上。

  6. 约束3:一次调拨的量,要小于A仓到B仓的干线运输能力,即80ae3f1637f45c08b17a71e23f7a7f11.png,其中bebfc93e46068ea302d82616ec9f1951.png是一个常量,表示最大的干线运输能力

  7. 目标函数:

    c26a6ad212e95b859f1b33f339c0cb8a.png

    其中b72e078bef49474b7397e3cb61b0ee8a.png是个常量,表示货品2a4f341a76134e932c5ae5a94eefd2a7.png通过跨区发货到消费者手中的发货成本,1ccf3c0f622036478d9ad47dae07011e.png是个常量,表示货品275358ba12da48ba33b38289c0b64851.png从A仓调拨到B仓的调拨成本,2fd644841eb70a7266b6c485aadb1dcc.png表示提前将货品从A仓调拨到B仓,避免跨区发货而节省的成本。因此,我们要「最小化货物从仓库到消费者手中的物流成本」,即,最大化节省的金额345f930edb9ad02613e627fc7a0692d0.png

宗上所述,模型定义如下:

84dfe030cfd87cb436e68f062324bab9.png

到这里,整个建模过程就结束了。实际上我们忽略了很多细节,但是并不影响我们理解这个调拨模型。至于模型怎么求得每一个调拨量a3f12292a0e14ebd3f71b89387480178.png以保证最大化收益,就要对这个模型进行求解了。

  模型求解:怎么才能算出目标函数最优时的参数解

  • 明确求解目标

既然要求解,我们就要明确到底要求解什么?即,在上面定义的数学模型中要明确哪些是常量哪些是变量。

很明显,我们需要求解的变量是bd4192e5ef72d2a9fd6f69af2988613c.png,即每个货品需要从A仓调拨多少件到B仓。这里为了方便解释,我们就假设一共就两个货品87ed1d49243344ef86159c09311e552f.png,相应的我们需要求解的变量就5b0baa6114f34ac77b5efeb901e46551.png

  • 求解算法

b2593d02cc5319be67dfd5ac3a8d6f8b.png

根据约束条件看,解空间就在坐标轴圈定的阴影范围内。实际上,最简单的求解方法就是暴力枚举所有可能的结果,然后求出函数值最大时对应的参数即可。

当然了,现实的问题中求解的参数量一定是远远大于2个的,因此参数求解的时间复杂度呈指数级上升,以当前的算力,可能直到生命的尽头可能都得不到答案。生命是宝贵的,对于这种问题,有没有快速的解法呢?有,这里我们就要引出一个算法概念——启发式搜索算法,这是一种算法理念的统称,具体的实现有很多种,比如模拟退火算法、遗传算法、蚁群算法等。宗旨就是在有限的时间内,得到一个近似的最优解。

这里以遗传算法为例,我们来学习它的求解过程:

遗传算法(Genetic Algorithm)遵循『适者生存』、『优胜劣汰』的原则,是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。遗传算法模拟一个人工种群的进化过程,通过选择(Selection)、交叉(Crossover)以及变异(Mutation)等机制,在每次迭代中都保留一组候选个体,重复此过程,种群经过若干代进化后,理想情况下其适应度达到近似最优的状态。算法具体逻辑可参考:https://zhuanlan.zhihu.com/p/460368294这类算法不仅很有效,而且是可理解可证明的。记得多年前,第一次接触到这种算法类型的时候,深深地感受到了前人的智慧。

在实际应用中,我们可以使用一些现成的算法求解器,例如cplex。至此,通过问题定义、建模、求解。调拨模型中,从A仓到底要调拨多少量到B仓才能节省更多的成本的问题就解决了。

a10f41c251a4584da81f787f0369830f.png

展望

面对一个需要优化的业务问题,传统的思路是从问题定义、建模再到求解。而深度学习模型的思路是:

  1. 向量化:无论什么类型的数据,文字、图片、视频、声音,首先是将数据向量化,比如文字可以使用word2vec转换成一串01向量。

  2. 将训练数据的目标结果也向量化:一般来说输入的数据和目标结果是同一种数据类型,也可以不一样。

  3. 选定目标函数:一般来说目标函数针对不同的任务类型有其固定的目标函数。比如常见的RMSE、Cross-Entropy、Categorical-Cross-Entropy等等。

  4. 训练模型:将模型输出的结果向量与目标结果向量代入目标函数,计算loss。同时计算梯度值,调整模型参数。直到在训练集上的loss足够小或者每次迭代的loss不再变低为止,训练结束。

可以理解为,无论什么问题只要将数据向量化,就可以通过深度学习模型求解。其中建模的过程可以省略,模型求解也是固定的范式。然后问题就解决了,我对这种神经网络模型也大为震撼。

人类的很多发明创造,都是从自然中学来的。比如机翼模仿的是鸟的翅膀,让上下两侧的气流速度不一样来形成向上的气压差;疏水材料模仿的是荷叶表面纹理仿制的。前面提到的启发式搜索算法,也是对自然界动植物等的模拟衍生出来的算法,原来很多问题在没有数学的时候,就能够通过生物本能的解决这个问题。同理,现在的深度学习模型,大家都说这是对人脑神经元与神经突触的模拟,同样的,我们接触的声音、视觉画面、文字等等都是通通转换成电信号,经过重重神经元之后,变成了我们可以理解的一个个具象的东西——一首歌、一部电影、一只小狗...... 神经网络模型跟这确实也有异曲同工之妙。

所以我并不觉得神经网络模型不对,只是我们对模仿的本体——大脑的科学认知都不够,那么通过模仿出来的神经网络模型让人更加不可理解,不可证明、也不可证伪。或许,现在所谓的神经网络模型压根就是错误的?或许等我们的脑科学有更大进步的时候,会有一种全新的能够科学证明的神经网络模型出现?

现在很多人把深度学习当做一个框,什么都往里装,以为深度学习就是万能解药,特别是一些神奇的大V发的文章,看多了总归有些不适。我们现在使用大模型的过程,就像三体里的火鸡科学家一样,在黑夜中不断摸索规律。至于这个规律是真理还是深坑,不得而知。大模型能发展到什么地步,那就要看后人的智慧了。

982364e426a5853e27ce319ef3ab9af4.jpeg

团队介绍

我们是大淘宝技术-品牌供给技术部,目前主要负责消费电子、家装家居、天猫优品等行业的供应链业务。团队致力于解决采购、调拨、仓储、履约等多环节的业务优化问题,为平台商家和集团自营业务提供极致的供应链体验。将仿真优化、运筹学、机器学习和智能AI算法与实际业务场景相结合,为供应链降本提效、提升消费者物流体验提供一站式解决方案。

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法

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

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

相关文章

后端项目打包上传服务器记录

后端项目打包上传服务器记录 文章目录 后端项目打包上传服务器记录1、项目打包2、jar包上传服务器 本文记录打包一个后端项目&#xff0c;上传公司服务器的过程。 1、项目打包 通过IDEA的插件进行打包&#xff1a; 打成一个jar包&#xff0c;jar包的位置在控制台可以看到。 2、…

记录--JS 的垃圾回收机制

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 垃圾回收(Garbage Collection)是一种内存管理机制&#xff0c;用于检测和清理不再被程序使用的内存&#xff0c;这些不再被使用的内存就被称为垃圾。垃圾回收器会在 JS 引擎(浏览器或者 nodejs)内…

Baklib是比语雀、Notion、石墨文档更好用的在线知识库管理工具

在当今信息爆炸的时代&#xff0c;如何高效地管理和利用知识成为了每个人都面临的问题。在线知识库管理工具应运而生&#xff0c;帮助用户整理、存储和共享知识。在这篇文章中&#xff0c;我将介绍一个更好用的在线知识库管理工具——Baklib&#xff0c;并探讨它相对于其他知识…

Python爬虫——scrapy_多条管道下载

定义管道类&#xff08;在pipelines.py里定义&#xff09; import urllib.requestclass DangDangDownloadPipelines:def process_item(self, item, spider):url http: item.get(src)filename ../books_img/ item.get(name) .jpgurllib.request.urlretrieve(url, filename…

JAVA编程学习笔记

常用代码、特定函数、复杂概念、特定功能……在学习编程的过程中你会记录下哪些内容&#xff1f;快来分享你的笔记&#xff0c;一起切磋进步吧&#xff01; 一、常用代码 在java编程中常用需要储备的就是工具类。包括封装的时间工具类。http工具类&#xff0c;加解密工具类&am…

上海亚商投顾:沪指震荡调整 房地产、券商板块逆势走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大股指今日继续调整&#xff0c;深成指尾盘跌近1%&#xff0c;科创50指数跌超1.7%。房地产板块逆势走强&#xf…

计算机视觉之三维重建(一)(摄像机几何)

针孔摄像机 添加屏障&#xff1a; 使用针孔(o光圈针孔摄像机中心)&#xff0c;实现现实与成像一对一映射&#xff0c;减少模糊。其中针孔与像平面的距离为f(焦距)&#xff1b;虚拟像平面位于针孔与真实物体之间&#xff0c;与像平面互为倒立关系。位置映射&#xff1a;利用相似…

最新SSD固态硬盘颗粒QLC、SLC、MLC、TLC详解

概要 本文从SSD结构出发&#xff0c;详细介绍NAND闪存芯片QLC、SLC、MLC、TLC之间的区别、各自的优缺点以及其适用的人群。目录一、剖析SSD二、什么是NAND闪存三、单层单元&#xff08;Single Level Cell&#xff0c;简称SLC&#xff09;四、多层单元&#xff08;Multi Level C…

CAD图像转地形插件

插件介绍 CAD图像转地形插件可用于在AutoCAD软件内基于图片图像信息生成三维高度实体模型&#xff0c;适用于科研论文渲染绘图、有限元建模、地形模拟等方面的应用。 使用说明 对于一张图片来说&#xff0c;如灰度图&#xff0c;其图片信息是像素的亮度差异&#xff0c;这样一…

yolov5封装进ros系统

一&#xff0c;要具备ROS环境 ROS环境搭建可以参考我之前的文章 ROS参考文章1 ROS参考文章2   建立ROS工作空间 ROS系统由自己的编译空间规则。 cd 你自己想要的文件夹&#xff08;我一般是home目录&#xff09; mkdir -p (你自己的文件夹名字&#xff0c;比如我是yolov5…

团队中的意外:如何稳定船舶当风暴来临

项目管理不仅仅是任务分配和里程碑跟踪。在项目生命周期中&#xff0c;经常会遇到许多意想不到的挑战。其中之一就是团队成员的突然离职、生病或其他意外情况。作为项目经理&#xff0c;如何应对这些突发情况&#xff0c;确保项目的稳定进展&#xff0c;是检验项目经理能力的关…

(白帽黑客)自学笔记

一、前言&#xff1a; 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以…

Linux下的thundersvm的安装经验

之前写过一篇文章是关于windows下安装thundersvm的。当初在linux下安装thundersvm很容易&#xff0c;因为我的CUDA正好是9.0版本。所以一句命令 pip install thundersvm 即可安装。 但如果CUDA版本不是9.0&#xff0c;安装就比较麻烦。本文记录的是一种可行的方法&#xff0c;但…

C语言刷题训练DAY.6

1.进制AB 解题思路&#xff1a; 这里我们按照备注的提示&#xff0c;调整输入格式。 注意&#xff1a;%x是十六进制的数字 %o是八进制的数字 解题代码&#xff1a; #include<stdio.h> int main() {int a 0;int b 0;scanf("0x%x 0%o", &a, &b);pri…

微信开发者工具项目简单介绍和使用

主要目录简介&#xff1a; 页面文件的简介&#xff1a; 四个json文件的简介&#xff1a; 1.app.json 2.project.config.json 3.sitemap.json 4.页面中的json 简单操作 1.快速新建小程序页面&#xff0c;在app.json的pages下编写页面的路径&#xff0c;保存后微信开发者工具会自…

数据结构与算法-Java篇

1.队列问题 队列是一个有序列表&#xff0c;可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据&#xff0c;要先取出。后存入的要后取出 1.1 数组模拟队列 1.1.1 单列队列 MaxSize表示队列的容量因为队列的输出、输入是分别从前后端来处理&#xff0c;因此…

深度学习模型训练好后使用time.time()测试处理每一帧速度(时间)和模型推理速度(时间)

在深度学习中&#xff0c;如果想测试训练好的模型处理每一帧图像的运行时间&#xff0c;可以在模型预测代码段添加时间统计的逻辑: 目录 加载预训练模型遍历测试图像汇总统计预测测试集全部图像的平均处理时间测试结果样式 加载预训练模型 model torch.load(best_model.pth) …

图数据库的挑战是什么?

无论是什么数据库&#xff0c;如果不突出性能这个第一生产力&#xff0c;那么还有什么继续深入了解它的必要呢&#xff1f;图数据库尤其如此——因为图数据库解决的最主要的挑战就是传统数据库在面对深度数据间的关联关系时指数级性能下降、时耗增长的问题。 这里我们就不去赘述…

uni-app自定义多环境配置,动态修改appid

背景 在企业级项目开发中&#xff0c;一般都会分为开发、测试、预发布、生产等多个环境&#xff0c;在工程化中使用不同的打包命令改变环境变量解决不同环境各种变量需要手动修改的问题&#xff0c;比如接口请求地址&#xff0c;不同环境的请求路径前缀都是不同的。在使用uni-…

百度王海峰披露飞桨生态最新成果 开发者数量已达800万

8月16日&#xff0c;由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT深度学习开发者大会2023在北京举行。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰做了主题演讲。王海峰首次对外表示&#xff0c;大语言模型具备了理解、生成、逻辑、记忆等人工智…