网络流:优化仓储物流调度问题-达摩院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
相关文章
|
并行计算 算法 调度
【微电网优化】基于吸血水蛭优化器(BSLO)的微电网优化研究(Matlab代码实现)
【微电网优化】基于吸血水蛭优化器(BSLO)的微电网优化研究(Matlab代码实现)
297 3
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
766 1
|
达摩院 供应链 安全
光储荷经济性调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍使用MindOpt工具优化光储荷经济性调度的数学规划问题。光储荷经济性调度技术旨在最大化能源利用率和经济效益,应用场景包括分布式光伏微网、家庭能源管理系统、商业及工业用电、电力市场参与者等。文章详细阐述了如何通过数学规划方法解决虚拟电厂中的不确定性与多目标优化难题,并借助MindOpt云建模平台、MindOpt APL建模语言及MindOpt优化求解器实现问题建模与求解。最终案例展示了如何通过合理充放电策略减少37%的电费支出,实现经济与环保双重效益。读者可通过提供的链接获取完整源代码。
|
达摩院 BI 索引
切割问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文主要讲述了使用MindOpt工具对切割问题进行优化的过程与实践。切割问题是指从一维原材料(如木材、钢材等)中切割出特定长度的零件以满足不同需求,同时尽可能减少浪费的成本。文章通过实例详细介绍了如何使用MindOpt云上建模求解平台及其配套的MindOpt APL建模语言来解决此类问题,包括数学建模、代码实现、求解过程及结果分析等内容。此外,还讨论了一维切割问题的应用场景,并对其进行了扩展,探讨了更复杂的二维和三维切割问题。通过本文的学习,读者能够掌握利用MindOpt工具解决实际切割问题的方法和技术。
|
达摩院 算法 安全
智慧楼宇多目标调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文探讨了使用MindOpt工具优化智慧楼宇的多目标调度问题,特别是在虚拟电厂场景下的应用。智慧楼宇通过智能化技术综合考虑能耗、舒适度等多目标,实现楼宇设备的有效管理和调度。虚拟电厂作为多能源聚合体,能够参与电力市场,提供调峰、调频等辅助服务。文章介绍了如何使用MindOpt云上建模求解平台及MindOpt APL建模语言对楼宇多目标调度问题进行数学建模和求解,旨在通过优化储能设备的充放电操作来最小化用电成本、碳排放成本和功率变化成本,从而实现经济、环保和电网稳定的综合目标。最终结果显示,在使用储能设备的情况下,相比不使用储能设备的情形,成本节约达到了约48%。
|
达摩院 供应链 JavaScript
网络流问题--仓储物流调度【数学规划的应用(含代码)】阿里达摩院MindOpt
本文通过使用MindOpt工具优化仓储物流调度问题,旨在提高物流效率并降低成本。首先,通过考虑供需匹配、运输时间与距离、车辆容量、仓库储存能力等因素构建案例场景。接着,利用数学规划方法,包括线性规划和网络流问题,来建立模型。在网络流问题中,通过定义节点(资源)和边(资源间的关系),确保流量守恒和容量限制条件下找到最优解。文中还详细介绍了MindOpt Studio云建模平台和MindOpt APL建模语言的应用,并通过实例展示了如何声明集合、参数、变量、目标函数及约束条件,并最终解析了求解结果。通过这些步骤,实现了在满足各仓库需求的同时最小化运输成本的目标。
|
SQL 监控 安全
网络安全与信息安全:漏洞、加密与安全意识
随着互联网的迅猛发展,网络安全和信息安全问题日益受到关注。本文深入探讨了网络安全漏洞、加密技术以及提高个人和组织的安全意识的重要性。通过分析常见的网络攻击手段如缓冲区溢出、SQL注入等,揭示了计算机系统中存在的缺陷及其潜在威胁。同时,详细介绍了对称加密和非对称加密算法的原理及应用场景,强调了数字签名和数字证书在验证信息完整性中的关键作用。此外,还讨论了培养良好上网习惯、定期备份数据等提升安全意识的方法,旨在帮助读者更好地理解和应对复杂的网络安全挑战。
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
687 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
505 10
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
468 10

热门文章

最新文章