图论模型简介
05第5讲 图论模型

4
目标函数是使得 z wij xij 最小化。
i 1 j 1
n
n
约束条件分成如下 4 类: (1)根 v1 至少有一条边连接到其他的顶点,
v1
4 2 4 5 3
v2
1 3 4 4 2
v3
v1
1
v8
1
v0
1
v4
1
v8
v7
2
v2 1
v0
1
v3 1 v4 v5
5
v7
2 v6 (a)
5
v5
2 3
v6
2
图 5.4 生成的最小生成树
v0 , v1 ,
求最小生成树的 Kruskal 算法的 MATLAB 程序如下(用 MATLAB 计算时,顶点 : , v8 分别编号为 1, 2, ,9 ) clc, clear a=zeros(9); a(1,[2:9])=[2 1 3 4 4 2 5 4]; a(2,[3 9])=[4 1]; a(3,4)=1; a(4,5)=1; a(5,6)=5; a(6,7)=2; a(7,8)=3; a(8,9)=5; a=a'; %转成 MATLAB 需要的下三角元素 a=sparse(a); %转换为稀疏矩阵 b=graphminspantree(a,'Method','Kruskal') %注意要写 Kruskal 算法,否则使用 Prim 算法 L=sum(sum(b)) %求最小生成树的权重 view(biograph(b,[],'ShowArrows','off','ShowWeights','on')) %画最小生成树,
数学建模-图论模型

思路分析
• 每学期任课老师都有一定工作量的要求往往可能要上不止一门课 程。
• 每位同学需要在学期内完成若干门课程的学习。 • 某些对上课设施有特殊要求的课程,也不可以安排在同一时间。 • 为了方便开展一些全校性的活动,有些时段不安排课程。 • 受到教室数量的限制,在同一时段无法安排太多的课程。
模型建立
• 以每个课程为顶点,任何两个顶点之间连一条边当且仅当两门课 程的任课老师为同一人,或有学生同时选了这两门课或上课教室 冲突。
• 那么一个合理的课程安排就是将图中的点进行分化,使得每一个 部分里的点为一个独立集。
• 通过极小覆盖找出图中的极 大独立集,然后删去该极大 独立集,在剩下的图中找出 极大独立集,直到剩下的图 为一个独立集。
匈牙利算法
• 饱和点:M是图G的一个匹配,若G中顶点v是M中某条边的端 点,则称M饱和v,否则称v是M的非饱和点。
• 可扩路:一条连接两个非饱和点x和y的由M外的边和M的边交错 组成的路称为M的(x,y)可扩路。
• 算法基本步骤:
Kuhn-Munkres算法
1.2 图的独立集应用
• 问题描述:各大学学期临近结束时,需要根据老师任课 计划和学生选课情况,再结合教室资源情况安排下一学 期的课程及上课时间和地点。下表所示是某大学电信学 院的大三各专业部分课程情况。该学院每届学生按专业 分班,统一选课。另外,学院只有一间普通机房和一间 高级机房。那么应该如何合理地排这些课程呢?
则称其是双连通或强连通的。对于不是双连通的图,都可以分解成 若干个极大的双连通分支,且任意两分支之间的边是同向的。
举例:
• 右图所示竞赛图不是双连通的
•
为一条有向
的D哈密尔A顿路B。 C E
数学建模-图论模型及算法

