作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
建立高效的供应链是2020年最大的挑战之一,这不仅仅是因为COVID-19大流行带来的中断. 供应链是 紧张 在大流行之前,由于全球劳动力和设备的瓶颈和短缺. 以满足需求, 市场参与者必须通过数字化和智能规划迅速实现业务流程的现代化.
我的职业是开发人员 数据科学顾问 专注于重工业:铁路、采矿、石油和天然气、航运和邮政物流. 在过去的几年里,所有这些行业都受到了供应链问题的极大影响. 在这篇文章中,我将探讨如何 数学优化建模 和 Python 能否解决采矿业面临的核心挑战:满足定制需求,实现利润最大化 产品混合.
在典型的供应链场景中,供应商向客户交付特定的成品. 在我们的例子中,要做到这一点,供应商必须:
做得正确, 产品混合使供应商能够利用客户需求和供应链之间的权衡来实现价值最大化. 数学优化建模是解决产品混合与物流挑战(如调度)相结合的理想解决方案, 规划, 包装, 和路由.
图论方法,比如 网络流程优化,能够有效应对具有明确限制范围的挑战(例如.g.比如询问谷歌地图如何从A地到达B地)。. 但要处理影响供应链重叠方面的更复杂的挑战(例如.g.(产品混合); 混合整数规划 是一个强大的框架. 快, 的研究, ,建立了, 混合整数规划允许用户解决绝大多数调度问题, 规划, 以及路由问题.
为了建模和解决供应链问题,我建议使用Python及其 开源 库,因为它们强大的优化社区.
作为产品混合的一个例子, 让我们考虑一个采矿供应链,它由几个矿山组成,并生产各种原材料组件. 通常,这些组件必须路由到海港. 为了使我们的示例保持简单, 我们将通过铁路网连接到一个海港,铁路网也将连接到矿山.
我们将使用以下术语:
组件 | 组件是一个原始的生产项目(例如.g.(一种铜或铁矿石),产自特定地点. |
产品 | 产品是成品, 由客户要求和定义, 通常含有多种成分的混合物,并在规定的质量范围内. |
混合 | 混合是将各种成分组合在一起形成产品, 要么在目标位置(通常是, (客户的船只)或供应链中的某个点. |
规范分析 | 规格或规格分析是对组分属性(如.g.,水分含量). 通常, 工程师进行大约20到100次分析, 每一种测试都测试了原材料的不同特性. |
从矿山回收的原材料部件通过铁路运输到港口, 以客户船为最终目的地. 视指定港口靠泊时间表或其他情况而定, 可能需要在库存中临时存储组件. 在港口, 列车要么将货物存放到库存上,要么将货物直接卸载到客户的船只上(我们称之为货轮) 直接命中).
部件储存在矿井和海港. 矿山通常建在储存空间便宜且充足的偏远地区. 港口, 另一方面, 存在于通常空间有限的工业区, 提高港口库存的使用成本.
我们假设的客户要求由不同成分组成的产品混合物. 这些混合物必须符合客户定义的相关矿物属性标准(例如.g., 企业社会责任 值). 来说明这个模型是如何建立的, 假设我们有三个矿,生产七种成分, 如下:
我的一个 | 生产成分A1 A2 A3. |
我的B | 产生组分B1 B2. |
我的C | 生产组分C1, C4. |
组件名称中的字母表示该组件的源矿(source mine).g.(组件A3来自矿山A). 让我们同意共享一个数字的组件是相似的, 我们可以同等对待它们:例如, A1, B1, 和C1本质上是同一种原料.
所有部件都通过铁路运输到港口, 在那里我们可以直接打击或者把每个部件都储存在合适的仓库里. 空间限制可能会禁止我们单独存储组件. 像这样, 混合产品时, 我们可能无法单独获得每一个组件,可能需要同时从一个库存中提取多个组件.
现在,让我们讨论一下客户对其产品通常要求的混合规则.
客户通常会根据客户特定的规则要求混合成分,包括如何进行混合以及需要进行哪些规格分析. 这些规则分为两类, 组件混合规则 和 规格混合规则.
描述 | 例子 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
组件混合规则 | 组成产品的每种成分的比例被定义为整体的比例或百分比. |
产品库存(又称混合库存),分类如下:
| |||||||||
规格混合规则 |
产品的值边界是为每个已定义的产品属性建立的. 产品性能通过规格分析测定. 值包括:
|
如果满足以下条件,我们可以接受我们前面例子中的产品:
|
请注意,, 通常, 偏差惩罚量随边界违犯的增加呈线性函数增加:
混合的优化包括在接受规格混合的惩罚和组件的可用性之间进行权衡.
在创建产品混合模型时,我们必须在不同的提取类型之间进行选择. 对于混合, 平均提取 最常见的拔牙类型是什么. 在平均提取中, 我们的模型基于一个假设,即库存中的所有成分都完全混合在一起. 分层开采,其中我们使用a进行建模 以后,出 规则,是使用平均提取的另一种选择:
平均提取 |
|
分层开采 |
|
分层提取的想法可能很吸引人, 因为它紧密地模拟了大多数库存的存储物流的现实. 然而, 从数学建模的角度来看, 由于计算的原因,平均提取是首选的. 业务专业人员和工程师应该仔细评估使用分层提取的决定,以避免在建模方法中引入不必要的复杂性.
当使用平均提取时, 萃取组分的比例与未萃取组分的比例相同. 例如, 平均萃取是指从储备X中提取的含有75%成分A3和25%成分C4的萃取物,其整体成分和比例与储备X相同.
当使用分层提取时, 所提取的成分之间的比例很少, 如果有, 与未提取的成分相同. 分层提取法表明, 例如, 从X储备中提取的物资不一定全部包含与X储备相同的成分, 和储备X的比例不一样. 这是因为我们将提取存储库顶部的任何组件(last-in), 出).
分层抽取的不一致性使得对加载变量建模变得困难. 因此, 平均提取, 这样可以避免加载变量之间复杂的相互依赖关系, 当分层提取不是业务需求时,是首选选项(另见“编码解决产品混合”).
让我们考虑平均提取的情况. 假设我们想要监控和建模存放在库存或客户容器中的组件. 以下是三种可能的提取和建模场景:
场景1:单一提取建模 我们可以提取任何/所有组件,而不考虑类型. 在这个例子中, 我们可以将组件A1(来自矿山A)和B1(来自矿山B)视为相同的组件,因为它们足够相似. | |
场景2:产品混合提取建模 我们可以提取出一种可行的产品混合物. 在这个例子中, 提取的产品共混物符合客户的产品共混规则要求:
| |
场景3:灵活的混合提取建模 我们只能提取不符合客户组件混合规则的无效组件组合,因此不能单独形成产品. 在本例中,由于A3和C4组分的混合物不能形成有效产品,我们可以:
|
从建模的角度来看, 我建议创建混合整数规划公式来解决产品混合问题. 我们可以只用实值变量和线性约束对产品混合进行建模, 使计算和监测混合物相对容易.
当产品混合建模与需要二元变量进行建模的调度决策重叠时,事情会变得复杂, 比如决定船只靠泊或火车时刻表.
Python是编码和求解混合整数编程公式的理想工具. 使用 纸浆 图书馆制定供应链问题, 比如定义变量, 约束, 目标函数. 方便的是,纸浆的语法非常类似于一个简洁的数学公式.
然后,您可以集成一个开源求解器,如 加拿大广播公司 或者,如果你的预算允许,一个商业求解器 Gurobi or 最大化策略. 与加拿大广播公司相比,商业选项提供了巨大的性能提升.
下面的伪代码示例演示了如何定义加载变量和约束. 加载变量为:
载荷[v=容器,p=港口,c=部件,prd=产品,t=时间]
这些变量有五个指标:船舶、港口、部件、产品和时间. 在实践中,您将定义更多类型的加载变量.
向加载变量添加产品索引对于跟踪指定组件的特定产品非常有用. 因为加载变量是实数(而不是整数), 它们不会对计算构成很大的挑战. 组件混合规则 现在可以建模如下:
load[v, p, A2, prd, t] >= 0.5 * sum(load[v, p, c, prd, t],用于容器v的产品prd的所有c)
load[v, p, C1, prd, t] <= 0.2 * sum(为容器v的产品prd服务的所有c的load[v, p, c, prd, t])
load[v, p, C1, prd, t] + load[v, p, B2, prd, t] <= 0.5 * sum(load[v, p, c, prd, t],用于容器v的产品prd的所有c)
规格混合规则 可以用类似的线性方法实现吗. 然而, 这些约束条件会稍微复杂一些, 因为规格分析通常是按负载量标准化的. 虽然执行起来更简单, 直接建模会引入非线性和, 因此, 不切实际. 而不是, 最好先计算加权伪化验值,然后重新应用线性方程. 注意:约束可能与二进制调度变量重叠,但这超出了本文的讨论范围.
我衷心建议将混合规则合并到供应链模型中. 我过去的客户在优化客户特定混合方面取得了一致的成功, 这仅仅增加了调度模型的计算复杂度.
产品混合与铁路和港口运营密切相关, 严重影响日常决策, 例如在哪里运输哪些组件或在哪里存放和/或提取组件.
理想的数字状态是一个全面的调度工具,为铁路和港口提供前瞻性的建议, 以混合优化模型集成为关键部分. 适当时(e).g., 因应不断变化的天气情况), 由授权的铁路和港口运营商临时解决问题可以纠正选定的建议.
对于每个独特的供应链,定制调度工具是有意义的. 使用一个 敏捷过程,我们可以在完整的数字工具发布之前确定产品混合的影响. 在任何时候,与运营者和协调者的密切合作将对解决任何问题大有帮助 变更管理 风险.
构造和编码构建调度应用程序所需的模型, 利用数据科学家的才能, 数据工程师,以及优化专家. 在当今充满挑战和竞争的环境中, 实施产品混合的企业在竞争中保持领先地位.
Toptal工程博客的编辑团队向 约翰。李 查看本文中提供的代码示例和其他技术内容.
产品混合是将各种成分混合在一起制成成品的过程.
产品混合是创建所要求的定制产品所必需的.
优化供应链意味着提高其整体效率, 从源头到最终目的地.
供应链优化非常重要,因为它是提高成本效率和满足客户需求的最佳杠杆之一.
纸浆是一个Python库,可以方便地访问许多优化框架.
世界级的文章,每周发一次.
世界级的文章,每周发一次.