使用达摩院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/)
94 0
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
|
2月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
156 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
2月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
2月前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
2月前
|
机器学习/深度学习 达摩院
阿里达摩院MindOpt优化求解器-月刊(2024年4月)
【摘要】2024.04.30,阿里云发布了MindOpt优化求解器的新商品和功能。MindOpt现在已上架,提供超低价零售求解器,支持按需购买,可在阿里云平台上直接购买联网或不联网License。新版本V1.2发布,提升MILP性能,并增加PostScaling参数。此外,MindOpt Studio推出租户定制版,正处于邀测阶段。同时分享了使用MindOpt解决二分类SVM问题的案例。更多内容,可访问相关链接。
83 0
|
3天前
|
达摩院 Python
阿里达摩院MindOpt优化求解器-月刊(2024年6月)
**阿里达摩院MindOpt优化求解器2024年6月月刊概览:** - 发布新功能,MAPL建模语言V2.5上线,Python APIs全面升级,旧版本不兼容。 提供快速入门教程、示例代码展示如何用Python调用MAPL。MindOpt Studio租户版新增Gradio支持,便于开发WebAPP,提供了案例源码展示如何开发。引入新案例: 1. 巡检线路的排班-2017全国大学生数学建模竞赛D题。包含最短路模型、TSP模型、弧分割模型。2. 商品组合定价策略:探讨如何最赚钱的加购区商品定价。
35 0
|
2月前
|
达摩院 IDE 开发工具
阿里达摩院MindOpt优化求解器-月刊(2024年5月)
阿里达摩院MindOpt优化求解器-月刊(2024年5月版),新增了两个案例,如何使用LLM和MindOpt更准确地回答数学问题、如何使用MindOpt优化云计算集群虚拟机资源配置提高机器利用率,和如何利用IIS冲突分析指导不可解的问题解决方案。MindOpt的求解器已经可以在阿里云线上购买不联网版本。租户版也正式上线,可体验更多功能。新增QQ交流群。
63 4
|
10天前
|
达摩院 供应链 调度
【FlowShop流水线作业排班问题【数学规划的应用(含代码)】阿里达摩院MindOpt】
本文探讨了使用阿里巴巴达摩院的MindOpt工具解决FlowShop流水线作业排班的数学规划问题。FlowShop涉及到多台机器、多个工序和多个作业,目标是通过优化排班最小化总生产耗时。MindOpt通过数学规划方法,如线性或混合整数线性规划,将问题建模并转化为代码,利用云建模平台MindOpt Studio和MindOpt APL建模语言进行求解。案例中详细介绍了参数定义、变量解析、约束设置和目标函数,展示了如何通过MindOpt进行建模和求解,以达到最优化的生产调度。此外,文章还提供了代码示例和结果解析,帮助读者理解如何实际应用MindOpt解决这类问题。
|
2月前
|
达摩院 决策智能
阿里达摩院MindOpt优化求解器-月刊(2024年2月)
新增2个整数规划的应用案例《人员排班:小美的春节相亲大计划》和《组合优化问题:装箱问题》。B站的视频专题已有9篇讲解如何用数学规划去解决生活和工作中的问题,包含如何建立数学模型、编代码、运行代码和结果理解。使用了达摩院 MindOpt 的建模语言和云平台,可复制项目跟随视频练习。还可参与活动领奖品!
102 1
|
2月前
|
达摩院 API C#
阿里达摩院MindOpt优化求解器-月刊(2024年1月)
MindOpt优化求解器 V1.1.0 发布,LP和MILP性能提升,新增C# API等多功能,详解如何使用这些新功能。新增旅行商TSP问题案例,假期如何旅游省路费, 主交通费¥900 内,就可跨5省游10城!TSP问题中MTZ消除子环的方法详解。公众号博文《四年求一解,一群达摩院数学家的极限挑战》讲解MindOpt团队成员的成长故事。
108 0
阿里达摩院MindOpt优化求解器-月刊(2024年1月)