问题二:若巡视人员要在乡停留T=2小时,村停留t=1小时,汽车时 速V=35公里/小时,那么至少分几组能在24小时内走完?并找出最佳巡 视路线。
乡镇、村的公路网示意图
问题分析
根据53组数据我们得到它的邻接矩阵,利用Kruskal算法用Matlab编 程处理后得到加权网络图的最小生成树。
例1 最短路问题(SPP-shortest path problem)
一名货车司机奉命在最短的时间内将一车货物从甲地运 往乙地。从甲地到乙地的公路网纵横交错,因此有多种行车 路线,这名司机应选择哪条线路呢?假设货车的运行速度是 恒定的,那么这一问题相当于需要找到一条从甲地到乙地的 最短路。
例2 公路连接问题
最小生成树的Kruskal算法: function [T c]=krusf(d,flag) if nargin==1
n=size(d,2); m=sum(sum(d~=0))/2; b=zeros(3,m); k=1; for i=1:n
for j=(i+1):n if d(i,j)~=0 b(1,k)=i;b(2,k)=j; b(3,k)=d(i,j); k=k+1; end
求最小生成树问题有很广泛的实际应用. 例如, 把n个乡镇 用高压电缆连接起来建立一个电网, 使所用的电缆长度之和最 短, 即费用最小, 就是一个求最小生成树问题.
最小生成树算法—Kruskal算法
• 思想:将图中所有边按权值从大到小排列,依次选所剩最 小的边加入边集T,只要不和前面加入的边构成回路,直到 T中有n-1条边,则T是最小生成树。
A
0 1 1
0 0 0
数学建模图论模型

任意两点均有通路的图称为连通图。
连通而无圈的图称为树,常用T=<V,E>表示树。
若图G’是图 G 的生成子图,且G’又是一棵树, 则称G’是图G 的生成树。
例 Ramsey问题
图1
图2
并且常记: V = v1, v2, … , vn, |V | = n ; E = {e1, e2, … , em}ek=vivj , |E | = m
称点vi , vj为边vivj的端点 在有向图中, 称点vi , vj分别为边vivj的 始点和终点. 该图称为n,m图
8
对于一个图G = V, E , 人们常用图形来表示它, 称其 为图解 凡是有向边, 在图解上都用箭头标明其方向.
4、P'代替P,T'代替T,重复步骤2,3
定理2 设 T为V的子集,P=V-T,设 (1)对P中的任一点p,存在一条从a到p的最短路径,这条路径仅有P中的
点构成, (2)对于每一点t,它关于P的指标为l(t),令x为最小指标所在的点, 即:
l(x)mli(tn )} t{ ,T
(3)令P’=P Ux,T’=T-{x},l’(t)表示T'中结点t关于P'的指标,则
解:用四维01向量表示人,狼,羊,菜例在过河西河岸问的题状态(在
岸则分量取1;否则取0),共有24 =16 种状态; 在河东岸 态类似记作。
由题设,状态(0,1,1,0),(0,0,1,1),(0,1,1,1)是不允许的
其对应状态:(1,0,0,1), (1,1,0,0),(1,0,0,0)也是不允许
数学建模方法之图论模型

定理 d (v) 2.
vV
推论 任何图中奇点 的个数为偶数. d (v1) 4
d (u3) 1
d (u3) 2
一个顶点记为 ui1,置 Si1 Si {ui1}.
3) 若 i 1,则停Hale Waihona Puke ;若 i 1,则用 i+1 代
替i,并转2).
S0 {u0},l(u j ) , j 1,2,...,7.
u1 S0 l(u1) min{,0 1}
Dijkstra算法: 求G中从顶点u0到其余顶点的最短路.
G[{v1,v2,v3}] G[{e3,e4,e5,e6}]
3) 若 V V,且 V ,以 V 为顶点集,以两端点 均在V 中的边的全体为边集的图 G 的子图,称 为G的由V 导出的子图,记为 G[V ] .
4) 若E E,且 E ,以 E为边集,以 E 的端点 集为顶点集的图 G 的子图,称为 G 的由E 导出的
第二讲 图论模型
1. 问题引入与分析
2. 图论的基本概念
3. 最短路问题及算法
4. 最小生成树及算法
回
5. 旅行售货员问题
停
6. 模型建立与求解 下
1. 问题引入与分析
1) 98年全国大学生数学建模竞赛B题“最佳灾 情巡视路线”中的前两个问题是这样的:
今年(1998年)夏天某县遭受水灾. 为考察灾情、 组织自救,县领导决定,带领有关部门负责人到 全县各乡(镇)、村巡视. 巡视路线指从县政府 所在地出发,走遍各乡(镇)、村,又回到县政 府所在地的路线.
图论 模型

