图与网络是运筹学(Operations Research)中的一个经典和重要的分支,所研究的 问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等 诸多领域。下面将要讨论的最短路问题、最大流问题、最小费用流问题和匹配问题等都 是图与网络的基本问题。
一、基础定义
1.1无向图
1.2有向图
1.3完全图/二分图
1.4子图
1.5顶点的度
1.6选择不同方法表示图:
常用方法:
①邻接矩阵法:
也就是说,如果两节点之间有一条弧,则邻接矩阵中对应的元素为 1;否则为 0。 可以看出,这种表示法非常简单、直接。但是,在邻接矩阵的所有 2 n 个元素中,只有m个为非零元。如果网络比较稀疏,这种表示法浪费大量的存储空间,从而增加了在网络 中查找弧的时间。
示例:被表示为
,可以加以相对应的权重。
②星形表示法:
反向星形示例:
③邻接表表示法:
优点与缺点:
(1)星形表示法的优点是占用的存储空间较少,并且对那些不提供指针类型的语言(如 FORTRAN 语言 等)也容易实现。邻接表表示法对那些提供指针类型的语言(如 C 语言等)是方便的, 且增加或删除一条弧所需的计算工作量很少,而这一操作在星形表示法中所需的计算工 作量较大(需要花费O(m) 的计算时间)。
有关“计算时间”的观念是网络优化中需要考虑的一个关键因素。
(2)当网络不是简单图,而是具有平行弧(即多重弧)时,显然此时邻接矩阵表示法是不能采用的。其他方法则可以很方便地推广到可以处理平行弧的情形
(3)上述方法可以很方便地推广到可以处理无向图的情形,但由于无向图中边没有 方向,因此可能需要做一些自然的修改。例如,可以在计算机中只存储邻接矩阵的一半信息(如上三角部分),因为此时邻接矩阵是对称矩阵。无向图的关联矩阵只含有元素0 和 +1,而不含有 −1,因为此时不区分边的起点和终点。又如,在邻接表和星形表示法中,每条边会被存储两次,而且反向星形表示显然是没有必要的。
1.7轨与连通
1.8树
赋权图的具最小权的生成树叫做最小生成树。
1.9Euler图和Hamilton 图
经过G 的每条边的迹叫做G 的 Euler 迹;闭的 Euler 迹叫做 Euler 回路或 E回路;含 Euler 回路的图叫做 Euler 图
Hamilton圈与Euler定义相同。
Euler 图就是从一顶点出发每边恰通过一次能回到出发点,即不重复地行遍所有的边再回到出发点。判定Euler图/迹:
1.10可行流与可行网络
1.11单源与单汇运输网络
实际问题往往是多源多汇网络,为了计算的规格化,可将多源多汇网络G 化成单源单汇网络G' 。设 X 是G 的源,Y 是G 的汇,具体转化方法如下:
1.12最大流与最小割关系
1.13计划网络图
1.14计划网络图的时间参数
二、经典问题及其对应方法
经典问题:
2.1 Dijksta算法(最短路问题)
算法思想:
matlab求解函数:
修正:2023版matlab已无‘mixed’选项
注意:shortestpath函数用于求两个单一结点之间的最短路径,不支持负循环。(负循环:从结点出发回到自身的路径,路径上的边权重之和为负值。如果两个结点之间的路径上具有负循环,则这两个结点之间不存在最短路径,因为始终可以通过负循环找到更短路径)
当图像较复杂时,使用lingo编程能带来一定的简便。
对于lingo,生成的模型有如下分类:
2.2 Floyd算法(求每对顶点的最短路径)
算法思想:
2.3prim算法生成最小生成树(连线问题)
算法思想:
设置两个集合P与Q,P用于存放G 的最小生成树中的顶点,集合Q 存放G的最小生成树中的边。
2.4Kruskal 算法构造最小生成树(连线问题)
算法思想:
2.5Kuhn-Munkres 算法(最优指派问题)(待完善)
匹配问题基本信息:(注:个人觉得可以用规划方法解决)
算法思想:
2.6改良圈算法(TSP算法)
算法思想:
TSP另一解法:数学规划
该问题的数学表达式应为:
可利用lingo软件进行求解,需注意其对大型模型效果不好。
2.7Ford Fulkerson算法(网络最大流)
算法思想:
依据该算法,进行程序设计:
或者,用matlab的自带函数:
网络最大流另一解法:数学规划
同理,该问题也可以用规划的方法解决。
2.8迭代法(最小费用流)
算法思想:
2.9计划评审方法和关键路线法PERT/CPM
解决方法:先做出计划网络图,将其写成相应规划问题。
求关键路径:一种方法是利用松弛变量S,当最早开工时间与最晚开工时间相同时,即为关键路径;第二种是转化为规划问题,将关键路线看为求解最长路。
计划网络的优化问题: 这时需要压缩关键路径来减少最短工期。如下:
关于计划网络问题,一个重要的参考因素是完成作业的期望和实现的概率