第九章 图与网络规划
DESCRIPTION
第九章 图与网络规划. 本章内容大纲. 9.1 图论的基本概述 9.2 网络最大流问题 9.3 最小费用流问题 9.4 最短路问题 9.5 最小支撑树问题 9.6 网络设施选址问题 9.7 车辆路径问题 9.8 选址路线问题. 9.1 图的基本概念. 经典案例:哥尼斯堡七桥问题 是否存在一条路线,可不重复地走遍七座桥,回到原点?. 9.1 图的基本概念. 一个图就是点与边的集合,记作 点与边的关联 有向图与无向图 度、奇顶点 、 偶顶点 链 、闭链、开链 欧拉图 - PowerPoint PPT PresentationTRANSCRIPT
第九章 图与网络规划
本章内容大纲 9.1 图论的基本概述 9.2 网络最大流问题 9.3 最小费用流问题 9.4 最短路问题 9.5 最小支撑树问题 9.6 网络设施选址问题 9.7 车辆路径问题 9.8 选址路线问题
9.1 图的基本概念 经典案例:哥尼斯堡七桥问题 是否存在一条路线,可不重复地走遍七座桥,回到原点?
9.1 图的基本概念 一个图就是点与边的集合,记作 点与边的关联 有向图与无向图 度、奇顶点 、偶顶点 链 、闭链、开链 欧拉图 一个非空连通图图 G 是 E图的充分必要条件是图 G只含有偶顶点 赋权图与网络
A
B
C
D
e1
e2
e3
e4e5
e6 e7
,G V E
9.1 图的基本概念 中国邮递员问题 (CPP) :一个邮递员负责某些街道的邮件投递工作,每次都要从邮局出发走遍他负责的所有街道,再回到邮局。那么他应如何安排投递路线,使得所走过的总路程最短 ?
9.1 图的基本概念( , )
min (1)
(2)
0 ( , ) (3)
0 ( , ) (4)
int
ij iji j E
ij jki N k N
ij ji
ij
ij
z c f
subject to
f f j
f f i j E
f i j E
f
CPP 模型及 LINGO 主程序 min=@sum(ij(i , j)|c(i , j) #gt
# 0 : c(i , j)*f(i , j) ) ; @for(ii(j) : @sum(ii(i) : f(i , j))=@sum(ii
(k) : f(j , k)) ) ; @for(ij(i , j)|c(i , j) #gt# 0 :
@gin(f)) ; @for(ij(i , j)|c(i , j) #gt# 0 : f
(i , j)+f(j , i)>=1) ; @for(ij(i , j)|c(i , j) #eq# 0 :
f(i , j)=0) ; end
9.2 网络最大流问题 案例:某企业的产品需要经过多道加工工序,有多个设备可以完成这些工序的工作,而企业现有设备加工每道工序的能力也不同,即每道工序在一个工作日内加工产品的最大数量是有限制的,图中,边上的数字即为该工序的最大加工能力。
9.2 网络最大流问题 概念:给定有向赋权图其中有两个特殊的节点 s 和 t 。 s 称为发点, t 称为收点。而剩下的结点称之为转运点。图中各边的方向和权数表示允许的流向和最大可能的流量(容量),并假设容量均为整数。问在这个网络图中从发点流出到收点汇集,最大可通过的实际流量为多少?流向分布情况怎样?
9.2 网络最大流问题 网络最大流问题模型及 LINGO主程序 max=f ; @for(ii(i)| i#gt#1 #and# i#lt#6 : @sum(ii(j) : x(i , j))-@sum(ii
(j) : x(j , i))=0 ) ; @sum(ii(j) : x(1 , j))-@sum(i
i(j) : x(j , 1))=f ; @sum(ii(j) : x(6 , j))-@sum(i
i(j) : x(j , 6))=-f ; @for(ij(i , j) : x(i , j)<=u(i ,
j)) ; end
max
0 ,
0
ij jij j
ij ij
fsubject to
f i sx x i s t
f i t
x u
当当当
9.2 网络最大流问题 __ 程序计算结果
9.3 最小费用流问题 案例:某配送公司拥有一个固定的配送网络,网络中某些地方需要送货,某些地方需要发货,公司现为每条路线配备固定的运输车辆,每辆车都有固定的装载容量限制。
A(50)
B(40)
C(0)
E(-60)
D(-30)
<10>
9
324
3
2
9.3 最小费用流问题 _ 概念设 N=(V、E)是一个网络,在N中的每个弧( ,i jv v )上再定义一个单位流量的费用 C( ,i jv v )
≥ 0(简记为 ijc )。所谓最小费流问题就是要求一个可行流 f ,使流的总费用
b( f )=( , )i j
ij ijv v E
c f
取最小值。所以可行流 f 是指满足节点的净流出量需求,又满足边的容量限制。定义 ib 为
节点 iv 的净流出量, iju 为弧( ,i jv v )的容量限制, ijx 为弧( ,i jv v )的流量。
9.3 最小费用流问题最小费用流问题模型及 LING
O 程序 min=@sum(ij(i , j) : c(i ,
j)*x(i , j)) ; @for(ii(i) : @sum(ii(j)|c(i , j) #gt# 0 :
x(i , j))-@sum(ii(j) : x(j ,i))=b(i)
) ; @for(ij(i , j)|u(i , j) #gt#
0 : x(i , j)<=u(i , j)) ;
k
min
0 ( , )
ij ij
ij ki i ij
ij ij i j
c x
subject to
x x b v
x u v v E
9.3 最小费用流问题 _ 程序计算结果
A(50)
B(40)
C(0)
E(-60)
D(-30)
<10>
<80>
9(10)
32(20)
1(80)
4(40)
3(40)
2
9.4 最短路问题 案例:某服务公司几乎时刻都往返于一个城市的不同社区,需要事先确定城市各个社区之间的最短线路。 要求总旅程最短的旅行路线:实际上就是在一个赋权连通图上,求一条从起点到另一节点的路 P ,使得通路 P 上的总权和 W(P) 最小,这样的问题称为最短路问题。
9.4 最短路问题 __ 模型 min
1 0 ,
1
0 1
ij ij
ij kij k
ij
c x
subject to
i sx x i s t
i t
x
当当 当
9.4 最短路问题 __floyd 算法Floyd算法的基本思想是:递推产生一个矩阵序列 nk AAAA ,,,,, 10 ,其中 ),( jiAk 表
示从顶点 iv 到顶点 jv 的路径上所经过的顶点序号不大于 k的最短路径长度。
计算时用迭代公式:
)),(),(),,(min(),( 111 jkAkiAjiAjiA kkkk
k是迭代次数, nkji ,,2,1,, 。
最后,当 nk 时, nA 即是各顶点之间的最短通路值。
9.4 最短路问题 __matlab 程序 D=aa ; for i=1 : n for j=1 : n R(i , j)=j ; end end R ; for k=1 : n
9.5 最小支撑树问题 案例:企业有五个数据中心,中心之间用光缆连接,己知这五个车间的位置、可供铺设光缆的地方及数据中心之间的距离,问光缆怎样铺设才能使管线总长最省 ?
9.5 最小支撑树问题 __ 概念 设图 G=(V 、 E) 是一个赋权连通图, T 是 G 的一棵支撑子树,称 T 中所有边的权之和为支撑树 T 的权,记为 w(T) ,即 w(T)= ,如果支撑树 T*的权 w(T*) 是 G 所有支撑树的权中最小的,则称 T*为 G 的最小支撑树 ( 简称为最小树 )
( , )
( , )i j
i jv v T
W v v
9.5 最小支撑树问题 __ 破圈法 求一个赋权连通图 G 的最小支撑树的方法还有“破圈法”,此方法简单易行。 “破圈法”:在图 G 中任取一个圈,去掉圈上权最大的一条边,反复进行,直到没有圈为止。 对例 9-6依此去掉的边为: (v5 、 v6) , (v2 、 v5) , (v3 、 v1) , (v6 、 v4) 。也得到图 9-12 所示的最小树,总权和为 14 。
9.6 网络设施选址问题 P- 中位问题 :不考虑建站成本,而选 P个服务站最小化总路线成本。 P- 中心问题 :是探讨如何在网络中选择 P个服务站,使得任意一需求点到距离该需求点最近的服务站的最大距离最小。 最大覆盖问题 :在服务站的数目和服务半径已知的条件下,如何设立 P个服务站使得可接受服务的需求量最大。 集覆盖问题:覆盖所有需求点顾客的前提下,服务站总的建站个数或建设费用最小。
9.6 网络设施选址问题 __ 中位问题 案例:商业公司希望从它的 10 个零售店中选择 3个进行扩建,成立物流中心为它的 10 个零售店进行配送服务,已知每个零售店每天的配送量,零售店之间的距离,问:如何选择最合适的物流中心使得总配送成本最低。
9.6 网络设施选址问题 __ 中位问题 min=@sum(ij(i , j) : h(i)*d(i , j)*y(i ,
j)) ; @for(ii(i) : @sum(ii(j) : y(i , j))=1 ) ; @sum(ii(j) : x(j))=3 ; @for(ij(i , j) : y(i , j)-x(j)<=0 ) ; @for(ii(i) : @bin(x(i)) ) ; @for(ij(i , j) : @bin(y(i , j)) ) ; end
9.6 网络设施选址问题 __ 中位问题
9.6 网络设施选址问题 __ 集覆盖问题
9.6 网络设施选址问题 __ 最大覆盖问题
9.6 网络设施选址问题 __ 中心问题
9.7 车辆路径问题 案例:车辆路径问题 (Vehicle Routing Problem , VRP) 是指对一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的。
9.7 车辆路径问题0 0 1
0
1
min
1, 2,..., (1)
1 1, 2,..., N
0
N N K
ij ijki j k
N
i iki
K
ikk
Z c x
g y Q K
iy
K i
k
0
1
(2)
0,1, 2,..., N =1,2,...,K (3)
0,1, 2,..., N k=1,2,...,K (4)
(
N
ijk jki
k
ijk ikj
ijk
x y j
x y i
x
;k
;
=0 , ) A (5)
( 1) i j i=1,2..N j=1,2..N (6)
0,1 =0,1
i j ijkk
ijk ik
i j
u u N x N
x y
i
, ;
; ;u >0
9.7 车辆路径问题
为何需要约束式 (6) ?为了避免一辆车子产出多个回路的现象。
0 1 2 3
45
6 7
0 1 2 3
45
6 7
9.7 车辆路径问题 车辆路径问题 LINGO 主程序 min=@sum(ijk(i , j , k) : c(i , j)*x(i , j , k)) ; @for(kk(k) : @sum(ii(i) : g(i)*y(i , k))<=15 ) ; @for(ii(j)|j #gt# 1 : @sum(kk(k) : y(j , k))=1 ) ; @for(ii(j)|j #eq# 1 : @sum(kk(k) : y(j , k))=3 ) ; @for(ik(j , k) : @sum(ii(i)|i #ne# j : x(i , j , k))=y(j , k) ) ; @for(ik(i , k) : @sum(ii(j)|i #ne# j : x(i , j , k))=y(i , k) ) ; @for(ij(i , j)|i #ne# j #and# i #gt# 1 #and# j #gt# 1 : u(i)-u(j)+11*@sum(kk(k) : x(i , j , k))<=10 ) ; @for(ijk : @bin(x)) ; @for(ik : @bin(y)) ; end
9.7 车辆路径问题 __ 程序计算结果
9.8 选址路线问题 案例 :某企业有 6 个稳定的经销商,现决定为其建立配送中心,已知该企业候选的 2 辆 5吨及其估算的车辆成本, 2 个候选的建站场地及其估算的建站费用, 6 个客户每天的大致配送量,建站场地及客户的位置及距离, 7 、 8 为候选的建站场地; 1至 6 为经销商位置。
9.8 选址路线问题 __ 概念 选址路线问题是一个结合选址问题与车辆路径问题的决策。该问题研究如何选址配送中心,并且安排最优的配送车辆与配送路线,以使总建站成本、车辆成本、行驶成本最小。
9.8 选址路线问题 __ 模型min
1 (1)
0 , (2)
ij ijk j j k jki N j N k K j J j J k K
ijkk K i N
ijk jiki N i N
ijk jki I
Z c x f Z h y
x j I
x x j N k K
x y j J
, (3)
, (4)
, (5)
1
jik jki I
jk j
jkj J
k K
x y j J k K
y Z j J k K
y k K
(6)
(7)
1 i j i=1,2..N j=1,2..N (8)
0,1 =0,1
i ijk k jki I j J j J
i j ijkk
ijk ik
g x Q Y k K
u u n x n
x y
i i
, ;
; ;Z =0, 1; u >0
9.8 选址路线问题 __LINGO 主程序 min=@sum(ijk(i , j , k) : c(i , j)*x(i , j , k))+@sum(jj : f*z)+@sum(jk(j , k) : h(k)*y(j , k)) ; @for(ii(j) : @sum(nk(i , k)|i #ne# j : x(i , j , k))=1 ) ; @for(nk(j , k) : @sum(nn(i)|i #ne# j : x(i , j , k))-@sum(nn(i)|i #ne# j : x(j , i , k))=0 ) ; @for(jk(j , k) : @sum(ii(i) : x(i , j , k))=y(j , k) ) ; @for(iijj(i , j)|i #ne# j : u(i)-u(j)+6*@sum(kk(k) : x(i , j , k))<=5) ; @for(jk(j , k) : @sum(ii(i) : x(j , i , k))=y(j , k) ) ; @for(jk(j , k) : y(j , k)<=z(j)) ; @for(kk(k) : @sum(jj(i) : y(i , k))<=1 ) ; @for(kk(k) : @sum(ii(i) : g(i)*@sum(jj(j) : x(i , j , k)))<=@sum(jj(j) : y(j , k)*q(k)) ) ; @for(ijk : @bin(x)) ; @for(jk : @bin(y)) ; @for(jj : @bin(z)) ; end
9.8 选址路线问题 __ 程序计算结果