网络流:优化仓储物流调度问题-达摩院MindOpt

简介: 仓储物流调度是指在物流供应链中,对仓储和运输(运输路线、成本)进行协调和安排的过程。主要包含物流计划、运输调度、运发管理、库存管理等重要环节。随着网络、电商行业的迅速发展,仓储物流调度对于企业来说也非常重要,优秀的调度方案可以帮助降低库存成本、物流配送的效率、成本等等等,从而给企业带来降本增效。

仓储物流调度问题也是网络流问题的一种,在上篇我们已经介绍了什么是网络流问题。那么什么是仓储物流调度呢?仓储物流调度是指在物流供应链中,对仓储和运输(运输路线、成本)进行协调和安排的过程。主要包含物流计划、运输调度、运发管理、库存管理等重要环节。随着网络、电商行业的迅速发展,仓储物流调度对于企业来说也非常重要,优秀的调度方案可以帮助降低库存成本、物流配送的效率、成本等等等,从而给企业带来降本增效。


1. 仓储物流调度


考虑如下决策问题。现有一位置在河南(HN)的工厂将生产450个产品,产品需要从工厂运至东北(NE),东南(SE)两个配送中心,再由配送中心发往江苏(JS), 浙江(ZJ), 吉林(JL),辽宁(LN)和黑龙江(HLJ)五个省份的仓库。已知这五个省份的仓库分别需要的产品如下:

仓库需求

JS

90

ZJ

120

JL

120

LN

70

HLJ

50


且每个产品送往不同仓库所需的费用也不同,并且每条运输线路均有运送上限, 具体如下表所示:

运输每个产品的价格

运送产品的上限

HN, NE

3.5元/个

250个

HN, SE

2.5元/个

250个

NE, LN

1.5元/个

100个

NE, JL

1.7元/个

100个

NE, HLJ

2.0元/个

100个

SE, LN

2.6元/个

100个

SE, JL

2.7元/个

100个

SE, JS

1.3元/个

100个

SE, ZJ

1.5元/个

100个


请问该公司该如何决策,使得总配送成本最低?

2. 数学规划模型


以上问题的数学模型如下。

集合


  • 地点集合 image.png
  • 线路集合 image.png
  • 混合集合 image.png(由运输一个商品所需成本image.png和 运输的商品的数量上限 image.png组成)


参数


  • 地点 image.png能够提供的商品 image.png
  • 地点 image.png需要的商品 image.png
  • 线路image.png运输一件商品的成本 image.png
  • 线路 image.png运输的商品的数量上限 image.png


变量


线路image.png中地点 image.png
间运输的商品的数量 image.png


目标函数


最小化运输成本 image.png


约束


地点 image.png提供的商品数量 image.png加上运入该点的商品之和 image.png等于该地其商品需求 image.png加上该地运出的商品数量之和 image.png


3. MindOpt APL 建模和求解


MindOpt APL是一款代数建模语言,它可以方便地将数学语言描述成程序,然后调用多种求解器求解。MindOpt Solver对网络流的线性规划求解效率很不错,且能支持大规模的问题。

MindOpt云上建模平台是一款用于优化建模和求解的在线教学和开发调试的工具。它支持Notebook、Python 编程、MindOpt APL优化建模语言和多个优化求解器,并业的教程和多个案例。


改写上面的数据图和数学模型,如下代码,在云上平台Notebook的cell中运行它:

clear model;
# 建模-------
# net2.mapl
# 数据
set CITIES := {"HN", "NE", "SE", "LN", "JL", "HLJ", "JS", "ZJ"} ;
set LINKS := {<"HN", "NE">, <"HN", "SE">, <"NE", "LN">, <"NE","JL">, <"NE","HLJ">, <"SE","LN">, <"SE","JL">, <"SE", "JS">, <"SE", "ZJ">};
param supply[CITIES] := <"HN"> 450 default 0;
param demand[CITIES] := <"JS"> 90,  <"ZJ"> 70, <"JL"> 120,  <"LN"> 120, <"HLJ"> 50 default 0;
set C := {"cost", "capacity"};
param data[LINKS * C] :=
            | "cost",  "capacity"|
|"HN", "NE" |    3.5,    250    |
|"HN", "SE" |    2.5,    250    |
|"NE", "LN" |    1.5,    100    |
|"NE", "JL" |    1.7,    100    |
|"NE", "HLJ"|    2.0,    100    |
|"SE", "LN" |    2.6,    100    |
|"SE", "JL" |    2.7,    100    |
|"SE", "JS" |    1.3,    100    |
|"SE", "ZJ" |    1.5,    100    |;
# 检查数据是否填正确
forall {<i> in CITIES } check supply[i] >= 0;
forall {<i> in CITIES } check demand[i] >= 0;
check sum {<i> in CITIES } supply[i] >= sum {<j> in CITIES} demand[j]; #供给大于需求
# 模型
var Ship[<i, j> in LINKS] >= 0 <= data[i, j, "capacity"];
minimize Total_Cost: sum {<i, j> in LINKS } data[i, j, "cost"] * Ship[i, j];
subto Balance: 
   forall {<k> in CITIES }
       supply[k] + sum {<i, k> in LINKS} Ship[i, k] >= demand[k] + sum {<k, j> in LINKS} Ship[k,j]; #每个站点供给都满足了需求
