最小生成树-数学建模.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

引例:计算机网络的 线路设计
城市电信局有许多业务如收费, 营业,112,114等,希望在全市范围 实现计算机联网服务,共享各种资源。 一个主要关心的问题是:用数据通讯 线把一组站点联结起来,而不允许通 讯线在非站点处相交,如何连接可使 通讯线的花费最小?
引例:计算机网络的线路设计
8
1
2
5
7
1
5
6
显然 01
1) (i,j)=0和(i,j)=1分别
表示什么?2) 表达了什么?
建模
构造加权图 以机器为顶点,作一个完全图,每条边
(i,j)被赋予权(i,j)。
原问题的转化 加权图的最小生成树是由那些相异度最
小的边构成的连通图,如果希望把机器分成k 个组,就继续删去最小生成树上权最大的k-1 条边。于是得到k个分离的子树,每棵树的顶 点集就构成各机器组。
用Kruskal算法可求出最小生成树,在前面 给出的Kruskal算法的MATLAB程序中,边权矩阵b 的值改为此处的边权矩阵,顶点数n改为9即可。
上一页 下一页 主 页
T= 7 8 15 12 39 46 47 45 13
c = 4.4300
机器的分组:{3, 9},
{1,2,5},
{4,6,7,8}。
1) 贪婪法可被用于各种各样问题的 处理。该法只是一种试探法,计 算上简便有效,可提供正确解的 一个近似。但一般情况下,不能 保证输出的解是正确的。其正确 性需要证明,这往往比较困难。
2) 已证明,求最小生成树的Kruskal算 法和Prim算法都是正确的
返回
范例:制造系统的分组技术
分组技术是设计制造系统的一种方 法,它把生产零件的机器分组,相应地 把需生产的零件分类,使零件跨组加工 的情形尽量少,最理想的情况是使每个 零件的加工,都在组内完成。
11]
9 15 7 0 3 17 10 7 15 15
12]
12 16 9 3 0 8 10 6 15 15
13]
14 8 11 17 8 0 9 14 8 16
14]
12 11 7 10 10 9 0 8 6 11
15]
16 18 12 7 6 14 8 0 11 11
16]
17 14 12 15 15 8 6 11 0 10
t=1:n; k=0; T=[ ]; c=0;
for i=1:m
if t(B(1,i))~=t(B(2,i))
k=k+1; T(k,1:2)=B(1:2,i), c=c+B(3,i)
tmin=min(t(B(1,i)),t(B(2,i)));
tmax=max(t(B(1,i)),t(B(2,i)));
引例:计算机网络的线路设计
最小生成树
最大生成树 1) 一个完全图Kn有多少不同 的生成树? 2) 如何求其最小生成树?
引例:计算机网络的线路设计
10个顶点的完全图,其不同的生成树就有 一亿棵。
一般地,n个顶点的完全图,其不同的生成 树个数为nn-2。
30 个 顶 点 的 完 全 图 就 有 3028 个 生 成 树 , 求 最小生成树时用穷举法是无效的。
ii) w(ei1) 是满足i)的尽可能小的权,
3) 当第2)步不能继续执行时,则停止.
定理 由Kruskal算法构作的任何生成树
T * = G[{e1,e2,...,e 1}]都是最小生成树.
Kruskal 算 法
给每个子 树一个不 同的编号
1号 子树
8
1
2
5
7
1
5
3
6
10
4
3
9 2号
子树
3号 子树
1
.5
.5 3
1
2
9
.14
5
80
.87
7
.75
.67 4
6
.5 3
.5
1
2
9
.14
5
80
7
.75
.67 4
6
模型结果
机器的分组: {3,9},
.5 3 9
.5
1
2
.14
{1,2,5},
5
{4,6,7,8}。
8
0 7
.75
.67 4
6
你能给出对应于该机器分组
的零件分类吗?
返回
最小生成树问题的0-1规划模型
最小生成树问题的0-1规划模型
例 (最优连线问题)我国西部的SV地区共有1个城市(标 记为1)和9个乡镇(标记为2--10)组成,该地区不久将用 上天然气,其中城市1含有井源.现要设计一供气系统,使得 从城市1到每个乡镇(2--10)都有一条管道相连,并且铺设 的管子的量尽可能的少. 下表给出了城镇之间的距离.求SV 地区的最优连线.
设 dij是两点i与j之间的距离, xij = 0 或1(1表示连接,
0表示不连接),并假设顶点1是生成树的根.则
min
dij xij ;
(i, j )A
s.t.
x1 j 1, (根至少有一条边连接到其他边)
jV
xji = 1,i 1, (除根外,每个点只有一条边进入)
jV
(各边不构成圈)
最小生成树问题的0-1规划模型
7]data: !Distance matrix, it need not be symmetirc;
8] distance = 0 8 5 9 12 14 12 16 17 22
9]
8 0 9 15 16 8 11 18 14 22
10]
5 9 0 7 9 11 7 12 12 17
w(T*) = min{w(T )},式中取遍G 的所有生成树 T.
T
返回
最小生成树算法及其MATLAB程序实 现
Kruskal算法 算法的MATLAB程序实 现 Prim算法
返回
Kruskal 算

