ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Python实现供应链端到端协同优化:SCOPE耦合策略建模与仿真

Python实现供应链端到端协同优化:SCOPE耦合策略建模与仿真 在实际供应链管理项目中协调上下游企业间的运营决策是一个经典难题。生产计划、库存策略、运输调度和需求预测如果各自为政往往导致整体效率低下出现“牛鞭效应”或局部最优但全局亏损的局面。SCOPESupply-Chain Operations through Coupled Policies for End-to-End Coordination这一概念正是为了解决端到端供应链的协同问题而提出的。它强调通过耦合策略将分散的决策点连接起来形成一个能够协同响应市场变化的有机整体。对于供应链管理者、系统架构师以及从事运筹优化算法开发的工程师而言理解并实践SCOPE的思想至关重要。本文将从零开始拆解SCOPE的核心机制并通过一个简化的模拟案例展示如何设计耦合策略、构建协同模型并最终验证其对供应链整体绩效的提升。我们将使用Python作为主要工具因为它拥有丰富的科学计算和优化库。通过本文你将能够掌握构建一个最小可行协同模型的方法理解关键参数的意义并学会如何排查模型不收敛或结果反直觉的常见问题。1. 理解SCOPE为什么耦合策略是端到端协同的核心在深入代码之前必须厘清SCOPE要解决的根本问题以及“耦合策略”的具体含义。传统的供应链软件或ERP系统虽然集成了多个模块但其底层的决策逻辑常常是顺序或孤立的。例如销售模块给出预测生产模块据此制定计划采购模块再根据生产计划下单。这种“抛过墙”式的协作缺乏反馈与即时调整无法应对实时波动。1.1 从“孤立决策”到“耦合策略”“耦合策略”指的是将供应链中不同环节的决策变量如生产量、库存水平、发货量通过一组共享的目标函数和约束条件动态地联系起来。一个环节的决策会立即影响其他环节的可行域与目标值从而驱动系统寻找全局最优解而非局部最优。举例来说不考虑运输能力的生产计划可能导致爆仓不考虑生产柔性的采购计划可能造成原料堆积。耦合策略就是在做生产计划时同时将库存成本、运输能力、采购提前期作为约束条件纳入同一个优化模型中。1.2 SCOPE的典型技术架构与核心组件一个实现SCOPE思想的系统通常包含以下几个核心组件统一数据模型定义供应链网络实体工厂、仓库、零售商及其属性产能、成本、提前期和关系运输链路。耦合优化引擎这是核心接收实时数据如需求、库存状态基于耦合策略求解全局或局部优化问题输出协同决策指令。策略协调器在完全集中式优化不可行时如涉及多家企业负责在分布式决策实体间交换信息、协调策略以达到近似全局最优的效果。仿真与评估模块用于在策略部署前模拟其在各种市场场景下的表现评估稳健性。在本文的简化实践中我们将聚焦于前两个组件构建一个集中式的耦合优化模型。2. 环境准备与依赖配置我们将构建一个包含单一产品、一个工厂、一个中央仓库和三个零售点的简化供应链模型并为其设计耦合的生产-库存-分配策略。2.1 环境与工具清单以下是实现本案例所需的环境和Python库。建议使用Anaconda创建独立的虚拟环境。组件推荐版本用途说明Python3.8编程语言基础环境Jupyter Notebook / Lab可选交互式开发与演示NumPy1.20数值计算基础Pandas1.3数据处理与分析Matplotlib3.5结果可视化PuLP / OR-Tools最新线性/整数规划求解器接口SciPy1.7科学计算可选用于高级优化2.2 安装依赖在终端或命令行中使用pip安装核心库。我们选择PuLP作为优化建模接口因为它轻量且易于理解。# 创建并激活虚拟环境以conda为例 conda create -n scope_demo python3.9 conda activate scope_demo # 安装核心依赖 pip install numpy pandas matplotlib pulpPuLP默认会调用其内置的CBC求解器对于中小型线性规划问题足够使用。如果需要更强大的商业或开源求解器如GLPK, Gurobi, CPLEX需额外安装并配置。2.3 项目结构规划在开始编码前规划一个清晰的目录结构有助于管理代码和数据。supply_chain_scope_demo/ ├── data/ # 存放输入数据 │ ├── demand_forecast.csv # 需求预测数据 │ └── network_params.json # 网络参数成本、产能等 ├── src/ # 源代码 │ ├── __init__.py │ ├── model.py # 定义供应链网络和优化模型 │ ├── solver.py # 求解器封装与调用 │ └── simulator.py # 策略仿真与评估 ├── configs/ # 配置文件 │ └── config.yaml # 模型参数配置 ├── outputs/ # 输出结果 │ ├── results/ # 优化结果CSV │ └── figures/ # 生成的分析图表 ├── tests/ # 单元测试 └── main.py # 主程序入口我们将首先在Jupyter Notebook或一个单独的脚本中完成核心模型的构建待模型稳定后再重构为上述模块化结构。3. 构建最小可行耦合优化模型本节将分步构建一个多周期、多层级的供应链优化模型。我们的目标是在满足动态需求的前提下最小化总成本包括生产成本、库存持有成本和运输成本。3.1 定义问题参数与数据首先我们定义模型的基本参数。这些参数通常来自历史数据或业务预测。import numpy as np import pandas as pd # 供应链网络参数 # 节点工厂(0), 中央仓库(1), 零售商(2,3,4) nodes [Factory, Warehouse, Retailer_1, Retailer_2, Retailer_3] node_indices {name: idx for idx, name in enumerate(nodes)} # 运输链路 (From, To)。这里假设工厂只供货给仓库仓库供货给零售商。 arcs [ (Factory, Warehouse), (Warehouse, Retailer_1), (Warehouse, Retailer_2), (Warehouse, Retailer_3), ] arc_indices {(node_indices[f], node_indices[t]): idx for idx, (f, t) in enumerate(arcs)} # 成本参数 # 生产成本元/单位 production_cost {node_indices[Factory]: 50} # 库存持有成本元/单位/周期 holding_cost {node_indices[Warehouse]: 2, node_indices[Retailer_1]: 5, node_indices[Retailer_2]: 5, node_indices[Retailer_3]: 5} # 运输成本元/单位基于链路 transport_cost {arc_indices[(node_indices[Factory], node_indices[Warehouse])]: 10, arc_indices[(node_indices[Warehouse], node_indices[Retailer_1])]: 8, arc_indices[(node_indices[Warehouse], node_indices[Retailer_2])]: 12, arc_indices[(node_indices[Warehouse], node_indices[Retailer_3])]: 15} # 能力与需求参数 # 工厂最大产能单位/周期 production_capacity {node_indices[Factory]: 200} # 仓库最大库存容量 storage_capacity {node_indices[Warehouse]: 500} # 运输链路容量单位/周期 transport_capacity {aidx: 100 for aidx in transport_cost.keys()} # 简化每条链路容量100 # 规划周期数例如12周 T 12 # 零售商需求预测单位/周期 形状为 (T, 零售商数量) # 这里随机生成实际应从文件读取 np.random.seed(42) demand_forecast np.random.randint(20, 50, size(T, 3)) # 3个零售商 # 转换为字典键为 (周期t, 零售商节点索引) demand {(t, node_indices[fRetailer_{i1}]): demand_forecast[t, i] for t in range(T) for i in range(3)} # 初始库存 initial_inventory {node_indices[Warehouse]: 100, node_indices[Retailer_1]: 30, node_indices[Retailer_2]: 30, node_indices[Retailer_3]: 30}3.2 使用PuLP构建耦合优化模型现在我们使用PuLP库将上述业务问题转化为一个线性规划模型。决策变量将包括每个周期的生产量、运输量和库存量。import pulp # 创建问题实例目标是 Minimize最小化总成本 model pulp.LpProblem(Supply_Chain_SCOPE_Optimization, pulp.LpMinimize) # 定义决策变量 # 生产量工厂在周期t的生产量 prod_vars pulp.LpVariable.dicts(Production, ((t, node_indices[Factory]) for t in range(T)), lowBound0, catContinuous) # 运输量在周期t从节点i运到节点j的量 trans_vars pulp.LpVariable.dicts(Transport, ((t, i, j) for t in range(T) for (i, j) in arc_indices.keys()), lowBound0, catContinuous) # 库存量节点i在周期t结束时的库存量 inv_vars pulp.LpVariable.dicts(Inventory, ((t, i) for t in range(T) for i in holding_cost.keys()), lowBound0, catContinuous) # 定义目标函数总成本最小化 # 总成本 生产成本 库存持有成本 运输成本 total_cost ( pulp.lpSum([production_cost[node_indices[Factory]] * prod_vars[t, node_indices[Factory]] for t in range(T)]) # 生产成本 pulp.lpSum([holding_cost[i] * inv_vars[t, i] for t in range(T) for i in holding_cost.keys()]) # 库存成本 pulp.lpSum([transport_cost[arc_indices[(i, j)]] * trans_vars[t, i, j] for t in range(T) for (i, j) in arc_indices.keys()]) # 运输成本 ) model total_cost # 定义约束条件耦合的核心 # 1. 生产产能约束 for t in range(T): model prod_vars[t, node_indices[Factory]] production_capacity[node_indices[Factory]] # 2. 库存平衡约束这是耦合的关键 # 对于工厂只有流出无外部需求 for t in range(T): # 期初库存t0时为初始库存t0时为上期末库存 inv_previous initial_inventory[node_indices[Factory]] if t 0 else inv_vars[t-1, node_indices[Factory]] # 工厂库存平衡上期库存 本期生产 - 本期运出 本期库存 # 注意我们假设工厂不持有成品库存生产后立即运出所以工厂库存变量可省略。这里为演示完整性保留。 # 更常见的做法是工厂无库存生产量等于运出量。我们采用简化版 model (prod_vars[t, node_indices[Factory]] pulp.lpSum([trans_vars[t, node_indices[Factory], j] for j in [node_indices[Warehouse]] if (node_indices[Factory], j) in arc_indices])) # 对于仓库和零售商 for t in range(T): for node in [node_indices[Warehouse], node_indices[Retailer_1], node_indices[Retailer_2], node_indices[Retailer_3]]: # 期初库存 inv_previous initial_inventory.get(node, 0) if t 0 else inv_vars[t-1, node] # 流入量所有指向该节点的运输量 inflow pulp.lpSum([trans_vars[t, i, node] for i in range(len(nodes)) if (i, node) in arc_indices]) # 流出量所有从该节点出发的运输量 outflow pulp.lpSum([trans_vars[t, node, j] for j in range(len(nodes)) if (node, j) in arc_indices]) # 本期需求只有零售商有 node_demand demand.get((t, node), 0) # 库存平衡约束上期库存 流入 - 流出 - 需求 本期库存 model (inv_previous inflow - outflow - node_demand inv_vars[t, node]) # 3. 库存容量约束 for t in range(T): for node, cap in storage_capacity.items(): model inv_vars[t, node] cap # 4. 运输容量约束 for t in range(T): for (i, j), cap in transport_capacity.items(): model trans_vars[t, i, j] cap # 5. 非负约束已在变量定义时通过lowBound0设定 print(f模型构建完成。共有 {len(model.variables())} 个变量 {len(model.constraints)} 个约束。)这段代码是SCOPE思想的核心体现。库存平衡约束将生产、运输、库存和需求动态地耦合在了一起。任何一个环节的决策变化如增加生产都会通过这个约束网络影响其他所有环节的决策空间和目标函数。3.3 求解模型并提取结果构建模型后调用求解器进行计算。# 求解模型 solver pulp.PULP_CBC_CMD(msgFalse) # 关闭求解器日志msgTrue可查看过程 model.solve(solver) # 检查求解状态 print(f求解状态: {pulp.LpStatus[model.status]}) print(f优化目标值总成本: {pulp.value(model.objective):.2f} 元) if model.status pulp.LpOptimal: # 提取生产计划 production_plan [] for t in range(T): prod_val pulp.value(prod_vars[t, node_indices[Factory]]) production_plan.append(prod_val) print(f\n生产计划周期 0 到 {T-1}: {production_plan}) # 提取关键路径的运输计划例如工厂到仓库 transport_plan_fw [] for t in range(T): trans_val pulp.value(trans_vars[t, node_indices[Factory], node_indices[Warehouse]]) transport_plan_fw.append(trans_val) print(f工厂-仓库运输计划: {transport_plan_fw}) # 提取期末库存例如仓库 inventory_plan_wh [] for t in range(T): inv_val pulp.value(inv_vars[t, node_indices[Warehouse]]) inventory_plan_wh.append(inv_val) print(f仓库期末库存: {inventory_plan_wh}) else: print(模型未找到最优解。请检查约束是否过紧导致不可行。)4. 结果分析与可视化验证耦合策略的效益得到优化结果后我们需要分析其是否合理并与一种“非耦合”的基准策略进行对比以直观展示SCOPE的价值。4.1 可视化优化结果我们将生产、运输和库存计划绘制在一张图上观察其协同关系。import matplotlib.pyplot as plt # 准备数据 periods list(range(T)) # 获取零售商1的需求用于对比 demand_r1 [demand[(t, node_indices[Retailer_1])] for t in periods] fig, axs plt.subplots(2, 2, figsize(14, 10)) # 子图1生产与关键运输 axs[0, 0].plot(periods, production_plan, o-, label生产计划, linewidth2) axs[0, 0].plot(periods, transport_plan_fw, s-, label工厂-仓库运输, linewidth2) axs[0, 0].set_xlabel(周期) axs[0, 0].set_ylabel(数量单位) axs[0, 0].set_title(生产与上游运输计划) axs[0, 0].legend() axs[0, 0].grid(True, linestyle--, alpha0.7) # 子图2仓库库存 axs[0, 1].plot(periods, inventory_plan_wh, ^-, colorgreen, label仓库库存, linewidth2) axs[0, 1].axhline(ystorage_capacity[node_indices[Warehouse]], colorr, linestyle--, label仓库容量上限) axs[0, 1].set_xlabel(周期) axs[0, 1].set_ylabel(库存量单位) axs[0, 1].set_title(仓库库存水平) axs[0, 1].legend() axs[0, 1].grid(True, linestyle--, alpha0.7) # 子图3需求与满足情况以零售商1为例 # 计算运送到零售商1的量 transport_to_r1 [pulp.value(trans_vars[t, node_indices[Warehouse], node_indices[Retailer_1]]) for t in periods] axs[1, 0].bar(periods, demand_r1, alpha0.6, label零售商1需求, colororange) axs[1, 0].plot(periods, transport_to_r1, d-, colorpurple, label实际配送量, linewidth2) axs[1, 0].set_xlabel(周期) axs[1, 0].set_ylabel(数量单位) axs[1, 0].set_title(零售商1需求与配送对比) axs[1, 0].legend() axs[1, 0].grid(True, linestyle--, alpha0.7) # 子图4成本构成分析可选需要提取更多数据 # 计算各周期成本 production_costs [production_cost[node_indices[Factory]] * production_plan[t] for t in periods] holding_costs [holding_cost[node_indices[Warehouse]] * inventory_plan_wh[t] for t in periods] transport_costs_fw [transport_cost[arc_indices[(node_indices[Factory], node_indices[Warehouse])]] * transport_plan_fw[t] for t in periods] width 0.35 bottom np.zeros(T) p1 axs[1, 1].bar(periods, production_costs, width, label生产成本, bottombottom) bottom production_costs p2 axs[1, 1].bar(periods, holding_costs, width, label库存成本, bottombottom) bottom holding_costs p3 axs[1, 1].bar(periods, transport_costs_fw, width, label运输成本, bottombottom) axs[1, 1].set_xlabel(周期) axs[1, 1].set_ylabel(成本元) axs[1, 1].set_title(各周期成本构成堆叠) axs[1, 1].legend() axs[1, 1].grid(True, linestyle--, alpha0.7, axisy) plt.tight_layout() plt.show()通过图表我们可以分析生产与运输的同步性理想情况下生产计划应与向仓库的运输计划紧密匹配避免工厂堆积。库存的缓冲作用仓库库存应在需求波谷时积累在需求波峰时释放平滑生产压力。需求满足率实际配送量应完全覆盖需求否则模型可能因产能或运输能力不足而存在缺货。成本结构观察哪个成本项是主要支出为后续优化提供方向。4.2 与非耦合策略顺序决策对比为了凸显耦合策略的价值我们设计一个简单的“顺序决策”基准策略预测驱动生产生产量等于未来N期如3期的预测需求总和。库存驱动补货当仓库库存低于安全库存时向工厂下单补货补货量为固定值。需求驱动配送根据零售商当期需求从仓库库存中配送。我们实现这个策略并计算其总成本。def sequential_policy(demand_forecast, initial_inv_wh, production_cap, transport_cap, safety_stock50, order_up_to150): 顺序决策策略模拟 T demand_forecast.shape[0] num_retailers demand_forecast.shape[1] # 初始化记录 prod_seq np.zeros(T) inv_wh_seq np.zeros(T) inv_wh_seq[0] initial_inv_wh transport_fw_seq np.zeros(T) # 工厂到仓库 transport_wr_seq np.zeros((T, num_retailers)) # 仓库到零售商 total_cost_seq 0.0 for t in range(T): # 1. 生产决策基于未来3期需求预测 lookahead 3 future_demand demand_forecast[t:min(tlookahead, T), :].sum() planned_prod min(future_demand, production_cap) prod_seq[t] planned_prod total_cost_seq planned_prod * production_cost[node_indices[Factory]] # 2. 运输决策工厂-仓库生产多少运多少受运力限制 ship_fw min(planned_prod, transport_cap[0]) # 假设transport_cap[0]是工厂-仓库运力 transport_fw_seq[t] ship_fw total_cost_seq ship_fw * transport_cost[0] # 假设transport_cost[0]是工厂-仓库运费 # 更新仓库在途库存简化假设当期到达 inv_wh_seq[t] ship_fw # 3. 配送决策仓库-零售商尽力满足当期需求 for r in range(num_retailers): demand_t demand_forecast[t, r] # 可配送量受仓库库存和链路运力限制 available_to_ship min(inv_wh_seq[t], transport_cap[1r]) # 假设后续运力对应零售商 ship_qty min(demand_t, available_to_ship) transport_wr_seq[t, r] ship_qty total_cost_seq ship_qty * transport_cost[1r] # 对应零售商运费 inv_wh_seq[t] - ship_qty # 4. 计算库存持有成本 total_cost_seq inv_wh_seq[t] * holding_cost[node_indices[Warehouse]] # 5. 滚动到下一期期初库存t1 if t T-1: inv_wh_seq[t1] inv_wh_seq[t] return total_cost_seq, prod_seq, inv_wh_seq, transport_fw_seq # 运行顺序策略 cost_seq, prod_seq, inv_seq, trans_seq sequential_policy( demand_forecast, initial_inventory[node_indices[Warehouse]], production_capacity[node_indices[Factory]], list(transport_capacity.values()) # 传递运力列表 ) print(f\n 策略对比 ) print(f耦合优化策略总成本: {pulp.value(model.objective):.2f} 元) print(f顺序决策策略总成本: {cost_seq:.2f} 元) cost_reduction (cost_seq - pulp.value(model.objective)) / cost_seq * 100 print(f成本降低: {cost_reduction:.2f}%)通过对比通常会发现耦合优化策略的总成本显著低于顺序决策策略。这是因为耦合策略能够全局统筹例如在需求低时减少生产并消耗库存在需求高前提前备货并平衡运输与库存成本。5. 常见问题排查与模型调试在实际应用中优化模型可能无法求解或给出反直觉的结果。以下是几个常见问题及其排查路径。5.1 模型状态异常排查问题现象可能原因检查与解决步骤求解状态为Infeasible不可行1. 约束条件相互矛盾。2. 需求总量长期超过最大产能。3. 初始库存不足且无补给路径。1.检查库存平衡约束确保每个节点的“流入期初库存 流出需求”。2.松弛约束暂时调大产能或库存容量上限看是否可行。3.查看不可行约束使用model.constraints打印所有约束或尝试求解器提供的不可行性分析功能如PuLP的pulp.constraints。求解状态为Unbounded无界目标函数可以无限小成本无限低。通常是因为缺少约束例如“生产量”或“运输量”没有上限且能带来负成本错误地设置了收益。1.检查成本系数确保所有成本production_cost,holding_cost,transport_cost均为非负值。2.检查决策变量上界为关键变量如生产、运输添加上界约束产能、运力。3.检查目标函数确认是Minimize而不是Maximize。求解时间过长或内存溢出问题规模过大周期T太长、节点太多。1.减少规划周期先测试小规模问题如T4。2.聚合节点将多个零售商聚合成一个区域。3.使用更高效的求解器如商用求解器Gurobi、CPLEX。4.考虑启发式或分解算法对于大规模问题精确优化可能不现实。5.2 结果反直觉分析反直觉现象可能原因与排查方向生产计划为01.生产成本过高检查production_cost是否设置得异常高导致生产不如消耗初始库存划算。2.初始库存充足初始库存足以覆盖整个规划期的需求。3.需求为0检查demand字典是否正确地生成了非零需求。库存始终为01.库存持有成本过高如果holding_cost远高于缺货成本模型中未体现模型会倾向于零库存。2.运输提前期为0我们的模型是单周期运输如果运输即时到达则无需持有库存。现实中需引入在途库存和提前期约束。运输量未达满负荷但成本仍高1.成本结构失衡可能某一项成本如固定成本未被建模。检查是否只考虑了变动成本。2.需求模式特殊需求波动过大即使优化也无法平滑运营。可以分析需求标准差。5.3 关键参数敏感性分析模型结果对参数非常敏感。进行敏感性分析是理解模型行为和制定稳健策略的关键。def run_sensitivity_analysis(base_holding_cost, variation_pct0.2, steps5): 分析库存持有成本对总成本和平均库存水平的影响 results [] for pct in np.linspace(-variation_pct, variation_pct, steps): adjusted_cost base_holding_cost * (1 pct) # 重新定义holding_cost并求解模型此处需重构模型为简洁省略详细代码 # 假设有一个函数 solve_model_with_params(holding_cost_dict) # total_cost, avg_inv solve_model_with_params({...: adjusted_cost}) # results.append((adjusted_cost, total_cost, avg_inv)) print(f模拟持有成本调整为 {adjusted_cost:.2f} 时进行求解...) # 绘制成本、库存随持有成本变化的曲线 # ... # 调用示例分析仓库持有成本的影响 run_sensitivity_analysis(holding_cost[node_indices[Warehouse]])通过分析你可以回答业务问题“如果仓库租金上涨20%我们的总成本会增加多少最优库存策略应如何调整”6. 从模型到生产最佳实践与扩展方向将演示模型转化为生产级应用还需要考虑诸多工程和实践因素。6.1 生产环境考量清单方面考量点与建议数据输入1.数据管道建立从ERP、WMS、TMS系统自动抽取清洗数据的管道。2.预测不确定性使用概率预测如分位数替代单点预测并采用鲁棒优化或随机规划。3.实时性定义模型重跑触发机制如每日、或当需求偏差超过阈值时。模型复杂度1.非线性与整数约束引入固定运输成本、最小生产批量等模型会变为混合整数规划MIP需使用pulp.LpInteger变量和更强求解器。2.多产品耦合产品间共享产能或运输工具需增加维度并修改约束。3.动态网络节点或链路可能随时间变化如仓库关闭。系统集成1.结果导出优化结果需以标准格式如JSON, CSV发布到消息队列或API供下游系统如WMS调度消费。2.人机交互提供UI让计划员调整参数如手动锁定某些决策、查看多种方案对比。性能与监控1.求解监控记录每次求解的变量规模、求解时间、目标值、gap对于MIP。2.异常处理模型不可行或无界时应有降级方案如使用上一周期计划和告警。3.版本控制对模型代码、参数配置进行版本控制。6.2 模型扩展方向引入安全库存与服务水平约束# 在模型中添加约束期末库存 安全库存 safety_stock {node_indices[Warehouse]: 80, ...} for t in range(T): for node, ss in safety_stock.items(): model inv_vars[t, node] ss考虑运输提前期将运输决策变量trans_vars[t,i,j]定义为在周期t发出的货量并修改库存平衡约束使货量在t lead_time[i,j]周期才到达。多目标优化除了成本还可以考虑碳排放、平均订单履行时间等。可使用加权和或分层目标法。分布式协同当供应链节点属于不同企业时无法进行集中优化。可研究分布式优化算法如ADMM或博弈论方法使各企业在有限信息共享下达到均衡。6.3 代码重构建议对于持续迭代的项目建议将上述脚本重构为模块SupplyChainNetwork类管理节点、链路、成本、能力等静态数据。ScopeOptimizationModel类负责构建模型、更新参数、求解和提取结果。PolicySimulator类用于模拟和对比不同策略如优化策略、顺序策略、(s, S)策略等在历史或随机需求下的表现。使用配置文件如YAML管理所有参数便于进行A/B测试。构建SCOPE系统是一个持续迭代的过程。从本文的最小可行模型出发逐步引入现实世界的复杂性并建立相应的数据、算法和工程体系才能真正实现端到端供应链的协同优化。核心始终在于理解业务约束并将其准确转化为数学模型中的耦合关系。
返回列表