print "-----------------用MindOpt求解---------------";
option solver mindopt;     # (可选)指定求解用的求解器,默认是MindOpt
#option mindopt_options 'print=0'; #设置求解器输出级别,减少过程打印
solve;         # 求解
print "-----------------Display---------------";
display;        # 展示结果
print "经过优化后,最低运输成本=" , sum {<i, j> in LINKS } data[i, j, "cost"] * Ship[i, j];

运行代码结果如下:

-----------------用MindOpt求解---------------
Running mindoptampl
wantsol=1
mip_integer_tolerance=1e-9
MindOpt Version 0.24.1 (Build date: 20230423)
Copyright (c) 2020-2023 Alibaba Cloud.
Start license validation (current time : 29-JUN-2023 21:31:22).
License validation terminated. Time : 0.006s
Only one thread allowed -- optimize with Simplex method.
Model summary.
 - Num. variables     : 9
 - Num. constraints   : 5
 - Num. nonzeros      : 15
 - Bound range        : [5.0e+01,4.5e+02]
 - Objective range    : [1.3e+00,3.5e+00]
 - Matrix range       : [1.0e+00,1.0e+00]
Presolver started.
Presolver terminated. Time : 0.000s
Simplex method started.
Model fingerprint: ==gZ3F2dkdXZ
    Iteration       Objective       Dual Inf.     Primal Inf.     Time
            0     9.30000e+01      0.0000e+00      4.0000e+00     0.01s    
            1     2.12300e+03      0.0000e+00      0.0000e+00     0.01s    
Postsolver started.
Simplex method terminated. Time : 0.002s
OPTIMAL; objective 2123.00
1 simplex iterations
Completed.
-----------------Display---------------
Primal Solution:
Ship@<HN,NE> = 250.000
Ship@<HN,SE> = 200.000
Ship@<NE,LN> = 100.000
Ship@<NE,JL> = 100.000
Ship@<NE,HLJ> = 50.0000
Ship@<SE,LN> = 20.0000
Ship@<SE,JL> = 20.0000
Ship@<SE,JS> = 90.0000
Ship@<SE,ZJ> = 70.0000
经过优化后,最低运输成本=2123

4. 结果


运行上述代码后,得到结果为:


Primal Solution:
Ship@<HN,NE> = 250.000
Ship@<HN,SE> = 200.000
Ship@<NE,LN> = 100.000
Ship@<NE,JL> = 100.000
Ship@<NE,HLJ> = 50.0000
Ship@<SE,LN> = 20.0000
Ship@<SE,JL> = 20.0000
Ship@<SE,JS> = 90.0000
Ship@<SE,ZJ> = 70.0000
经过优化后,最低运输成本=2123

需注意的是,优化问题可能有多个可行解或可行域的情况,更换求解器的时候,解的变量取值可能会不一样,但是最优的目标值是一样的,比如如果我们更换求解器会得到如下结果。


其他求解器的使用方法请浏览:MindOpt平台上各种求解器的用法


Cbc求解器:

Primal Solution:
Ship@<HN,NE> = 200.000
Ship@<HN,SE> = 250.000
Ship@<NE,LN> = 100.000
Ship@<NE,JL> = 50.0000
Ship@<NE,HLJ> = 50.0000
Ship@<SE,LN> = 20.0000
Ship@<SE,JL> = 70.0000
Ship@<SE,JS> = 90.0000
Ship@<SE,ZJ> = 70.0000
经过优化后,最低运输成本=2123

HiGHS求解器:


Primal Solution:
Ship@<HN,NE> = 250.000
Ship@<HN,SE> = 200.000
Ship@<NE,LN> = 100.000
Ship@<NE,JL> = 100.000
Ship@<NE,HLJ> = 50.0000
Ship@<SE,LN> = 20.0000
Ship@<SE,JL> = 20.0000
Ship@<SE,JS> = 90.0000
Ship@<SE,ZJ> = 70.0000
经过优化后,最低运输成本=2123
相关文章
|
10天前
|
数据采集 网络协议 算法
移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)
本文从方案设计、代码开发到技术落地,详尽的分享了携程在移动端弱网识别方面的实践经验,如果你也有类似需求,这篇文章会是一个不错的实操指南。
28 1
|
2月前
|
缓存 网络协议 CDN
在网页请求到显示的过程中,如何优化网络通信速度?
在网页请求到显示的过程中,如何优化网络通信速度?
186 59
|
24天前
|
缓存 监控 前端开发
优化网络应用的性能
【10月更文挑战第21天】优化网络应用的性能
15 2
|
25天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
1月前
|
运维 监控 安全
连锁药店网络优化策略:一站式融合方案提升竞争力
在数字化浪潮下,线上药店通过技术创新和线上线下融合,正重塑购药体验,提供24小时服务和医保结算便利。面对激烈竞争,连锁药店和中小药店纷纷通过优化网络架构、提升服务质量和加强合规管理来增强竞争力,实现高效、安全的数字化转型。
|
1月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种基于WOA优化的GroupCNN分组卷积网络时间序列预测算法。使用Matlab2022a开发,提供无水印运行效果预览及核心代码(含中文注释)。算法通过WOA优化网络结构与超参数,结合分组卷积技术,有效提升预测精度与效率。分组卷积减少了计算成本,而WOA则模拟鲸鱼捕食行为进行优化,适用于多种连续优化问题。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。
|
1月前
|
监控 自动驾驶 5G
|
1月前
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
27 1