基本思想:
最初把图的n个顶点看作n个分离的部分树,每个树具有 一个顶点,算法的每一步选择可连接两分离树的边中权最 小的边连接两个部分树,合二为一,部分树逐步减少,直到 只有一个部分树(n-1步之后)便得到最小生成树。
最小生成树问题的0-1规划模型
29] @for(cities(j)| j #gt# 1 #and# j #ne# i :
● 时间复杂度:O(n2) , n为图的顶点数
1) Kruskal算法和Prim算法都蕴涵了 贪婪法的思想,是贪婪法;
2) 贪婪法的基本思想:把解看成是 由若干个部件构成,每一步求出 解的一个部件(不是从整体或长 远的角度考虑,只是局部或当前 的最好选择)。求出的一个个部 件组合而作为最终的解。
8
1
2
5
7
时间复杂度: O(m)
1
5
6 其中m为图的边数
3
10
4
3
Kruskal 算 法
步骤
1) 选择边e1,使得w(e1)尽可能小;
2) 若已选定边 e1,e2,..., ei,则从 E \ {e1,e2,..., ei} 中选取 ei1,使得: i) G[{e1,e2,..., ei1}] 为无圈图,
3
10
4
3
9
最经济的网络不应该有任何封闭的
回路。
引例:计算机网络的线路设计
生成树或支撑树(spanning tree):G的子
图且是树,其顶点集等于G的顶点集;
8 1
5
7
2
1
5
6 如何简便地得到
3
10
左图的生成树?
4
3
它应有几条边?
9
引例:计算机网络的线路设计
确定应在哪些站点之间铺设通讯 线路,是否可看作是在相应的加 权图中构造最小费用的生成树的 问题?
N
k=n-1或j=m
Y
T, c
t(i)=max{t(B(1,j)), t(B(2,j))
Y
N
t(i) min{t(B(1,j)), t( B(2,j)),
终止
Y
i=n
N
Kruskal 算 法
例 : 用 Kruskal 算 法 求 引 例 中 的 加 权
图的最小生成树。
8 1
5
7来自百度文库
1
5
3
10
2 边权矩阵:
假设有13种零件,需在9台机器上 加工。在各台机器上加工的零件号在下 表中给出。
范例:制造系统的分组技术
机器 1 2 3 4 5 6 7 8 9
加工 2,3, 2,7, 1,6 3, 3,7, 5 4, 4, 6
的零 7,8, 8, 件 9, 11,1
12, 2
5, 8,9, 10 12,
13
10 10
17]
22 22 17 15 15 16 11 11 10 0;
18] enddata
最小生成树问题的0-1规划模型
19]n=@size(cities); !The model size; 20]! Minimize total distance of the links; 21]min=@sum(link(i,j)|i #ne# j: distance(i,j)*x(i,j)); 22]!There must be an arc out of city 1; 23]@sum(cities(i)|i #gt# 1: x(1,i))>=1; 24]!For city i, except the base (city 1); 25]@for(cities(i) | i #gt# 1 : 26]! It must be entered; 27] @sum(cities(j)| j #ne# i: x(j,i))=1; 28]! level(j)=levle(i)+1, if we link j and i;
返回
整理边权矩阵
初始化:j0, T, c0, k0; 对所有顶点i ,t(i)i .
B: 图的边权矩阵; T: 生成树的边集; C: 生成树的权; t: 顶点所属子树的编号
jj+1
t(B(1,j))t(B(2,j)) Y
N
TT(B(1,j),B(2,j)), cc+B(3,j),kk+1,i 0
i i+1
模型求解
对表1给出的数据,加权图的边权矩阵如下: [1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 5 5 6 6 6 7 7 8;
234567893456789456789 5 6 7 8 9 6 7 8 9 7 8 9 8 9 9; 0.5 1 0.89 0.14 1 1 1 1 1 1 0.62 1 1 1 1 1 1 1 1 1 0.5 0.87 0.67 0.75 0.75 1 1 1 1 1 1 1 1 0 1 1]
for j=1:n
if t(j)==tmax if k==n-1
t(j)=tmin;
break ;
end
end
end
end
end
T,c
Kruskal 算 法
程序运行结果:
T=
1
2
7
14
4
5
1
5
6
23
3
2
5
4
3
c=
17
返回
Prim算法
● 基本思想:任选一个顶点v0开始,连接 与v0最近的顶点v1,得子树T1,再连接与T1 最近的顶点v2得子树T2,如此继续下去, 直到所有顶点都用到为止。
返回
最小生成树与算法
定义 设T = (V , E1)是赋权图G = (V , E)的一棵生 成树,称T中全部边上的权数之和为生成树的权,记为
w(T ),即w(T ) = w(e).
eE1
如果生成树T *的权 w(T *)是G 的所有生成树的权中最 小者,则称 T*是G 的最小生成树 ,简称为 最小树 ,即
最小生成树问题的0-1规划模型
最小生成树问题的0-1规划模型
解: 按照数学规划写出相应的LINGO程序,
MODEL: 1] sets: 2] cities/1..10/:level; !level(i)= the level of city; 3] link(cities, cities): 4] distance, !The distance matrix; 5] x; ! x(i,j)=1 if we use link i,j; 6] endsets
最小生成树算法
主要内容
一个例子 基本概念与结论 Kruskal算法 Prim算法 最小生成树问题的0-1规划模型
树图——直观形象的表示工具
类似于自 然界中的

赵明 赵雷 赵雨
赵根 赵亮
赵丽
赵虹 赵云 赵霞
赵松 赵梅
形象地表 示家族
树图——直观形象的表示工具
树: 没有圈的连通图 • 树中任意两点间有唯一路径。 • 树的边数恰好为顶点数减1。
13
范例:制造系统的分组技术
建模
设用Mi表示需由机器i加工的零件集,对任 意两台机器i,j, 定义相异度:
(i, j) = | Mi M j | | Mi Mj |
建模
(i, j) = | Mi M j | | Mi Mj |
“”:对称差, 分子:在机器i但不在机器j上加工,或在机
器j但不在机器i上加工的零件数。 分母:或在机器i,或在机器j上加工的零件数。
6 b=[1 1 1 2 2 3 3 4; 2 4 5 3 5 4 5 5;
4 9
3
8 1 5 6 7 9 10 3];
b=[1 1 1 2 2 3 3 4;2 4 5 3 5 4 5 5;8 1 5 6 7 9 10 3];
[B,i]=sortrows(b',3);B=B’; m=size(b,2);n=5;
相关文档
最新文档