网络流:优化仓储物流调度问题-达摩院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
相关文章
|
11天前
|
达摩院 供应链 安全
光储荷经济性调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍使用MindOpt工具优化光储荷经济性调度的数学规划问题。光储荷经济性调度技术旨在最大化能源利用率和经济效益,应用场景包括分布式光伏微网、家庭能源管理系统、商业及工业用电、电力市场参与者等。文章详细阐述了如何通过数学规划方法解决虚拟电厂中的不确定性与多目标优化难题,并借助MindOpt云建模平台、MindOpt APL建模语言及MindOpt优化求解器实现问题建模与求解。最终案例展示了如何通过合理充放电策略减少37%的电费支出,实现经济与环保双重效益。读者可通过提供的链接获取完整源代码。
|
11天前
|
达摩院 BI 索引
切割问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文主要讲述了使用MindOpt工具对切割问题进行优化的过程与实践。切割问题是指从一维原材料(如木材、钢材等)中切割出特定长度的零件以满足不同需求,同时尽可能减少浪费的成本。文章通过实例详细介绍了如何使用MindOpt云上建模求解平台及其配套的MindOpt APL建模语言来解决此类问题,包括数学建模、代码实现、求解过程及结果分析等内容。此外,还讨论了一维切割问题的应用场景,并对其进行了扩展,探讨了更复杂的二维和三维切割问题。通过本文的学习,读者能够掌握利用MindOpt工具解决实际切割问题的方法和技术。
|
11天前
|
达摩院 算法 安全
智慧楼宇多目标调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文探讨了使用MindOpt工具优化智慧楼宇的多目标调度问题,特别是在虚拟电厂场景下的应用。智慧楼宇通过智能化技术综合考虑能耗、舒适度等多目标,实现楼宇设备的有效管理和调度。虚拟电厂作为多能源聚合体,能够参与电力市场,提供调峰、调频等辅助服务。文章介绍了如何使用MindOpt云上建模求解平台及MindOpt APL建模语言对楼宇多目标调度问题进行数学建模和求解,旨在通过优化储能设备的充放电操作来最小化用电成本、碳排放成本和功率变化成本,从而实现经济、环保和电网稳定的综合目标。最终结果显示,在使用储能设备的情况下,相比不使用储能设备的情形,成本节约达到了约48%。
|
11天前
|
达摩院 供应链 JavaScript
网络流问题--仓储物流调度【数学规划的应用(含代码)】阿里达摩院MindOpt
本文通过使用MindOpt工具优化仓储物流调度问题,旨在提高物流效率并降低成本。首先,通过考虑供需匹配、运输时间与距离、车辆容量、仓库储存能力等因素构建案例场景。接着,利用数学规划方法,包括线性规划和网络流问题,来建立模型。在网络流问题中,通过定义节点(资源)和边(资源间的关系),确保流量守恒和容量限制条件下找到最优解。文中还详细介绍了MindOpt Studio云建模平台和MindOpt APL建模语言的应用,并通过实例展示了如何声明集合、参数、变量、目标函数及约束条件,并最终解析了求解结果。通过这些步骤,实现了在满足各仓库需求的同时最小化运输成本的目标。
|
3月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
3月前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
26天前
|
人工智能 算法 调度
优化问题之如何选择合适的优化求解器
优化问题之如何选择合适的优化求解器
|
26天前
|
调度 决策智能
优化问题之优化求解器有哪些主要的评估特性
优化问题之优化求解器有哪些主要的评估特性
|
3月前
|
存储 达摩院 调度
「达摩院MindOpt」优化FlowShop流水线作业排班问题
在企业在面临大量多样化的生产任务时,如何合理地安排流水线作业以提高生产效率及确保交货期成为了一个重要的问题。
「达摩院MindOpt」优化FlowShop流水线作业排班问题
|
达摩院 调度
使用达摩院MindOpt优化交通调度_最大化通行量—线性规划问题
在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。