网络优化最短路问题
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s.t.
xij
x ji
1,
i t,
j:(i, j )A
j:( j,i)A
0,
i s,t,
xij 0.
(5.1) (5.2' ) (5.3)
对偶问题为
max(ut us )
(5.4)
s.t. u j ui wij ,(i, j) A.
(5.5)
根据互补松弛条件, 当x和u分别为原问题和对偶问题的最优解
例5.4 计算如下网络(图5.4 (a))中从节点A到所有其它节点的最短路.
1 E -2
A
5
D
-1 3
4
1 1 -1
2E -2
5
4
3
4
B
1 A -1 B
1
C
3
1
5
E -2
计算过程: u1 =0,
u2 mii2n{ui wi2} =min{0+1}=1,
D
u3 mii3n{ui wi3} =min{0+(-1)}=-1,
5
w13 w14
w24
3
例5.3 计划评审技术, 即PERT(Project Evaluation & Review Technique), 又称网络计划技术或统筹法)
大型复杂工程项目(Project)往往被分成许多子项目,子项目之 间有一定的先后顺序(偏序)要求, 每一子项目需要一定的时间 完成. PERT网络的每条弧表示一个子项目,如果以弧长表示每 一子项目需要的时间,则最早完工时间对应于网络中的最长路 (关键路线). 工程上所谓的关键路线法(CPM: Critical Path Method)基本上也是计划评审技术的一部分.
S的T顶EP点0.j((初j 始化s))令令初S始=距 离,S 标=V号,uus
u1
j
0, .
pred
(s)
0
;对V
中
STEP1. 如果S=V, 则uj为节点s到节点j的最短路路长(最短路可 以通过数组pred所记录的信息反向追踪获得), 结束. 否则继续 STEP2.
STEP2. 从 S 中找到距离标号最小的节点i,把它从 S 删除,加 入S. 对于所有从i出发的弧 (i, j) A , 若 u j ui wij ,则令
如果采用邻接表表示法,可首先计算各节点的入度;O(m) 然后找入度为零者编号; O(n) 去掉已编号节点及相关弧,同时修改相邻节点入度(只需扫描 该去掉的节点的出弧); O(m) 依次类推。 O(m n)
该算法自然可以用来判断有向图是否无圈图.
12
最短路算法 - 5.2.2 无圈网络
us u1 0,
产品库存, 单件产品的库存费为ht . 假设初始库存为0, 不考虑 能力限制, 工厂应如何安排生产, 可以保证按时满足生产, 且
使总费用最小? (Wagner – Whitin,1958)
假设在时段t, 产品的生产量为xt , 期末产品的库存为It (I0 =0);
用二进制变量yt表示在时段t工厂是否进行生产准备.
5
B6D
A
4 4
7
5
C 3E
6
F 1
前一部分实际上是Bellman最优化原理的直接结果;
后一部分中Bellman方程解的唯一性可以用反证法证明(略)
10
最短路树(树形图)
如果将定理中的条件“只含正有向圈”改为“不含负有向圈”:
➢上述最短路仍然存在;
➢Bellman方程的解的唯一性可能不成立.
10
1
一般都是指有向圈, 我们直接将正有向圈简称为“正圈”, 负
有向圈简称为“负圈”, 零有向圈简称为“零圈”, 而“无圈”
指的是不存在有向圈.
5
最短路问题 – 两点说明
最长路问题可以转化为最短路问题,把弧上的费用反号即可. ➢必须指出:目前为止,一切最短路算法都只对不含负有向圈 的网络有效. 对于含负有向圈的网络,最短路问题是NP困难的. ➢因此,本章中除非特别说明,一律假定网络不包含负有向圈. 无向网络上的最短路问题一般可以转化为有向网络上的问题. ➢如果所有弧上的权全为非负(或非正)数,只需将无向图的 一条边代之以两条对称的有向弧即可. ➢如果弧上的权有负有正,一般来说问题要复杂得多。
5
B6D
(开始) A
4 4
7
5
C 3E
6
F (结束) 1
项目网络不含圈, 其最长路问题和最短路问题都是可解的. 4
最短路问题
s
t
给定有向网络N,弧(i,j)对应的权又称为弧长(或费用).
对于其中的两个顶点s,t,以s为起点和t为终点的有向路称为 s-t有向路,其所经过的所有弧上的权(或弧长、费用)之和
称为该有向路的权(或弧长、费用).
所有s-t有向路中权(或弧长、费用)最小的一条称为s-t最短路.
对于有向网络中的一个圈,定义它的权为圈上所有前向弧上的 权的和, 减去圈上所有反向弧上的权. 权为正的圈称为正圈; 权 为负的圈称为负圈; 权为0的圈称为零圈.
对一个有向圈, 它的权就是圈上所有弧上的权的和. 本章的圈
能变更,才需要修改标号. 每次循环所需要修改标号的顶点个数最多为d (i)
这一过程的整体效应相当于对每条弧进行一次检查,所以该过程的总计算复 杂度为O(m).
综上所述,该算法的复杂度为 O(n2 m) O(n2 )
对于稠密网络,这是求解最短路问题可能达到的最小的复杂度,因为任何算 法都至少必须对每条弧考虑一次.
时:
xij (u j ui wij ) 0, (i, j) A.
(5.6) 8
Bellman方程
当某弧(i,j)位于最短路上时, 即变量xij>0时, 一定有 u j ui wij
如果u为对偶问题最优解,易知u+c (c为任意实数)仍为最优解. 不妨令 us=0 ,则u的具体数值就可以唯一确定了. 相当于对节点j赋予的一个实数值uj(通常称为 “标号”),在 us=0时表示的正好是节点s到节点j的最短路的长度.
u j ui wij , pred ( j) i .
转STEP1.
16
正费用网络(Dijkstra算法)
引理5.2 在上述Dijkstra 算法中,
(1)对于S中的任一顶点j,其距离标号uj是从起点s到该顶点j
的最短路路长;
(2)对于 S 中的任一顶点j,其距离标号uj是从起点s出发,只经
过S中的顶点到达顶点j 的最短路路长.
j:( j,i)A
0,
i s,t,
(5.2)
xij 0.
(5.3)
思考:为什么xij 可以不限定为{0,1}?
关联矩阵是全么模矩阵,因此0-1变量可以松弛为 区间[0,1]中的实数
不含负圈,变量直接松弛为所有非负实数 7
5.2.1 Bellman方程
min wij xij (i, j )A
1, i s,
对于稀疏网络,利用各种形式的堆(Heap),其复杂度可以降为
O(mlog n),O(m n log n) 或 O(m n log(C)) 等
一个是距离标号uj ,记录的是从起点到该顶点的最短路长度的上界;
另一个是前趋标号pred(j),记录的是当起点s到该顶点j 的一条路长取 到该上界时,该条路中顶点j 前面的那个直接前趋(节点).
算法通过不断修改这些标号,进行迭代计算. 当算法结束时, 距离标号表示的是从起点到该顶点的最短路长度.
迭代进行计算的过程中,所有顶点实际上被分成了两类:
(包括生产准备费、生产费和库存费), 即 wij si ci xi
其中 I t dt1 di2 d j (i t j 1)
h I j1
ti t t
网络:从所有节点i到j (> i)连一条弧, 弧上的权为wi,j-1 , 如T=4时:
w12
w23
w34
1
w11 2 w22
3 w33 4 w44
两个过程:节点寻找过程(从S 中找到距离标号最小的节点i)
和距离修改过程(修改与节点i相邻的节点的距离标号).
对于节点寻找过程,第一次循环时需要n次比较操作,第二次循环时需要n-1
次比较操作,…,依次类推. 因此,节点寻找过程的复杂度为 n (n 1) 1 O(n2 )
对于距离修改过程,注意到一个顶点只有当它与顶点i相邻时,其标号才可
u j
min i j
{ui
wij }.
(5.9) (5.10)
当采用递推计算求解上述方程时, 每个顶点和每条弧
均被考虑一次 .
O(m n)
当网络是无圈时,这一最短路算法的复杂度为
O(m n) O(m)
这是求解最短路问题可能达到的最小的复杂度, 因为 任何算法都至少必须对每条弧考虑一次
13
最短路算法 – 例
一类是离起点 s 较近的顶点,它们的距离标号表示的是从点s到 该顶点的最短路长度,因此其标号不会在以后的迭代中再被改 变(称为永久标号);
一类是离起点 s 较远的顶点,它们的距离标号表示的只是从点
到该顶点的最短路长度的上界,因此其标号还可能会在以后的
迭代中再被改变(称为临时标号).
15
正费用网络(Dijkstra算法)
u4 mii4n{ui wi4} =min{0+5,1+(-2),-1+3}=-1,
1
C
u5 mii5n{ui wi5} =min{-1+1, -1+4}=0. 14
最短路算法 - 5.2.3 正费用网络(Dijkstra,1959)
基本思想:对于V 中每一个顶点j,赋予两个数值(通常称为“标号”):
s1
2
3
-1
起点s到顶点的最短路长度分别是us=u1=0, u2 =10, u3 =11
但此时只要u3 = u2+1 11 (us=u1=0)就可以满足Bellman方程.
如 us=u1=0, u2 =8, u3 =9 等
对于一般的网络,Bellman方程只是最短路长度必须满足的必要 条件,而不是充分条件;
对于只含正有向圈(或无圈)的连通有向网络,它才是充要条1件1 .
最短路算法 - 5.2.2 无圈网络
引理5.1 (拓扑排序, Topological Ordering) 设有向图D不含 有向圈,则D的顶点总可以重新编号,使得 i j,(i, j) A .
如果采用邻接矩阵表示法,可首先计算各节点的入度; O(n2 ) 然后找入度为零者编号; O(n) 去掉已编号节点及相关弧,同时修改相邻节点入度(只需扫描 该去掉的节点的对应行) ; O(n • n) O(n2 ) 依次类推。 O(n2 )
归纳法. 算法开始时结论成立. 设直到迭代的第k步,上述结论(1)(2)成立.
S 中具有最小标号的顶点 i 可以移入S中,这不会破坏结论(1).
S
pred(i)
i
S
s
pred(j) P1
P2 j
对于 S 中的其它顶点k, 修改标号,不会破坏结论(2).
17
Dijkstra算法 - 计算复杂性分析
该算法的主要计算量在于STEP2循环(最多执行n次),它包括
6
最短路问题的数学描述
xij表示弧(i,j)是否位于s-t路上:当xij =1时,表示弧(i,j) 位于s-t路上,当xij =0时,表示弧(i,j)不在s-t路上.
min wij xij (i, j )A
(5.1)
1, i s,
s.t.
xij
x ji
1,
i t,
j:(i, j )A
最短路问题的例子和意义
S
T
✓ 许多实际问题都可以转化为最短路问题
✓ 其有效算法经常在其它网络优化问题中作为子算 法调用
1
最短路问题的例子 - 单产品、无能力限制的批量问题
例5.1 (Single-level Uncapacitated Lotsizing)
某工厂生产某种产品用以满足市场需求,且已知在时段t中的市 场需求为dt . 在某时段t, 如果开工生产, 则生产开工所需的生 产准备费为st , 单件产品的生产费为ct .在某时段t期末, 如果有
Bellman方程(最短路方程、动态规划基本方程 )
us 0,
u j
min i j
{ui
wij }.
一般情况下直接求解最短路方程是相当困难的.
(5.7) (5.8)
9
最短路树(树形图)
定理5.1 对于只含正有向圈的连通有向网络,从起点s到任一顶 点j都存在最短路,它们构成以起点s为根的树形图(称为最短 路树(Tree of Shortest Paths)或最短路树形图(Shortest Path Arborescence)),最短路的长度可以由Bellman方程唯一确定.
T
T
假设费用均非负,则在最优解中 I0 IT 0 ,即 xt dt
t 1
t 1
可以证明:一定存在满足条件 It1xt 0(1 t T ) 的最优解.
可以只考虑 xt 0, dt , dt dt1, , dt dt1 dT 2
单产品、无能力限制的批量问题
记wij为第i时段生产量为 xi di di1 d j 时所导致的费用