使用达摩院MindOpt优化交通调度_最大化通行量—线性规划问题

简介: 在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。

网络流问题


在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。


具体而言,网络流问题可以分为最大流和最小割两类。最大流问题是寻找在网络中从源节点到汇节点的最大流量,而最小割问题是寻找一组割,将网络划分为两个部分,并且通过这些割的容量之和最小化。如在有向图中分配流量,使每条边的流量不会超过它的容量约束,同时达到路径长度最小或者花费最小等目标函数的优化问题。


image.png


网络流问题在实际应用中非常广泛,如货物运输、通信网络、电力网络等:


  • 物流:求解仓网规划问题。
  • 制造:求解工厂的排班排产问题。
  • 交通:求解车辆和货物的匹配问题。
  • 通信:求解网络设施的规划, 通信管道的调优问题。
  • 能源:求解石油、天然气、电力的最优配送问题。


接下来我们通过两个案例讲解业务场景中遇到的网络流问题,如何运用数学规划的方法建模、采用 MindOpt APL来建模和调用求解器求解它们。

本篇是第一个案例:交通调度_最大化通行量

1. 交通问题规划


已知有image.png七个站点,每个站点都有若干条进站道路与出站道路,道路旁的数字表示单位时间内此路所能承载的最大车辆数,问如何分配车辆使得单位时间从站点image.png出发,最后到达站点image.png的车辆最多?

image.png

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


3. MindOpt APL 建模和求解


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


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

clear model;
# 建模
# net1.mapl
set Station :={"a","b","c","d","e","f","g"};
set Middle := {"b","c","d","e","f"};
set Roads :={<"a","b">,<"b","d">,<"c","d">,<"d","e">,<"e","g">,<"a","c">,<"b","e">,<"c","f">,<"d","f">,<"f","g">};
param entr := "a";
param lb := 0;
param ub[Roads] := <"a","b"> 50, <"b","d"> 40, <"c","d"> 60, <"d","e"> 50, <"e","g"> 70, <"a","c"> 100, <"b","e"> 20, <"c","f"> 20, <"d","f"> 60, <"f","g"> 70;
var x[<i,j> in Roads] >= lb <= ub[i,j];
maximize Total : sum {<entr,j> in Roads } x[entr,j]; #起点进入的最大流量
#流量均衡
subto Balance: 
    forall <k> in Middle do
        sum {<i,k> in Roads} x[i,k] == sum {<k,j> in Roads } x[k,j]; 
print "-----------------用MindOpt求解---------------";
option solver mindopt;     # (可选)指定求解用的求解器,默认是MindOpt
#option mindopt_options 'print=0'; #设置求解器输出级别,减少过程打印
solve;         # 求解
print "-----------------Display---------------";
display;        # 展示结果
print "经过优化后,最大流量=" ,sum {<entr,j> in Roads } x[entr,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:04).
License validation terminated. Time : 0.006s
Only one thread allowed -- optimize with Simplex method.
Model summary.
 - Num. variables     : 10
 - Num. constraints   : 5
 - Num. nonzeros      : 16
 - Bound range        : [2.0e+01,1.0e+02]
 - Objective range    : [1.0e+00,1.0e+00]
 - Matrix range       : [1.0e+00,1.0e+00]
Presolver started.
Presolver terminated. Time : 0.000s
Simplex method started.
Model fingerprint: ==gZ3B2didHZ
    Iteration       Objective       Dual Inf.     Primal Inf.     Time
            0     1.30000e+02      0.0000e+00      4.0000e+00     0.01s    
            2     1.30000e+02      0.0000e+00      0.0000e+00     0.01s    
Postsolver started.
Simplex method terminated. Time : 0.001s
OPTIMAL; objective 130.00
2 simplex iterations
Completed.
-----------------Display---------------
Primal Solution:
x@<a,b>  = 50.0000
x@<a,c>  = 80.0000
x@<b,d>  = 30.0000
x@<b,e>  = 20.0000
x@<c,d>  = 60.0000
x@<c,f>  = 20.0000
x@<d,e>  = 50.0000
x@<d,f>  = 40.0000
x@<e,g>  = 70.0000
x@<f,g>  = 60.0000
经过优化后,最大流量=130

4. 结果


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

