广东省村庄规划编制基本技术指南 (试行) · 村庄规划基本成果应包括“一图一表一规则”,分别为村庄规划总 图、近期建设项目表和村庄规划管制规则。
第九章 图与网络规划
description
Transcript of 第九章 图与网络规划
第九章 图与网络规划
本章内容大纲 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 选址路线问题 __ 程序计算结果