图论模型图论是运筹学的一个经典和重要分支,专门研究图与网络模型的特点、性质以及求解方法。
许多优化问题,可以利用图与网络的固有特性而形成的特定方法来解决,比用数学规划等其他模型来求解往往要简单且有效得多。
图论起源于1736年欧拉对柯尼斯堡七桥问题的抽象和论证。
1936年,匈牙利数学家柯尼希(D. Kӧnig )出版的第一部图论专著《有限图与无限图理论》,树立了图论发展的第一座里程碑。
近几十年来,计算机科学和技术的飞速发展,大大地促进了图论研究和应用,其理论和方法已经渗透到物理、化学、计算机科学、通信科学、建筑学、生物遗传学、心理学、经济学、社会学各个学科中。
9.1 图的基础理论9.1.1 图的基本概念所谓图,概括地讲就是由一些点和这些点之间的连线组成的。
定义为(,)G V E =,V 是顶点的非空有限集合,称为顶点集。
E 是边的集合,称为边集。
边一般用(,)i j v v 表示,其中,i j v v 属于顶点集V 。
以下用V 表示图(,)G V E =中顶点的个数,E 表示边的条数。
如图9.1是几个图的示例,其中图9.1 (a)共有3个顶点、2条边,将其表示为(,)G V E =,123{,,}V v v v =,1213{(,),(,)}E v v v v =.23v 45v 34(a)(c)图9.1 图的示意图1.无向图和有向图如果图的边是没有方向的,则称此图为无向图(简称为图),无向图的边称为无向边(简称边)。
如图9.1 (a)和(b)都是无向图。
连接两顶点i v 和j v 的无向边记为(,)i j v v 或(,)j i v v 。
如果图的边是有方向(带箭头)的,则称此图为有向图,有向图的边称为弧(或有向边),如图9.1 (c)是一个有向图。
连接两顶点i v 和j v 的弧记为,i j v v 〈〉,其中i v 称为起点,j v 称为终点。
显然此时弧,i j v v 〈〉与弧,j i v v 〈〉是不同的两条有向边。
数学知识总结解决实际问题的常用数学模型

数学知识总结解决实际问题的常用数学模型数学作为一门科学,不仅仅是学科的基础,还是解决实际问题的重要工具。
在工程、物理、经济、生物等领域中,数学模型被广泛运用于解决各种实际问题。
本文将总结一些常用的数学模型,并说明它们在应用中的具体作用。
1. 线性回归模型线性回归模型是一种常见的统计学模型,它用于描述两个变量之间的线性关系。
在实际问题中,我们常常需要通过已知的数据来预测或估计未知的变量。
线性回归模型通过建立一个线性方程,根据已知的数据点进行拟合,并用于预测未知数据点的取值。
这种模型广泛应用于经济预测、市场分析等领域。
2. 概率统计模型概率统计模型是研究随机现象规律性的数学工具。
在实际问题中,我们常常需要确定某个事件发生的可能性。
概率统计模型通过统计分析已有的数据,从而得到事件发生的概率。
根据已有的统计数据,我们可以计算出事件发生的可能性,并做出相应的决策。
例如,在风险评估中,我们可以通过概率统计模型来评估某个投资产品的风险。
3. 最优化模型最优化模型是研究如何找到使某个目标函数取得最优值的数学模型。
在实际问题中,我们常常需要在一定的约束条件下,找到一组满足特定条件的最优解。
最优化模型可以通过建立数学模型,并应用最优化算法来求解。
在工程设计、物流规划等领域中,最优化模型被广泛应用。
4. 图论模型图论模型是研究图的性质和关系的数学工具。
在实际问题中,我们常常需要分析和描述事物之间的关系。
图论模型可以通过构建图来描述和分析事物之间的关系,并帮助我们解决实际问题。
在社交网络分析、交通规划等领域中,图论模型发挥着重要的作用。
5. 随机过程模型随机过程模型是研究随机现象随时间变化规律的数学工具。
在实际问题中,我们常常需要研究某个随机变量随时间的变化趋势,或者某个随机事件在一段时间内的累积概率。
随机过程模型可以通过建立数学模型,对随机现象进行建模和分析。
在金融风险管理、天气预测等领域中,随机过程模型被广泛应用。
东北大学数学建模-图论模型朱和贵