Primal Solution:
x@<a,b>  = 50.0000
x@<a,c>  = 80.0000
x@<b,d>  = 30.0000
x@<b,e>  = 20.0000
x@<c,d>  = 60.0000
x@<c,f>  = 20.0000
x@<d,e>  = 50.0000
x@<d,f>  = 40.0000
x@<e,g>  = 70.0000
x@<f,g>  = 60.0000
最大流量=130

即,从站最多可出发130辆车。并且分流的流量为,如下图


  • a到b是50,到c是80;
  • b到d是30,到e是20
  • c到d是60,到f是20
  • d汇总了90的流量,分流到e是50,到f是40
  • e汇总了70的流量
  • f汇总了60的流量
    -它们都汇总到出口g,总共是130

image.png

相关文章
|
2月前
|
达摩院 Linux 决策智能
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
### MindOpt 优化求解器月刊(2024年3月) - 发布亮点:MAPL建模语言升级至V2.4,支持云上无安装使用和向量化建模语法。 - 新增功能:Linux用户可本地安装`maplpy`,并支持Python与MAPL混编。 - 实例分享:介绍背包问题的组合优化,展示如何在限定容量下最大化收益。 - 用户投稿:探讨机票超售时的最优调派策略,以最小化赔付成本。 - 加入互动:官方钉钉群32451444,更多资源及。 [查看详细内容](https://opt.aliyun.com/)
70 0
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
|
4月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
140 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
4月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
5月前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
8月前
|
达摩院 供应链
「达摩院MindOpt」用于多目标规划(加权和法)
多目标规划(Multi-objective programming)是指在一个优化问题中需要同时考虑多个目标函数的优化。在多目标规划问题中,目标函数之间通常是互相冲突的,即在优化一个目标函数的过程中,另一个或几个目标函数可能会受到影响。因此,多目标规划问题的目标是找到一个解x,使得在满足约束的前提下,所有目标函数达到一个相对满意的折中。
「达摩院MindOpt」用于多目标规划(加权和法)
|
3月前
|
达摩院 决策智能
阿里达摩院MindOpt优化求解器-月刊(2024年2月)
新增2个整数规划的应用案例《人员排班:小美的春节相亲大计划》和《组合优化问题:装箱问题》。B站的视频专题已有9篇讲解如何用数学规划去解决生活和工作中的问题,包含如何建立数学模型、编代码、运行代码和结果理解。使用了达摩院 MindOpt 的建模语言和云平台,可复制项目跟随视频练习。还可参与活动领奖品!
94 1
|
4月前
|
达摩院 API C#
阿里达摩院MindOpt优化求解器-月刊(2024年1月)
MindOpt优化求解器 V1.1.0 发布,LP和MILP性能提升,新增C# API等多功能,详解如何使用这些新功能。新增旅行商TSP问题案例,假期如何旅游省路费, 主交通费¥900 内,就可跨5省游10城!TSP问题中MTZ消除子环的方法详解。公众号博文《四年求一解,一群达摩院数学家的极限挑战》讲解MindOpt团队成员的成长故事。
88 0
阿里达摩院MindOpt优化求解器-月刊(2024年1月)
|
4月前
|
缓存 达摩院 算法
如何通过阿里达摩院MindOpt获得MILP多个解
在2024年1月达摩院新发布的MindOpt 优化求解器V1.1.0版本中,新增加了一个"MIP/SolutionNumber"参数,可以用于获取MILP多个解。有些业务里,会想要找到更多的可行解,目标值不一定最优,用于给业务指导。本篇案例将讲解如何使用此功能。
100 1
|
8月前
|
存储 达摩院
「达摩院MindOpt」线性规划用于排程排程问题(03)
比上一篇问题02中,我们只考虑了一次性的采购和生产计划,实际中的排产排程问题要更加复杂和精细。例如,我们要考虑未来三个月内采购和排产排程计划。其中,原材料每个月的采买价格均有不同,并且原材料购买后的存储也需要成本开销。在本节中,我们将考虑这样一个相对复杂的排产排程的决策问题。
「达摩院MindOpt」线性规划用于排程排程问题(03)
|
4月前
|
存储 达摩院 调度
「达摩院MindOpt」优化FlowShop流水线作业排班问题
在企业在面临大量多样化的生产任务时,如何合理地安排流水线作业以提高生产效率及确保交货期成为了一个重要的问题。
「达摩院MindOpt」优化FlowShop流水线作业排班问题