每对顶点间的最短路算法
寻求赋权图中各对顶点之间最短路,显然 可以调用 Dijkstra 算法。具体方法是:每次以 不同的顶点作为起点,用 Dijkstra 算法求出从 该起点到其余顶点的最短路径,反复执行次这 样的操作,就可得到每对顶点之间的最短路。 但这样做需要大量重复计算,效率不高。R. W. Floyd(弗洛伊德)另辟蹊径,提出了比这更好 的算法,操作方式与 Dijkstra 算法截然不同。
一个点v6表示第5年年底。 E ={vivj | 1≤i<j≤6}。
F (vi v j ) bi ck
k 1
34
j i
这样上述设备更新问题就变为:在有向赋权 图G = (V, E, F )(图解如下)中求v1到v6的最短路问 题。
35
从上图中容易得到v1到v6有两条最短路: v1v3v6和v1v4v6。
20
重要性质: 如果P是D中从vs到vj的最短路,vi是P中 的一个点,那么,从vs沿P到vi的路是从vs到vi
的最短路。
21
求非负赋权图G中某一点到其它各点最 短路,一般用Dijkstra (迪克斯特拉)标号算 法;求非负赋权图上任意两点间的最短路, 一般用Floyd(弗洛伊德)算法。这两种算法均 适用于有向非负赋权图(Floyd算法也适应 于负赋权图)。
(3,V1)
v2 3 1
6 4 1
v4 3 2
5
v3
(4,V2)
v6
6
v5
(5,V3)
28
(5) S:{V1,V2,V3, V5} S’:{V4,V6} 求出(S→ S’)所有 弧,分别计算: (0,V1) S24 =3 + 6=9 v1 S34 =4 + 4=8 S54 =5 + 2=7 S56=5 + 6=11 Min Sij=S54
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图论模型简介一、图及其矩阵表示1、起源:哥尼斯堡七桥问题:欧拉为了解决这个问题,建立数学模型:陆地——点,桥——边,得到一个有四个“点”,七条“边”的“图”。
问题转化为能否从任一点出发一笔画出七条边再回到起点。
欧拉考察了一般一笔画的结构特点,给出了一笔画判定法则:图是连通的,且每个顶点都与偶数条边相关联(这种图称为欧拉图)。
由此可以得出结论:七桥问题无解。
2、基本概念:图(graph):由顶点和边(又称线,边的两端必须是顶点)组成的一个结构。
邻接:一条边的两个端点称是邻接的;关联:边与其两端的顶点称是关联的。
无向图(graph):边无方向的图;有向图(digraph):边有方向的图。
路(path):由相邻边组成的序列,其中中间顶点互不相同。
圈(cycle):首、尾顶点相同的路,即闭路。
连通图(connected graph):图中任意两顶点间都存在路的图。
树(tree):无圈连通图完全图(complete graph):任意两个顶点之间都有边相连的无向图,记为K n。
竞赛图(tournament):由完全图给每条边定向而得到的有向图。
二部图(bipartite graph):图的顶点分成两部分,只有不同部分顶点之间才有边相连。
图G的子图H(subgraph):H是一个图,H的顶点(边)是图G的顶点(边)。
网络(Network):边上赋了权的有向图。
3、图的矩阵表示无向图 有向图010001011001011011000100⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦ ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡01100101000001001000001104、著名的图论问题例1 最短路问题(shortest path problem)出租车司机要从城市甲地到乙地,在纵横交错的路中如何选择一条最短的路线?例2 最小生成树问题(minimum-weight spanning tree problem)为了给小山村的居民送电,每户立了一根电杆,怎样连接可使连线最短?例3 中国邮递员问题(chinese postman problem)一名邮递员负责投递某个街区的邮件。
如何为他设计一条最短的投递路线?例4(二部图的)最优匹配问题(optimum matching)在赋权二部图中找一个权最大(最小)的匹配。
例5 旅行推销员问题(traveling salesman problem-TSP)一名推销员准备前往若干城市推销产品。
如何为他设计一条最短的旅行路线?例6 网络流问题(network flow problem)如何在一个有发点和收点的网络中确定具有最大容量的流。
二、求最短路的迪克斯特拉(Dijkstra )算法基本思想是按距0u 由近到远的顺序,依次确定0u 到G 的各顶点的最短路和距离。
为避免重复并保留每一步的计算信息,采用标号算法。
Dijkstra 算法如下:STEP1:1()0l u =,1v u ∀≠,∞=)(v l ,1{}S u =,1i =;STEP2:v S ∀∈(\S V S =),)(v l <- min {(),()()}i i l v l u w u v +, 1i i =+,计算min{()}v Sl v ∈,记达到这个最小值的一个顶点为i u ,令{}i S S u = ; STEP3:若||i V =,停止;否则,转STEP2。
例 求右图中从顶点u1到其它各点的最短路及相应的路径.求解过程列表如下:例 1 某公司在六个城市621,,,c c c 中有分公司,从i c 到j c 的直接航程票价记在下述矩阵的),(j i 位置上。
(∞表示无直接航路),请帮助该公司设计一张城市1c 到其它城市间的票价最便宜的路线图。
⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞055252510550102025251001020402010015252015050102540500解 第一个城市到其它城市的最短路径的Matlab 程序如下: clear; clc; M=10000;a(1,:)=[0,50,M,40,25,10];a(2,:)=[zeros(1,2),15,20,M,25];a(3,:)=[zeros(1,3),10,20,M];a(4,:)=[zeros(1,4),10,25];a(5,:)=[zeros(1,5),55];a(6,:)=zeros(1,6);a=a+a';pb(1:length(a))=0;pb(1)=1; % 永久标号点index1=1; % 标记确定为永久标记的次序index2=ones(1,length(a));%标记最短路上各点的先驱顶点d(1:length(a))=M;d(1)=0; % 标记最短距离temp=1; % 标记最近一个永久标号点while sum(pb)<length(a)tb=find(pb==0); % 临时标号点d(tb)=min(d(tb),d(temp)+a(temp,tb)); % 更新距离tmpb=find(d(tb)==min(d(tb))); % 确定新最小距离点temp=tb(tmpb(1)); % 记录新永久标号点pb(temp)=1; % 增加新永久标号点index1=[index1,temp]; % 记录新永久标号点index=index1(find(d(index1)==d(temp)-a(temp,index1))); % 确定前驱顶点if length(index)>=2 % 前驱顶点多于1个时取第一个index=index(1);endindex2(temp)=index; % 记录前驱顶点endd, index1, index2运行结果d = 0 35 45 35 25 10 index1 = 1 6 5 2 4 3 index2 = 1 6 5 6 1 1 动态规划方法基本方程: )}())(,(min{)(1++=k k k k k k x L x u x D x LLINGO 程序model : ! 动态规划方法;SETS : !CITIES 表示由1~9组成的集合,是一个基本集合; CITIES /1..9/: L; !属性L(i)表示城市i 到城市1的最优行驶路线的路长; ROADS(CITIES, CITIES)/ ! ROADS 表示网络中的弧,是由CITIES 派生的集合; 1,2 1,3 1,4 !并非所有城市间都有道路直接连接,故将弧具体列出; 2,5 2,6 3,5 3,6 4,5 4,6 5,7 5,8 6,7 6,87,9 8,9 /: D; !属性 D(i,j) 是城市i到j的直接距离(已知); ENDSETSDATA:D = 6 3 3 ! D赋值的顺序对应于ROADS中的弧的顺序;6 5 8 67 46 7 8 95 6;ENDDATAmin=L(1);L(9) = 0; !边界条件;@FOR( CITIES(i)| i #LT# 9: !集合循环语句, #LT#表示逻辑关系"小于";L(i) = @MIN( ROADS(i,j)|i #LT# j: D(i,j) + L(j)) ); !这就是动态规划基本方程; end(0-1)规划解法LINGO程序model: ! (0,1)--规划方法;SETS:CITIES /1..9/;ROADS(CITIES, CITIES)|&1 #LT# &2: D,x; ENDSETSDATA:D = 6 3 3 1000 1000 1000 1000 1000 1000 1000 6 5 1000 1000 10001000 8 6 1000 1000 10007 4 1000 1000 10001000 6 7 10008 9 10001000 56;ENDDATAmin=@SUM(ROADS:D*x);@SUM(CITIES(j)|j#GT#1:x(1,j))=1;@SUM(CITIES(i)|i#LT#9:x(i,9))=1;@FOR(CITIES(i)|i#GT#1 #and# i#LT#9:@SUM(CITIES(j)|j#GT#i:x(i,j))=@SUM(CITIES(j)|j#LT#i:x(j,i)));@FOR(ROADS:@BIN(x));end三、求最小生成树的prim算法设置两个集合P 和Q ,其中P 用于存放G 的最小生成树的顶点,Q 存放G 的最小生成树的边。
令P 的初值为}{1v P =(假设构造最小生成树时,从顶点1v 出发),Q 的初值为Φ=Q 。
prim 算法的思想是,从所有,(,)P V P -的边中,选取具有最小权值的边pv ,将顶点v 加入P 中,将边pv 加入Q 中,如此不断重复,直到V P =时,最小生成树构造完毕。
prim 算法如下:STEP1:}{1v P =,Φ=Q ;STEP2:while V P =~},,min(P V v P p w pv pv -∈∈=}{v P P +=,}{pv Q Q +=end例2 用prim 算法求右图的最小生成树。
解 用nr e s u l t ⨯3的第一、二、三行分别表示生成树边的起点、终点、权集合。
Matlab程序如下:clc;clear;M=1000;a(1,2)=50; a(1,3)=60;a(2,4)=65; a(2,5)=40;a(3,4)=52;a(3,7)=45;a(4,5)=50; a(4,6)=30;a(4,7)=42;a(5,6)=70;a=[a;zeros(2,7)];a=a+a';a(find(a==0))=M;result=[];p=1; % 设置生成树的起始顶点tb=2:length(a); % 设置生成树以外顶点while length(result)~=length(a)-1 % 边数不足顶点数-1temp=a(p,tb);temp=temp(:); % 取出与p关联的所有边d=min(temp); % 取上述边中的最小边[jb,kb]=find(a(p,tb)==d); % 寻找最小边的两个端点(可能不止一个) j=p(jb(1));k=tb(kb(1)); % 确定最小边的两个端点result=[result,[j;k;d]]; % 记录最小生成树的新边p=[p,k]; % 扩展生成树的顶点tb(find(tb==k))=[]; % 缩减生成树以外顶点endresultweight=sum(result(3,:)) % 计算最小生成树的权运行结果result = 1 2 5 4 4 72 5 4 6 7 350 40 50 30 42 45weight = 257四、求最大匹配的匈牙利算法0、从任意一个匹配M开始;1、若M饱和X的每个顶点,结束;否则,设u是X中的M非饱和顶点,置S={u},T=Φ;2、若N(S)=T, 停止;否则,设y∈N(S) \ T;3、若y是M饱和的,设yz∈M,S←S∪{z}, T←T∪{y}, 转2;否则,设P是M可扩(u,y)路, M←ME(P), 转1。