当前位置:文档之家› 数学建模图与网络模型及方法

数学建模图与网络模型及方法

第五章 图与网络模型及方法

§1 概论

图论起源于18世纪。第一篇图论论文是瑞士数学家欧拉于1736 年发表的“哥尼斯堡的七座桥”。1847年,克希霍夫为了给出电网络方程而引进了“树”的概念。1857年,凯莱在计数烷22 n n H C 的同分异构物时,也发现了“树”。哈密尔顿于1859年提出“周游

世界”游戏,用图论的术语,就是如何找出一个连通图中的生成圈,近几十年来,由于计算机技术和科学的飞速发展,大大地促进了图论研究和应用,图论的理论和方法已经渗透到物理、化学、通讯科学、建筑学、生物遗传学、心理学、经济学、社会学等学科中。

图论中所谓的“图”是指某类具体事物和这些事物之间的联系。如果我们用点表示这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问题就是一个典型的例子。在哥尼斯堡有七座桥将普莱格尔河中的两个岛及岛与河岸联结起来问题是要从这四块陆地中的任何一块开始通过每一座桥正好一次,再回到起点。当

然可以通过试验去尝试解决这个问题,但该城居民的任何尝试均未成功。欧拉为了解决这个问题,采用了建立数学模型的方法。他将每一块陆地用一个点来代替,将每一座桥用连接相应两点的一条线来代替,从而得到一个有四个“点”,七条“线”的“图”。问题成为从任一点出发一笔画出七条线再回到起点。欧拉考察了一般一笔画的结构特点,给出了一笔画的一个判定法则:这个图是连通的,且每个点都与偶数线相关联,将这个判定法则应用于七桥问题,得到了“不可能走通”的结果,不但彻底解决了这个问题,而且开创了图论研究的先河。

图与网络是运筹学(Operations Research )中的一个经典和重要的分支,所研究的问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域。下面将要讨论的最短路问题、最大流问题、最小费用流问题和匹配问题等都是图与网络的基本问题。

我们首先通过一些例子来了解网络优化问题。

例1 最短路问题(SPP -shortest path problem )

一名货柜车司机奉命在最短的时间内将一车货物从甲地运往乙地。从甲地到乙地的公路网纵横交错,因此有多种行车路线,这名司机应选择哪条线路呢?假设货柜车的运行速度是恒定的,那么这一问题相当于需要找到一条从甲地到乙地的最短路。

例2 公路连接问题

某一地区有若干个主要城市,现准备修建高速公路把这些城市连接起来,使得从其中任何一个城市都可以经高速公路直接或间接到达另一个城市。假定已经知道了任意两个城市之间修建高速公路的成本,那么应如何决定在哪些城市间修建高速公路,使得总

成本最小?

例3 指派问题(assignment problem )

一家公司经理准备安排N 名员工去完成N 项任务,每人一项。由于各员工的特点不同,不同的员工去完成同一项任务时所获得的回报是不同的。如何分配工作方案可以使总回报最大?

例4 中国邮递员问题(CPP -chinese postman problem )

一名邮递员负责投递某个街区的邮件。如何为他(她)设计一条最短的投递路线(从邮局出发,经过投递区内每条街道至少一次,最后返回邮局)?由于这一问题是我国管梅谷教授1960年首先提出的,所以国际上称之为中国邮递员问题。

例5 旅行商问题(TSP -traveling salesman problem )

一名推销员准备前往若干城市推销产品。如何为他(她)设计一条最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?这一问题的研究历史十分悠久,通常称之为旅行商问题。

例6 运输问题(transportation problem )

某种原材料有M 个产地,现在需要将原材料从产地运往N 个使用这些原材料的工厂。假定M 个产地的产量和N 家工厂的需要量已知,单位产品从任一产地到任一工厂的运费已知,那么如何安排运输方案可以使总运输成本最低?

上述问题有两个共同的特点:一是它们的目的都是从若干可能的安排或方案中寻求某种意义下的最优安排或方案,数学上把这种问题称为最优化或优化(optimization )问题;二是它们都易于用图形的形式直观地描述和表达,数学上把这种与图相关的结构称为网络(network )。与图和网络相关的最优化问题就是网络最优化或称网络优化 (netwok optimization )问题。所以上面例子中介绍的问题都是网络优化问题。由于多数网络优化问题是以网络上的流(flow )为研究的对象,因此网络优化又常常被称为网络流(network flows )或网络流规划等。

下面首先简要介绍图与网络的一些基本概念。

§2 图与网络的基本概念

2.1 无向图

一个无向图(undirected graph)G 是由一个非空有限集合)(G V 和)(G V 中某些元素的无序对集合)(G E 构成的二元组,记为))(),((G E G V G =。其中},,,{)(21n v v v G V Λ=称为图G 的顶点集(vertex set )或节点集(node set ), )(G V 中的每一个元素),,2,1(n i v i Λ=称为该图的一个顶点(vertex )或节点(node );},,,{)(21m e e e G E Λ=称为图G 的边集(edge set ),)(G E 中的每一个元素k e (即)(G V 中某两个元素j i v v ,的无序对) 记为),(j i k v v e =或i j j i k v v v v e == ),,2,1(m k Λ=,被称为该图的一条从i v 到j v 的边(edge )。

当边j i k v v e =时,称j i v v ,为边k e 的端点,并称j v 与i v 相邻(adjacent );边k e 称为与

顶点j i v v ,关联(incident )。如果某两条边至少有一个公共端点,则称这两条边在图G 中相邻。

边上赋权的无向图称为赋权无向图或无向网络(undirected network )。我们对图和网络不作严格区分,因为任何图总是可以赋权的。

一个图称为有限图,如果它的顶点集和边集都有限。图G 的顶点数用符号||V 或)(G ν表示,边数用||E 或)(G ε表示。

当讨论的图只有一个时,总是用G 来表示这个图。从而在图论符号中我们常略去字母G ,例如,分别用ν,,E V 和ε代替)(),(),(G G E G V ν和)(G ε。

端点重合为一点的边称为环(loop)。

一个图称为简单图(simple graph),如果它既没有环也没有两条边连接同一对顶点。

2.2 有向图

定义 一个有向图(directed graph 或 digraph )G 是由一个非空有限集合V 和V 中某些元素的有序对集合A 构成的二元组,记为),(A V G =。其中},,,{21n v v v V Λ=称为图G 的顶点集或节点集, V 中的每一个元素),,2,1(n i v i Λ=称为该图的一个顶点或节点;},,,{21m a a a A Λ=称为图G 的弧集(arc set ),A 中的每一个元素k a (即V 中某两个元素j i v v ,的有序对) 记为),(j i k v v a =或),,2,1(n k v v a j i k Λ==,被称为该图的一条从i v 到j v 的弧(arc )。

当弧j i k v v a =时,称i v 为k a 的尾(tail ),j v 为k a 的头(head ),并称弧k a 为i v 的出弧

(outgoing arc ),为j v 的入弧(incoming arc )。

对应于每个有向图D ,可以在相同顶点集上作一个图G ,使得对于D 的每条弧,G 有一条有相同端点的边与之相对应。这个图称为D 的基础图。反之,给定任意图G ,对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这样的有向图称为G 的一个定向图。

以下若未指明“有向图”三字,“图”字皆指无向图。

2.3 完全图、二分图

每一对不同的顶点都有一条边相连的简单图称为完全图(complete graph)。n 个顶点的完全图记为n K 。

若Y X G V Y =)(,Φ=Y X I ,0||||≠Y X (这里||X 表示集合X 中的元素个数),X 中无相邻顶点对,Y 中亦然,

则称G 为二分图(bipartite graph);特别地,若Y y X x ∈∀∈∀,,则)(G E xy ∈,则称G 为完全二分图,记成|||,|Y X K 。

2.4 子图

图H 叫做图G 的子图(subgraph ),记作G H ⊂,如果)()(G V H V ⊂,)()(G E H E ⊂。若H 是G 的子图,则G 称为H 的母图。

G 的支撑子图

(spanning subgraph ,又成生成子图)是指满足)()(G V H V =的子图H 。

2.5 顶点的度

设)(G V v ∈,G 中与v 关联的边数(每个环算作两条边)称为v 的度(degree),记作)(v d 。若)(v d 是奇数,称v 是奇顶点(odd point);)(v d 是偶数,称v 是偶顶点(even point)。关于顶点的度,我们有如下结果:

(i) ∑∈=V

v v d ε2)(

(ii) 任意一个图的奇顶点的个数是偶数。

2.6 图与网络的数据结构

网络优化研究的是网络上的各种优化模型与算法.为了在计算机上实现网络优化的算法,首先我们必须有一种方法(即数据结构)在计算机上来描述图与网络。一般来说,算法的好坏与网络的具体表示方法,以及中间结果的操作方案是有关系的。这里我们介绍计算机上用来描述图与网络的5种常用表示方法:邻接矩阵表示法、关联矩阵表示法、弧表表示法、邻接表表示法和星形表示法。在下面数据结构的讨论中,我们首先假设),(A V G =是一个简单有向图,m A n V ==||,||,并假设V 中的顶点用自然数n ,,2,1Λ表示或编号,A 中的弧用自然数m ,,2,1Λ表示或编号。对于有多重边或无向网络的情况,我们只是在讨论完简单有向图的表示方法之后,给出一些说明。

(i )邻接矩阵表示法

邻接矩阵表示法是将图以邻接矩阵(adjacency matrix )的形式存储在计算机中。图),(A V G =的邻接矩阵是如下定义的:C 是一个n n ⨯的10-矩阵,即

n n n n ij c C ⨯⨯∈=}1,0{)(,

也就是说,如果两节点之间有一条弧,则邻接矩阵中对应的元素为1;否则为0。可以看出,这种表示法非常简单、直接。但是,在邻接矩阵的所有2n 个元素中,只有m 个为非零元。如果网络比较稀疏,这种表示法浪费大量的存储空间,从而增加了在网络中查找弧的时间。

例7 对于右图所示的图,可以用邻接矩阵表示为 同样,对于网络中的权,也可以用类似邻接矩阵的n n ⨯矩阵表示。只是此时一条弧所对应的元素不再是1,而是相应的权而已。如果网络中每条弧赋有多种权,则可以用多个矩阵表示这些权。

(ii )关联矩阵表示法

关联矩阵表示法是将图以关联矩阵(incidence matrix )的形式存储在计算机中.图),(A V G =的关联矩阵B 是如下定义的:B 是一个m n ⨯的矩阵,即

m n m n ik b B ⨯⨯-∈=}1,0,1{)(,

也就是说,在关联矩阵中,每行对应于图的一个节点,每列对应于图的一条弧。如果一个节点是一条弧的起点,则关联矩阵中对应的元素为1;如果一个节点是一条弧的终点,则关联矩阵中对应的元素为1-;如果一个节点与一条弧不关联,则关联矩阵中对应的元素为0。对于简单图,关联矩阵每列只含有两个非零元(一个1+,一个1-)。可以看出,这种表示法也非常简单、直接。但是,在关联矩阵的所有nm 个元素中,只有m 2个为非零元。如果网络比较稀疏,这种表示法也会浪费大量的存储空间。但由于关联矩阵有许多特别重要的理论性质,因此它在网络优化中是非常重要的概念。

例8 对于例7所示的图,如果关联矩阵中每列对应弧的顺序为(1,2),(1,3),(2,4),(3,2),(4,3),(4,5),(5,3)和(5,4),则关联矩阵表示为

同样,对于网络中的权,也可以通过对关联矩阵的扩展来表示。例如,如果网络中每条弧有一个权,我们可以把关联矩阵增加一行,把每一条弧所对应的权存储在增加的行中。如果网络中每条弧赋有多个权,我们可以把关联矩阵增加相应的行数,把每一条弧所对应的权存储在增加的行中。

(iii )弧表示法

弧表表示法将图以弧表(arc list )的形式存储在计算机中。所谓图的弧表,也就是图的弧集合中的所有有序对。弧表表示法直接列出所有弧的起点和终点,共需m 2个存储单元,因此当网络比较稀疏时比较方便。此外,对于网络图中每条弧上的权,也要对应地用额外的存储单元表示。例如,例7所示的图,假设弧(1,2),(1,3),(2,4),(3,2),(4,3),(4,5),(5,3)和(5,4)上的权分别为8,9,6,4,0,3,6和7,则弧表表示如起点 1 1 2 3 4 4 5 5

终点 2 3 4 2 3 5 3 4

权 8 9 6 4 0 3 6 7

照这样的顺序存储的。

(iv )邻接表表示法

邻接表表示法将图以邻接表(adjacency lists )的形式存储在计算机中。所谓图的邻接表,也就是图的所有节点的邻接表的集合;而对每个节点,它的邻接表就是它的

所有出弧。邻接表表示法就是对图的每个节点,用一个单向链表列出从该节点出发的所有弧,链表中每个单元对应于一条出弧。为了记录弧上的权,链表中每个单元除列出弧的另一个端点外,还可以包含弧上的权等作为数据域。图的整个邻接表可以用一个指针数组表示。例如,例7所示的图,邻接表表示为

这是一个5维指针数组,每一维(上面表示法中的每一行)对应于一个节点的邻接表,如第1行对应于第1个节点的邻接表(即第1个节点的所有出弧)。每个指针单元的第1个数据域表示弧的另一个端点(弧的头),后面的数据域表示对应弧上的权。如第1行中的“2”表示弧的另一个端点为2(即弧为(1,2)),“8”表示对应弧(1,2)上的权为8;“3”表示弧的另一个端点为3(即弧为(1,3)),“9”表示对应弧(1,3)上的权为9。又如,第5行说明节点5出发的弧有(5,3)、(5,4),他们对应的权分别为6和7。

对于有向图),(A V G =,一般用)(i A 表示节点i 的邻接表,即节点i 的所有出弧构成的集合或链表(实际上只需要列出弧的另一个端点,即弧的头)。例如上面例子,}3,2{)1(=A ,}4,3{)5(=A 等。这种记法我们在本书后面将会经常用到。

(v )星形表示法

星形(star )表示法的思想与邻接表表示法的思想有一定的相似之处。对每个节点,它也是记录从该节点出发的所有弧,但它不是采用单向链表而是采用一个单一的数组表示。也就是说,在该数组中首先存放从节点1出发的所有弧,然后接着存放从节点2出发的所有孤,依此类推,最后存放从节点n 出发的所有孤。对每条弧,要依次存放其起点、终点、权的数值等有关信息。这实际上相当于对所有弧给出了一个顺序和编号,只是从同一节点出发的弧的顺序可以任意排列。此外,为了能够快速检索从每个节点出发的所有弧,我们一般还用一个数组记录每个节点出发的弧的起始地址(即弧的编号)。在这种表示法中,可以快速检索从每个节点出发的所有弧,这种星形表示法称为前向星形(forward star )表示法。

例如,在例7所示的图中,仍然假设弧(1,2),(l,3),(2,4),(3,2),(4,3),(4,5),(5,3)和(5,4)上的权分别为8,9,6,4,0,3,6和7。此时该网络图可以用前向星形表示法表示如下:

节点对应的出弧的起始地址编号数组(记为point )

point 1+n 1)1(=point ,1)1(+=+m n point 。对于节点i ,其对应的出弧存放在弧信息数组的位置区间为

]1)1(),([-+i point i point ,

如果)1()(+=i point i point ,则节点i 没有出弧。这种表示法与弧表表示法也非常相似,“记录弧信息的数组”实际上相当于有序存放的“弧表”。只是在前向星形表示法中,弧被编号后有序存放,并增加一个数组(point )记录每个节点出发的弧的起始编号。

前向星形表示法有利于快速检索每个节点的所有出弧,但不能快速检索每个节点的所有入弧。为了能够快速检索每个节点的所有入孤,可以采用反向星形(reverse star )表示法:首先存放进入节点1的所有孤,然后接着存放进入节点2的所有弧,依此类推,

最后存放进入节点n 的所有孤。对每条弧,仍然依次存放其起点、终点、权的数值等有关信息。同样,为了能够快速检索从每个节点的所有入弧,我们一般还用一个数组记录每个节点的入孤的起始地址(即弧的编号)。例如,例7所示的图,可以用反向星形表示法表示为如下形式:

节点对应的入弧的起始地址编号数组(记为rpoint )

则可以综合采用前向和反向星形表示法。当然,将孤信息存放两次是没有必要的,可以只用一个数组(trace )记录一条弧在两种表示法中的对应关系即可。例如,可以在采用前向星形表示法的基础上,加上上面介绍的rpoint 数组和如下的trace 数组即可。这相当于一种紧凑的双向星形表示法如下所示:

① 星形表示法和邻接表表示法在实际算法实现中都是经常采用的。星形表示法的优点是占用的存储空间较少,并且对那些不提供指针类型的语言(如 FORTRAN 语言等)也容易实现。邻接表表示法对那些提供指针类型的语言(如C 语言等)是方便的,且增加或删除一条弧所需的计算工作量很少,而这一操作在星形表示法中所需的计算工作量较大(需要花费)(m O 的计算时间)。有关“计算时间”的观念是网络优化中需要考虑的一个关键因素。

② 当网络不是简单图,而是具有平行弧(即多重弧)时,显然此时邻接矩阵表示法是不能采用的。其他方法则可以很方便地推广到可以处理平行弧的情形。

③ 上述方法可以很方便地推广到可以处理无向图的情形,但由于无向图中边没有方向,因此可能需要做一些自然的修改。例如,可以在计算机中只存储邻接矩阵的一半信息(如上三角部分),因为此时邻接矩阵是对称矩阵。无向图的关联矩阵只含有元素0和1+,而不含有1-,因为此时不区分边的起点和终点。又如,在邻接表和星形表示法中,每条边会被存储两次,而且反向星形表示显然是没有必要的,等等。

2.7 轨与连通

k k v e e v e v W Λ2110=,其中)(G E e i ∈,k i ≤≤1,)(G V v j ∈,k j ≤≤0,i e 与i i v v ,1-关联,

称W 是图G 的一条道路(walk),k 为路长,顶点0v 和k v 分别称为W 的起点和终点,而121,,,-k v v v Λ称为它的内部顶点。

若道路W 的边互不相同,则W 称为迹(trail)。若道路W 的顶点互不相同,则W 称为轨(path)。

称一条道路是闭的,如果它有正的长且起点和终点相同。起点和终点重合的轨叫做圈(cycle)。

若图G 的两个顶点v u ,间存在道路,则称u 和v 连通(connected)。v u ,间的最短轨的

长叫做v u ,间的距离。记作),(v u d 。若图G 的任二顶点均连通,则称G 是连通图。

显然有:

(i) 图P 是一条轨的充要条件是P 是连通的,且有两个一度的顶点,其余顶点的度为2;

(ii) 图C 是一个圈的充要条件是C 是各顶点的度均为2的连通图。

§3 应用—最短路问题

3.1 两个指定顶点之间的最短路径

问题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。

以各城镇为图G 的顶点,两城镇间的直通铁路为图G 相应两顶点间的边,得图G 。对G 的每一边e ,赋以一个实数)(e w —直通铁路的长度,称为e 的权,得到赋权图G 。G 的子图的权是指子图的各边的权和。问题就是求赋权图G 中指定的两个顶点00,v u 间的具最小权的轨。这条轨叫做00,v u 间的最短路,它的权叫做00,v u 间的距离,亦记作),(00v u d 。

求最短路已有成熟的算法:迪克斯特拉(Dijkstra )算法,其基本思想是按距0u 从近到远为顺序,依次求得0u 到G 的各顶点的最短路和距离,直至0v (或直至G 的所有顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。

(i) 令0)(0=u l ,对0u v ≠,令∞=)(v l ,}{00u S =,0=i 。

(ii) 对每个i S v ∈(i i S V S \=),用

代替)(v l 。计算)}({min v l i

S v ∈,把达到这个最小值的一个顶点记为1+i u ,令}{11++=i i i u S S Y 。 (iii). 若1||-=V i ,停止;若1||-

算法结束时,从0u 到各顶点v 的距离由v 的最后一次的标号)(v l 给出。在v 进入i S 之前的标号)(v l 叫T 标号,v 进入i S 时的标号)(v l 叫P 标号。算法就是不断修改各项点的T 标号,直至获得P 标号。若在算法运行过程中,将每一顶点获得P 标号所由来的边在图上标明,则算法结束时,0u 至各项点的最短路也在图上标示出来了。

例9 某公司在六个城市621,,,c c c Λ中有分公司,从i c 到j c 的直接航程票价记在下述

矩阵的),(j i 位置上。(∞表示无直接航路),请帮助该公司设计一张城市1c 到其它城市间

的票价最便宜的路线图。

用矩阵n n a ⨯(n 为顶点个数)存放各边权的邻接矩阵,行向量pb 、1index 、2index 、d 分别用来存放P 标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量

⎨⎧=顶点未标号当第顶点已标号当第i i i pb 01)(; )(2i index 存放始点到第i 点最短通路中第i 顶点前一顶点的序号;

)(i d 存放由始点到第i 点最短通路的值。

求第一个城市到其它城市的最短路径的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)

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

index=index(1);

end

index2(temp)=index;

end

d, index1, index2

3.2 每对顶点之间的最短路径

计算赋权图中各对顶点之间最短路径,显然可以调用Dijkstra 算法。具体方法是:每次以不同的顶点作为起点,用Dijkstra 算法求出从该起点到其余顶点的最短路径,反复执行n 次这样的操作,就可得到从每一个顶点到其它顶点的最短路径。这种算法的时间复杂度为)(3n O 。第二种解决这一问题的方法是由Floyd R W 提出的算法,称之为Floyd 算法。

假设图G 权的邻接矩阵为0A ,

来存放各边长度,其中:

0=ii a n i ,,2,1Λ=;

∞=ij a j i ,之间没有边,在程序中以各边都不可能达到的充分大的数代替; ij ij w a = ij w 是j i ,之间边的长度,n j i ,,2,1,Λ=。

对于无向图,0A 是对称矩阵,ji ij a a =。

Floyd 算法的基本思想是:递推产生一个矩阵序列n k A A A A ,,,,,10ΛΛ,其中),(j i A k 表示从顶点i v 到顶点j v 的路径上所经过的顶点序号不大于k 的最短路径长度。

计算时用迭代公式:

k 是迭代次数,n k j i ,,2,1,,Λ=。

最后,当n k =时,n A 即是各顶点之间的最短通路值。

例10 用Floyd 算法求解例1。

矩阵path 用来存放每对顶点之间最短路径上所经过的顶点的序号。Floyd 算法的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);

b=a+a';path=zeros(length(b));

for k=1:6

for i=1:6

for j=1:6

if b(i,j)>b(i,k)+b(k,j)

b(i,j)=b(i,k)+b(k,j);

path(i,j)=k;

end

end

end

end

b, path

§4 树

4.1 基本概念

连通的无圈图叫做树,记之为T 。若图G 满足)()(T V G V =,)()(G E T E ⊂,则称T 是G 的生成树。图G 连通的充分必要条件为G 有生成树。一个连通图的生成树的个数很多,用)(G τ表示G 的生成树的个数,则有公式

公式 (Caylay)2)(-=n n n K τ。

公式 )()()(e G e G G ⋅+-=τττ。

其中e G -表示从G 上删除边e ,e G ⋅表示把e 的长度收缩为零得到的图。

树有下面常用的五个充要条件。

定理1 (i )G 是树当且仅当G 中任二顶点之间有且仅有一条轨道。

(ii )G 是树当且仅当G 无圈,且1-=νε。

(iii )G 是树当且仅当G 连通,且1-=νε。

(iv )G 是树当且仅当G 连通,且)(G E e ∈∀,e G -不连通。

(v )G 是树当且仅当G 无圈,)(G E e ∉∀,e G +恰有一个圈。

4.2 应用—连线问题

欲修筑连接n 个城市的铁路,已知i 城与j 城之间的铁路造价为ij C ,设计一个线路图,

使总造价最低。

连线问题的数学模型是在连通赋权图上求权最小的生成树。赋权图的具有最小权的生成树叫做最小生成树。

下面介绍构造最小生成树的两种常用算法。

4.2.1 prim 算法构造最小生成树

设置两个集合P 和Q ,其中P 用于存放G 的最小生成树中的顶点,集合Q 存放G 的最小生成树中的边。令集合P 的初值为}{1v P =(假设构造最小生成树时,从顶点1v 出发),集合Q 的初值为Φ=Q 。prim 算法的思想是,从所有P p ∈,P V v -∈的边中,选取具有最小权值的边pv ,将顶点v 加入集合P 中,将边pv 加入集合Q 中,如此不断重复,直到V P =时,最小生成树构造完毕,这时集合Q 中包含了最小生成树的所有边。

prim 算法如下:

(i )}{1v P =,Φ=Q ;

(ii )while V P =~

end

例11 用prim 算法求右图的最小生成树。

我们用n result ⨯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

temp=a(p,tb);temp=temp(:);

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))=[]; end

result

4.2.1 Kruskal 算法构造最小生成树

科茹斯克尔(Kruskal )算法是一个好算法。Kruskal 算法如下:

(i)选)(1G E e ∈,使得m in )(1=e w 。

(ii)若i e e e ,,,21Λ已选好,则从},,,{)(21i e e e G E Λ-中选取1+i e ,使得

① }],,,,[{121+i i e e e e G Λ中无圈,且

② min )(1=+i e w 。

(iii)直到选得1-νe 为止。

例12 用Kruskal 算法构造例3的最小生成树。

我们用n index ⨯2存放各边端点的信息,当选中某一边之后,就将此边对应的顶点序号

中较大序号u 改记为此边的另一序号v ,同时把后面边中所有序号为u 的改记为v 。此方法的几何意义是:将序号u 的这个顶点收缩到v 顶点,u 顶点不复存在。后面继续寻查时,发现某边的两个顶点序号相同时,认为已被收缩掉,失去了被选取的资格。

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;

[i,j]=find((a~=0)&(a~=M));

b=a(find((a~=0)&(a~=M)));

data=[i';j';b'];index=data(1:2,:);

loop=max(size(a))-1;

result=[];

while length(result)

temp=min(data(3,:));

flag=find(data(3,:)==temp);

flag=flag(1);

v1=data(1,flag);v2=data(2,flag);

if index(1,flag)~=index(2,flag) result=[result,data(:,flag)]; end

if v1>v2

index(find(index==v1))=v2; else

index(find(index==v2))=v1; end

data(:,flag)=[]; index(:,flag)=[]; end result

§5 匹配问题

定义 若)(G E M ⊂,M e e j i ∈∀,,i e 与j e 无公共端点(j i ≠),则称M 为图G 的一个对集;M 中的一条边的两个端点叫做在对集M 中相配;M 中的端点称为被M 许配;G 中每个顶点皆被M 许配时,M 称为完美对集;G 中已无使|||'|M M >的对集'M ,则M 称为最大对集;若G 中有一轨,其边交替地在对集M 内外出现,则称此轨为M 的交错轨,交错轨的起止顶点都未被许配时,此交错轨称为可增广轨。

若把可增广轨上在M 外的边纳入对集,把M 内的边从对集中删除,则被许配的顶点数增加2,对集中的“对儿”增加一个。

1957年,贝尔热(Berge)得到最大对集的充要条件:

定理2 M 是图G 中的最大对集当且仅当G 中无M 可增广轨。 1935年,霍尔(Hall)得到下面的许配定理:

定理 3 G 为二分图,X 与Y 是顶点集的划分,G 中存在把X 中顶点皆许配的对集的充要条件是,X S ⊂∀,则|||)(|S S N ≥,其中)(S N 是S 中顶点的邻集。

由上述定理可以得出:

推论1:若G 是k ()0>k 正则2分图,则G 有完美对集。 所谓k 正则图,即每顶点皆k 度的图。 由此推论得出下面的婚配定理:

定理 4 每个姑娘都结识)1(≥k k 位小伙子,每个小伙子都结识k 位姑娘,则每位姑娘都能和她认识的一个小伙子结婚,并且每位小伙子也能和他认识的一个姑娘结婚。

人员分派问题等实际问题可以化成对集来解决。

人员分派问题:工作人员n x x x ,,,21Λ去做n 件工作n y y y ,,,21Λ,每人适合做其中一件或几件,问能否每人都有一份适合的工作?如果不能,最多几人可以有适合的工作?

这个问题的数学模型是:G 是二分图,顶点集划分为Y X G V Y =)(,},,{11n x x X Λ=,},,{11n y y Y Λ=,当且仅当i x 适合做工作i y 时,)(G E y x i i ∈,求G 中的最大对集。

解决这个问题可以利用1965年埃德门兹(Edmonds)提出的匈牙利算法。 匈牙利算法:

(i )从G 中任意取定一个初始对集M 。

(ii )若M 把X 中的顶点皆许配,停止,M 即完美对集;否则取X 中未被M 许配的一顶点u ,记}{u S =,Φ=T 。

(iii )若T S N =)(,停止,无完美对集;否则取T S N y -∈)(。

(iv )若y 是被M 许配的,设M yz ∈,}{z S S Y =,}{y T T Y =,转(iii );否则,取可增广轨),(y u P ,令))(())((M P E P E M M --=Y ,转(ii )。

把以上算法稍加修改就能够用来求二分图的最大对集。

最优分派问题:在人员分派问题中,工作人员适合做的各项工作当中,效益未必一致,我们需要制定一个分派方案,使公司总效益最大。

这个问题的数学模型是:在人员分派问题的模型中,图G 的每边加了权0)(≥j i y x w ,表示i x 干j y 工作的效益,求加权图G 上的权最大的完美对集。

解决这个问题可以用库恩—曼克莱斯(Kuhn-Munkres )算法。为此,我们要引入可行顶点标号与相等子图的概念。

定义 若映射R G V l →)(:,满足Y y X x ∈∈∀,, ),()()(y x w y l x l ≥+,

则称l 是二分图G 的可行顶点标号。令

)}()()(),(|{xy w y l x l G E xy xy E l =+∈=,

称以l E 为边集的G 的生成子图为相等子图,记作l G 。

可行顶点标号是存在的。例如 Y y y l ∈= ,0)(。

定理5 l G 的完美对集即为G 的权最大的完美对集。 Kuhn-Munkres 算法

(i )选定初始可行顶点标号l ,确定l G ,在l G 中选取一个对集M 。

(ii )若X 中顶点皆被M 许配,停止,M 即G 的权最大的完美对集;否则,取l G 中未被M 许配的顶点u ,令}{u S =, Φ=T 。

(iii)若T S N l

G ⊃)(,转(iv );若T S N l

G =)(,取

)}()()({min ,xy w y l x l T

y S x l -+=∉∈α,

⎪⎩

⎨⎧∈+∈-=其它),(,)(,)()(v l T v v l S

v v l v l l l αα,

l l = ,l l G G =。

(iv )选T S N l

G -)(中一顶点y ,若y 已被M 许配,且M yx ∈,则}{z S S Y =,

}{y T T Y =,转(iii )

;否则,取l G 中一个M 可增广轨),(y u P ,令 ))(())((M P E P E M M --=Y ,

转(ii )。

其中)(S N l

G 是l G 中S 的相邻顶点集。

§6 Euler 图和Hamilton 图

6.1 基本概念

定义 经过G 的每条边的迹叫做G 的Euler 迹;闭的Euler 迹叫做Euler 回路或E 回路;含Euler 回路的图叫做Euler 图。

直观地讲,Euler 图就是从一顶点出发每边恰通过一次能回到出发点的那种图,即不重复地行遍所有的边再回到出发点。

定理7 (i )G 是Euler 图的充分必要条件是G 连通且每顶点皆偶次。

(ii )G 是Euler 图的充分必要条件是G 连通且Y d

i i C G 1==,i C 是圈,

)()()(j i C E C E j i ≠Φ=I 。

(iii )G 中有Euler 迹的充要条件是G 连通且至多有两个奇次点。

定义 包含G 的每个顶点的轨叫做Hamilton(哈密顿)轨;闭的Hamilton 轨叫做

Hamilton 圈或H 圈;含Hamilton 圈的图叫做Hamilton 图。

直观地讲,Hamilton 图就是从一顶点出发每顶点恰通过一次能回到出发点的那种图,即不重复地行遍所有的顶点再回到出发点。

6.2 Euler 回路的Fleury 算法

1921年,Fleury 给出下面的求Euler 回路的算法。 Fleury 算法: 1o

. )(0G V v ∈∀,令00v W =。 2o

. 假设迹i i i v e v e v W Λ110=已经选定,那么按下述方法从},,{1i e e E Λ-中选取边1+i e : (i )1+i e 和i v 相关联; (ii )除非没有别的边可选择,否则1+i e 不是},,{1i i e e G G Λ-=的割边(cut edge)。(所谓割边是一条删除后使连通图不再连通的边)。

3o . 当第2步不能再执行时,算法停止。 6.3 应用

6.3.1 邮递员问题 中国邮递员问题

一位邮递员从邮局选好邮件去投递,然后返回邮局,当然他必须经过他负责投递的每条街道至少一次,为他设计一条投递路线,使得他行程最短。

上述中国邮递员问题的数学模型是:在一个赋权连通图上求一个含所有边的回路,且使此回路的权最小。

显然,若此连通赋权图是Euler 图,则可用Fleury 算法求Euler 回路,此回路即为所求。

对于非Euler 图,1973年,Edmonds 和Johnson 给出下面的解法: 设G 是连通赋权图。

(i )求)}2(m od 1)(),(|{0=∈=v d G V v v V 。 (ii )对每对顶点0,V v u ∈,求),(v u d (),(v u d 是u 与v 的距离,可用Floyd 算法求得)。 (iii )构造完全赋权图||0

V K ,以0V 为顶点集,以),(v u d 为边uv 的权。

(iv )求||0

V K 中权之和最小的完美对集M 。

(v )求M 中边的端点之间的在G 中的最短轨。

(vi )在(v )中求得的每条最短轨上每条边添加一条等权的所谓“倍边”(即共端点共权的边)。

(vii )在(vi )中得的图'G 上求Euler 回路即为中国邮递员问题的解。 多邮递员问题:

邮局有)2(≥k k 位投递员,同时投递信件,全城街道都要投递,完成任务返回邮局,如何分配投递路线,使得完成投递任务的时间最早?我们把这一问题记成kPP 。

kPP 的数学模型如下:

),(E V G 是连通图,)(0G V v ∈,求G 的回路k C C ,,1Λ,使得 (i ))(0i C V v ∈,k i ,,2,1Λ=, (ii )min )(max )

(1=∑∈≤≤i C E e k i e w ,

(iii )Y k

i i G E C E 1

)()(==

6.3.2 旅行商(TSP )问题

一名推销员准备前往若干城市推销产品,然后回到他的出发地。如何为他设计一条最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?这个问题称

为旅行商问题。用图论的术语说,就是在一个赋权完全图中,找出一个有最小权的Hamilton 圈。称这种圈为最优圈。与最短路问题及连线问题相反,目前还没有求解旅行商问题的有效算法。所以希望有一个方法以获得相当好(但不一定最优)的解。

一个可行的办法是首先求一个Hamilton 圈C ,然后适当修改C 以得到具有较小权的另一个Hamilton 圈。修改的方法叫做改良圈算法。设初始圈121v v v v C n Λ=。

(i )对于n j i <<+<11,构造新的Hamilton 圈: 12112121v v v v v v v v v v v C n j j i j j j i ij ΛΛΛ+++--=, 它是由C 中删去边1+i i v v 和1+j j v v ,添加边j i v v 和11++j i v v 而得到的。若

)()()()(1111+++++<+j j i i j i j i v v w v v w v v w v v w ,则以ij C 代替C ,ij C 叫做C 的改良圈。

(ii )转(i ),直至无法改进,停止。

用改良圈算法得到的结果几乎可以肯定不是最优的。为了得到更高的精确度,可以选择不同的初始圈,重复进行几次算法,以求得较精确的结果。

这个算法的优劣程度有时能用Kruskal 算法加以说明。假设C 是G 中的最优圈。则对于任何顶点v ,v C -是在v G -中的Hamilton 轨,因而也是v G -的生成树。由此推知:若T 是v G -中的最优树,同时e 和f 是和v 关联的两条边,并使得)()(f w e w +尽可能小,则)()()(f w e w T w ++将是)(C w 的一个下界。

这里介绍的方法已被进一步发展。圈的修改过程一次替换三条边比一次仅替换两条边更为有效;然而,有点奇怪的是,进一步推广这一想法,就不利了。

例13 从北京(Pe )乘飞机到东京(T)、纽约(N)、墨西哥城(M)、伦敦(L)、巴黎(Pa)五城市做旅游,每城市恰去一次再回北京,应如何安排旅游线,使旅程最短?各城市之

clc,clear

a(1,2)=56;a(1,3)=35;a(1,4)=21;a(1,5)=51;a(1,6)=60; a(2,3)=21;a(2,4)=57;a(2,5)=78;a(2,6)=70; a(3,4)=36;a(3,5)=68;a(3,6)=68; a(4,5)=51;a(4,6)=61; a(5,6)=13; a(6,:)=0; a=a+a';

c1=[5 1:4 6]; L=length(c1); flag=1;

while flag>0 flag=0; for m=1:L-3

for n=m+2:L-1 if

a(c1(m),c1(n))+a(c1(m+1),c1(n+1))

flag=1;

c1(m+1:n)=c1(n:-1:m+1); end end end end

sum1=0;

for i=1:L-1

sum1=sum1+a(c1(i),c1(i+1)); end

circle=c1; sum=sum1;

c1=[5 6 1:4];%改变初始圈,该算法的最后一个顶点不动 flag=1;

while flag>0 flag=0; for m=1:L-3

for n=m+2:L-1

if a(c1(m),c1(n))+a(c1(m+1),c1(n+1))<... a(c1(m),c1(m+1))+a(c1(n),c1(n+1)) flag=1;

c1(m+1:n)=c1(n:-1:m+1); end end end end

sum1=0;

for i=1:L-1

sum1=sum1+a(c1(i),c1(i+1)); end

if sum1

circle,sum §7 最大流问题

7.1 最大流问题的数学描述 7.1.1 网络中的流

定义 在以V 为节点集,A 为弧集的有向图),(A V G =上定义如下的权函数:

(i )R A L →:为孤上的权函数,弧A j i ∈),(对应的权),(j i L 记为ij l ,称为孤),(j i 的容量下界(lower bound );

(ii )R A U →:为弧上的权函数,弧A j i ∈),(对应的权),(j i U 记为ij u ,称为孤),(j i 的容量上界,或直接称为容量(capacity );

(iii )R V D →:为顶点上的权函数,节点V i ∈对应的权)(i D 记为i d ,称为顶点i 的供需量(supply /demand );

此时所构成的网络称为流网络,可以记为

),,,,(D U L A V N =。

由于我们只讨论A V ,为有限集合的情况,所以对于弧上的权函数U L ,和顶点上的权函数D ,可以直接用所有孤上对应的权组成的有限维向量表示,因此D U L ,,有时直接称为权向量,或简称权。由于给定有向图),(A V G =后,我们总是可以在它的弧集合和顶点集合上定义各种权函数,所以流网络一般也直接简称为网络。

在流网络中,弧),(j i 的容量下界ij l 和容量上界ij u 表示的物理意义分别是:通过该弧发送某种“物质”时,必须发送的最小数量为ij l ,而发送的最大数量为ij u 。顶点V i ∈对应的供需量i d 则表示该顶点从网络外部获得的“物质”数量(0i d 时)。下面我们给出严格定义。 定义 对于流网络),,,,(D U L A V N =,其上的一个流(flow )f 是指从N 的弧集A 到R 的一个函数,即对每条弧),(j i 赋予一个实数ij f (称为弧),(j i 的流量)。如果流f 满足

∑∑∈∈∈∀=-

A

i j j i ji

A

j i j ij

V i d f

f

),(:),(:,, (1)

A j i u f l ij ij ij ∈∀≤≤),(,, (2)

则称f 为可行流(feasible flow )。至少存在一个可行流的流网络称为可行网络(feasible network ).约束(1)称为流量守恒条件(也称流量平衡条件),约束(2)称为容量约束。

可见,当0>i d 时,表示有i d 个单位的流量从该项点流出,因此顶点i 称为供应点(supply node )或源(source ),有时也形象地称为起始点或发点等;当0

0=∑∈V

i i d (3)

也就是说,所有节点上的供需量之和为0是网络中存在可行流的必要条件。

一般来说,我们总是可以把0≠L 的流网络转化为0=L 的流网络进行研究。所以,除非特别说明,以后我们总是假设0=L (即所有孤),(j i 的容量下界0=ij l ),并将0=L 时的流网络简记为),,,(D U A V N =。此时,相应的容量约束(2)为 A j i u x ij ij ∈∀≤≤),(,0。

定义 在流网络),,,(D U A V N =中,对于流f ,如果 A j i f ij ∈∀=),(,0,

则称f 为零流,否则为非零流。如果某条弧),(j i 上的流量等于其容量(ij ij u f =),则称该弧为饱和弧(saturated arc );如果某条弧),(j i 上的流量小于其容量(ij ij u f <),则称该弧为非饱和弧;如果某条弧),(j i 上的流量为 0(0=ij f ),则称该弧为空弧(void arc )。 7.1.2 最大流问题

考虑如下流网络),,,(D U A V N =:节点s 为网络中唯一的源点,t 为唯一的汇点,而其它节点为转运点。如果网络中存在可行流f ,此时称流f 的流量(或流值,flow value )为s d (根据(3),它自然也等于t d -),通常记为v 或)(f v ,即

t s d d f v v -===)(。

对这种单源单汇的网络,如果我们并不给定s d 和t d (即流量不给定),则网络一般记

为),,,,(U A V t s N =。最大流问题(maximum flow problem )就是在),,,,(U A V t s N =中找到流值最大的可行流(即最大流)。我们将会看到,最大流问题的许多算法也可以用来求解流量给定的网络中的可行流。也就是说,当我们解决了最大流问题以后,对于在流量给定的网络中寻找可行流的问题,通常也就可以解决了。

因此,用线性规划的方法,最大流问题可以形式地描述如下:

s.t. ∑∑∈∈⎪⎩

⎨⎧≠=-==-A i j j ji A j i j ij t

s i t i v s i v x x ),(:),(:,,0,, , (4)

A j i u x ij ij ∈∀≤≤),(,0. (5) 定义 如果一个矩阵A 的任何子方阵的行列式的值都等于0,1或1-,则称A 是全幺模的(totally unimodular TU ,又译为全单位模的),或称A 是全幺模矩阵。

定理8(整流定理) 最大流问题所对应的约束矩阵是全幺模矩阵。若所有弧容量均为正整数,则问题的最优解为整数解。

最大流问题是一个特殊的线性规划问题。我们将会看到利用图的特点,解决这个问题的方法较之线性规划的一般方法要方便、直观得多。

7.1.3 单源和单汇运输网络

实际问题往往是多源多汇网络,为了计算的规格化,可将多源多汇网络G 化成单源单汇网络'G 。设X 是G 的源,Y 是G 的汇,具体转化方法如下:

(i )在原图G 中增加两个新的顶点x 和y ,令其分别为新图'G 中之单源和单汇,则G 中所有顶点V 成为'G 之中间顶点集。

(ii )用一条容量为∞的弧把x 连接到X 中的每个顶点。 (iii )用一条容量为∞的弧把Y 中的每个顶点连接到y 。

G 和'G 中的流以一个简单的方式相互对应。若f 是G 中的流,则由

所定义的函数'f 是'G 中使得)()'(f v f v =的流。反之,'G 中的流在G 的弧集上的限制就是G 中具有相同值的流。

7.2 最大流和最小割关系

设),,,,(U A V t s N =,V S ⊂,S s ∈,S V t -∈,则称),(S S 为网络的一个割,其中S V S -=,),(S S 为尾在S ,头在S 的弧集,称 为割),(S S 的容量。

定理9 f 是最大流,),(S S 是容量最小的割的充要条件是

),()(S S C f v =。

在网络),,,,(U A V t s N =中,对于轨),,,,(12t v v s n -Λ(此轨为无向的),若A v v i i ∈+1,则称它为前向弧;若A v v i i ∈+1,则称它为后向弧。

在网络N 中,从s 到t 的轨P 上,若对所有的前向弧),(j i 都有ij ij u f <,对所有的后向弧),(j i 恒有0>ij f ,则称这条轨P 为从s 到t 的关于f 的可增广轨。

⎩⎨⎧-=为后向弧当为前向弧

当((),,

),,j i f j i f u ij ij ij ij δ,

则在这条可增广轨上每条前向弧的流都可以增加一个量δ,而相应的后向弧的流可减少δ,这样就可使得网络的流量获得增加,同时可以使每条弧的流量不超过它的容量,而且保持为正,也不影响其它弧的流量。总之,网络中f 可增广轨的存在是有意义的,因为这意味着f 不是最大流。

7.3 最大流的一种算法—标号法

标号法是由Ford 和Fulkerson 在1957年提出的。用标号法寻求网络中最大流的基本思想是寻找可增广轨,使网络的流量得到增加,直到最大为止。

即首先给出一个初始流,这样的流是存在的,例如零流。如果存在关于它的可增广轨,那么调整该轨上每条弧上的流量,就可以得到新的流。对于新的流,如果仍存在可增广轨,则用同样的方法使流的值增大,继续这个过程,直到网络中不存在关于新得到流的可增广轨为止,则该流就是所求的最大流。

这种方法分为以下两个过程:

A.标号过程:通过标号过程寻找一条可增广轨。

B.增流过程:沿着可增广轨增加网络的流量。 这两个过程的步骤分述如下。 (A )标号过程:

(i )给发点标号为),(∞+

s 。

(ii )若顶点x 已经标号,则对x 的所有未标号的邻接顶点y 按以下规则标号: ① 若A y x ∈),(,且xy xy u f <时,令},min{x xy xy y f u δδ-=,

则给顶点y 标号为),(y x δ+

,若xy xy u f =,则不给顶点y 标号。

② A x y ∈),(,且0>yx f ,令},min{x yx y f δδ=,则给y 标号为),(y x δ-,若0=yx f ,则不给y 标号。

(iii )不断地重复步骤(ii )直到收点t 被标号,或不再有顶点可以标号为止。当t 被标号时,表明存在一条从s 到t 的可增广轨,则转向增流过程(B )。如若t 点不能被标号,且不存在其它可以标号的顶点时,表明不存在从s 到t 的可增广轨,算法结束,此时所获得的流就是最大流。

(B )增流过程 (i )令t u =。

(ii )若u 的标号为t v δ,(+),则t vu vu f f δ+=;若u 的标号为),(t v δ-

,则t uv uv f f δ-=。

(iii )若s u =,把全部标号去掉,并回到标号过程(A )。否则,令v u =,并回到增流过程(ii )。 求网络),,,,(U A V t s N =中的最大流x 的算法的程序设计具体步骤如下: 对每个节点j ,其标号包括两部分信息

该节点在可能的增广路中的前一个节点)(pred j ,以及沿该可能的增广路到该节点为止可以增广的最大流量

)(f max j 。

STEP0 置初始可行流x (如零流);对节点t 标号,即令)(f max t =任意正值(如1)。 STEP1 若0)(f max >j ,继续下一步;否则停止,已经得到最大流,结束。 STEP2 取消所有节点V j ∈的标号,即令0)(f max =j ,

0)(pred =j ;令LIST={s },对节点s 标号,即令=)(f max s 充分大的正值。 STEP3 如果LIST Φ≠且0)(f max =t ,继续下一步;否则:(3a )如果t 已经有标号(即0)(f max >t ),则找到了一条增广路,沿该增广路对流x 进行增广(增广的流量为)(f max t ,增广路可以根据pred 回溯方便

地得到),转STEP1。

(3b )如果t 没有标号(即LIST=Φ且0)(f max =t ),转STEP1。

STEP4 从LIST 中移走一个节点i ;寻找从节点i 出发的所有可能的增广弧:(4a )对非饱和前向弧),(j i ,若节点j 没有标号(即0)(pred =j ),对j 进行标号,即令

},)f(min{max )(f max ij ij x u i j -=,i j =)(pred ,

并将j 加入LIST 中。

(4b )对非空后向弧),(i j ,若节点j 没有标号(即0)(pred =j ),对j 进行标号,即令

},)f(min{max )(f max ij x i j =,i j -=)(pred ,

并将j 加入LIST 中。

例14 用Ford-Fulkerson 算法计算如下网络中的最大流,每条弧上的两个数字分别表示容量和当前流量。

解 编写程序如下:

clc,clear,M=1000;

u(1,2)=1;u(1,3)=1;u(1,4)=2;

u(2,3)=1;u(2,5)=2;

u(3,5)=1;

u(4,3)=3;u(4,5)=3;

f(1,2)=1;f(1,3)=0;f(1,4)=1;

f(2,3)=0;f(2,5)=1;

f(3,5)=1;

f(4,3)=1;f(4,5)=0;

n=length(u);

list=[];

maxf=zeros(1:n);maxf(n)=1;

while maxf(n)>0

maxf=zeros(1,n);pred=zeros(1,n);

list=1;record=list;maxf(1)=M;

while (~isempty(list))&(maxf(n)==0)

flag=list(1);list(1)=[];

index1=(find(u(flag,:)~=0));

label1=index1(find(u(flag,index1)...

-f(flag,index1)~=0));

label1=setdiff(label1,record);

list=union(list,label1);

pred(label1(find(pred(label1)==0)))=flag;

maxf(label1)=min(maxf(flag),u(flag,label1)...

-f(flag,label1));

record=union(record,label1);

label2=find(f(:,flag)~=0);

label2=label2';

label2=setdiff(label2,record);

list=union(list,label2);

pred(label2(find(pred(label2)==0)))=-flag;

maxf(label2)=min(maxf(flag),f(label2,flag));

record=union(record,label2);

end

if maxf(n)>0

v2=n;

v1=pred(v2);

while v2~=1

if v1>0

f(v1,v2)=f(v1,v2)+maxf(n);

else

v1=abs(v1);

f(v2,v1)=f(v2,v1)-maxf(n);

end

v2=v1;

v1=pred(v2);

end

end

end

f

§8 最小费用流及其求法

8.1 最小费用流

上面我们介绍了一个网络上最短路以及最大流的算法,但是还没有考虑到网络上流的费用问题,在许多

实际问题中,费用的因素很重要。例如,在运输问题中,人们总是希望在完成运输任务的同时,寻求一个使总的运输费用最小的运输方案。这就是下面要介绍的最小费用流问题。

在运输网络),,,,(U A V t s N =中,设ij c 是定义在A 上的非负函数,它表示通过弧),(j i 单位流的费用。所谓最小费用流问题就是从发点到收点怎样以最小费用输送一已知量为)(f v 的总流量。

最小费用流问题可以用如下的线性规划问题描述:

s.t. ∑∑∈∈⎪⎩

⎨⎧≠=-==-A i j j ji A j i j ij t

s i t i f v s i f v f f ),(:),(:,,0),(),( ,

A j i u f ij ij ∈∀≤≤),(,0.

显然,如果=)(f v 最大流)(max f v ,则本问题就是最小费用最大流问题。如果)()(max f v f v >,则本问题无解。

8.2 求最小费用流的一种方法—迭代法

这里所介绍的求最小费用流的方法叫做迭代法。这个方法是由Busacker 和Gowan 在1961年提出的。其主要步骤如下:

(i)求出从发点到收点的最小费用通路),(t s μ。

(ii)对该通路),(t s μ分配最大可能的流量:

并让通路上的所有边的容量相应减少f 。这时,对于通路上的饱和边,其单位流费用相应改为∞。

(iii)作该通路),(t s μ上所有边),(j i 的反向边),(i j 。令

f u ji =,ij ji c c -=

(iv)在这样构成的新网络中,重复上述步骤(i),(ii),(iii),直到从发点到收点的全部流量等于)(f v 为止(或者再也找不到从s 到t 的最小费用道路)。

习 题 五

1. 一只狼、一头山羊和一箩卷心菜在河的同侧。一个摆渡人要将它们运过河去,但由于船小,他一次只能运三者之一过河。显然,不管是狼和山羊,还是山羊和卷心菜,都不能在无人监视的情况下留在一起。问摆渡人应怎样把它们运过河去?

2. 北京(Pe )、东京(T)、纽约(N)、墨西哥城(M)、伦敦(L)、巴黎(Pa)各城市之间

3. 某台机器可连续工作4年,也可于每年末卖掉,换一台新的。已知于各年初购置一台新机器的价格及不同役龄机器年末的的处理价如下表所示。又新机器第一年运行及维修费为0.3万元,使用1-3年后机器每年的运行及维修费用分别为0.8,1.5,2.0万元。试确定该机器的最优更新策略,使4年内用于更换、购买及运行维修的总费用为i 仓库至j

数学建模的基本步骤及方法

数学建模的基本步骤及方法 数学建模是一种应用数学的方法,通过对实际问题进行抽象和建立 数学模型,以求解问题或进行预测和模拟。它在各个领域都有广泛的 应用,如物理学、工程学、经济学等。本文将介绍数学建模的基本步 骤及方法。 一、问题理解与建模目标确定 在进行数学建模之前,首先需要对问题进行全面的理解,并明确建 模的目标。了解问题的背景、限制条件和需求,明确要解决的主要问题。确定建模目标是指明建模的最终目的,如是否需要进行预测,求 解最优解或模拟系统行为等。 二、问题假设与参数设定 在建立数学模型时,为了简化问题和计算,我们常常需要进行一些 假设。假设可以是对某些变量的约束条件,或对系统行为的特定假设。另外,还需要确定模型中的参数,即直接影响模型行为和计算结果的 变量值。 三、模型构建与分析 模型构建是指根据问题的特性和建模目标,选择适当的数学方法和 公式,将问题转化为数学表达式。常用的数学方法包括微积分、线性 代数、随机过程等。模型构建后,需要对模型进行分析,检验模型的 可行性和有效性,评估模型与实际问题的拟合程度。

四、模型求解与结果验证 模型的求解是指通过计算或优化方法,求得模型的解析解或数值解。求解的方法多种多样,如数值计算、优化算法、模拟仿真等。求解后,需要对结果进行验证,比较模型求解的结果与实际情况的差异,并分 析产生差异的原因。 五、结果分析与报告撰写 对模型的结果进行分析是数学建模的重要环节。通过对结果的解释 和分析,了解模型对问题的预测、优化或模拟效果。在分析过程中, 需要注意结果的合理性和稳定性,以及对结果的可靠性和可解释性进 行评估。最后,撰写模型报告,将整个建模过程和结果进行系统化的 呈现和总结,并提出进一步改进的建议。 六、模型验证与应用 模型验证是指将建立好的数学模型应用于实际问题,并进行实验验 证和应用效果评估。通过与实际数据和实验结果进行比较,验证模型 的有效性和适用性。若模型符合实际要求,则可以将其应用于类似问 题的求解和预测。 总结: 数学建模的基本步骤包括问题理解与建模目标确定、问题假设与参 数设定、模型构建与分析、模型求解与结果验证、结果分析与报告撰写,以及模型验证与应用。在建模过程中,需要灵活运用数学工具和

数学建模的基本思路与方法

数学建模的基本思路与方法数学建模是通过建立数学模型来解决实际问题的一种方法。它不仅是数学和统计学领域的重要研究方向,也在物理、化学、生物、经济和工程等众多学科中得到广泛应用。本文将介绍数学建模的基本思路与方法。 一、问题的理解与分析 在进行数学建模之前,首先需要全面理解和分析问题。这包括对问题的背景、目标及约束条件进行明确,对问题所涉及的各种变量和参数进行分类和整理,了解问题的局限性和可行性等。 二、数学模型的建立 基于对问题的理解与分析,接下来要建立数学模型。数学模型是对实际问题进行抽象和数学化的表示。常用的数学模型包括方程模型、差分模型、微分模型、最优化模型等。 1. 方程模型 方程模型是最常见且基础的模型之一。它将实际问题中的各种关系和规律用数学方程进行表示。常见的方程模型有线性方程模型、非线性方程模型、微分方程模型等。 2. 差分模型

差分模型是离散的数学模型,适用于描述实际问题中的离散数据和变化趋势。差分模型通常用递推关系式进行表示,可以通过差分方程求解。 3. 微分模型 微分模型是连续的数学模型,适用于描述实际问题中的连续变化和关系。微分模型通常用微分方程进行表示,可以通过求解微分方程获得结果。 4. 最优化模型 最优化模型是在一定约束条件下,寻找最优解或最优策略的数学模型。最优化模型可以是线性规划、非线性规划、整数规划等形式。 三、模型的求解与分析 建立数学模型后,需要对模型进行求解和分析。求解模型的方法有很多,包括解析解法、数值解法和优化算法等。 1. 解析解法 对于简单的数学模型,可以通过代数方法得到解析解。解析解法基于数学公式和运算,可以直接得到精确的解。 2. 数值解法 对于复杂的数学模型,常常需要借助计算机通过数值计算来求解。数值解法基于数值逼近和迭代算法,可以得到模型的近似解。 3. 优化算法

数学建模案例分析-- 图与网络方法建模3设备更新与中心选址

§3 设备更新与中心选址 一、指定顶点对之间的最短路径算法 对图G 每一条边i e 都规定一个正实数)(i e a 与之对应,所得到的图称为赋权图,称)(i e a 为边i e 的权。边),(j i v v 上的权记成),(j i v v a 。 对赋权图G ,s ?,V t ∈,G 中的),(t s 一路称为最短路,如果它的各边的权和是G 中任一条),(t s 一路中各边权和最小的。 找寻),(t s 最短路最有效的算法是Dijkstra 算法:其主要思路是假定我们已经知道了在图中与起点s 有最短路径的m 个顶点以及从s 到这些顶点间的最短路径,然后求出第1+m 个顶点使之与前m 个顶点有相同的属性。其实现方法是比较法。对于每一个未着色的顶点y ,考虑所有已着色的顶点x ,从1s 通过已着色的顶点到y 的不同路径中选出它们中的最短路径,从而也就确定了新染色的点和相应的最短路径,不断重复上述过程直至求得从s 到t 的最短路径为止。 算法步骤如下: 1、最初,所有的边和顶点均未着色,对每一顶点x 指定一个数)(x d ,表示从s 到x 且仅使用已着色顶点作为中间顶点的最短路径长度。 2、令0)(=s d ,并对所有s x ≠,有∞=)(x d ,对顶点s 着色并令s y =。 3、对于每一个未着色顶点x ,重新定义)(x d 如下: {}),()(),(min )(x y a y d x d x d += 如果对于所有未着色的顶点x ,∞=)(x d ,则算法停止,因为此时从s 到任一未着色的顶点都没有路,也就不存在从s 到t 的路径。否则找出一个具有最小的)(x d 值的顶点,对其着色并令 x y =。 4、重复步骤3直到顶点t 已经着色时为止,算法终止。从s 到t 的最短路径已求出。 例:用Dijkdtra 算法求下图中从顶点s 到t 的最短路径。 a 3 4 b 2 7 s 8 2 3 t 3 c 3 d 2

数学建模图与网络模型及方法

数学建模图与网络模型 及方法 Document serial number【KKGB-LBS98YT-BS8CB-BSUT-BST108】

第五章 图与网络模型及方法 §1 概论 图论起源于18世纪。第一篇图论论文是瑞士数学家欧拉于1736 年发表的“哥尼斯堡的七座桥”。1847年,克希霍夫为了给出电网络方程而引进了“树”的概念。1857年,凯莱在计数烷22 n n H C 的同分异构物时,也发现了“树”。哈密尔顿于1859年提出“周游世界”游戏,用图论的术语,就是如何找出一个连通图中的生成圈,近几十年来,由于计算机技术和科学的飞速发展,大大地促进了图论研究和应用,图论的理论和方法已经渗透到物理、化学、通讯科学、建筑学、生物遗传学、心理学、经济学、社会学等学科中。 图论中所谓的“图”是指某类具体事物和这些事物之间的联系。如果我们用点表示这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问题就是一个典型的例子。在哥尼斯堡有七座桥将普莱格尔河中的两个岛及岛与河岸联结起来问题是要从这四块陆地中的任何一块开始通过每一座桥正好一次,再回到起点。当 然可以通过试验去尝试解决这个问题,但该城居民的任何尝试均未成功。欧拉为了解决这个问题,采用了建立数学模型的方法。他将每一块陆地用一个点来代替,将每一座桥用连接相应两点的一条线来代替,从而得到一个有四个“点”,七条“线”的“图”。问题成为从任一点出发一笔画出七条线再回到起点。欧拉考察了一般一笔画的结构特点,给出了一笔画的一个判定法则:这个图是连通的,且每个点都与偶数线相关联,将这个判定法则应用于七桥问题,得到了“不可能走通”的结果,不但彻底解决了这个问题,而且开创了图论研究的先河。 图与网络是运筹学(Operations Research )中的一个经典和重要的分支,所研究的问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域。下面将要讨论的最短路问题、最大流问题、最小费用流问题和匹配问题等都是图与网络的基本问题。 我们首先通过一些例子来了解网络优化问题。 例1 最短路问题(SPP -shortest path problem ) 一名货柜车司机奉命在最短的时间内将一车货物从甲地运往乙地。从甲地到乙地的公路网纵横交错,因此有多种行车路线,这名司机应选择哪条线路呢假设货柜车的运行速度是恒定的,那么这一问题相当于需要找到一条从甲地到乙地的最短路。 例2 公路连接问题 某一地区有若干个主要城市,现准备修建高速公路把这些城市连接起来,使得从其中任何一个城市都可以经高速公路直接或间接到达另一个城市。假定已经知道了任

数学建模的基本方法和应用

数学建模的基本方法和应用 数学建模是将实际问题转化为数学模型,并通过数学方法进行分析、求解的过程。它在现代科学和工程领域中发挥着重要的作用。本文将 介绍数学建模的一些基本方法和应用。 一、问题的数学建模 数学建模过程通常包括问题描述、建立数学模型、求解和验证模型 等步骤。首先,对于给定的实际问题,我们需要准确地描述问题的背 景和要解决的核心问题。然后,根据问题的特点和要求,选择合适的 数学模型来描述问题。数学模型可以是方程、函数、图形或者统计模 型等。接下来,我们使用数学方法对模型进行求解,并在解的基础上 得出对问题的回答。最后,我们需要验证我们的模型和解是否符合实 际情况,通过与实际数据进行比较和分析来验证模型的有效性。 二、常用的数学建模方法 1. 数理统计法 数理统计是利用数学统计方法对实际数据进行分析和推断的过程。 在建模过程中,我们可以使用数理统计方法对数据进行收集、整理和 清洗,然后通过统计分析来描述数据的分布规律,从而得到对问题的 解答。 2. 最优化方法

最优化方法是寻找最优解的数学方法。在建模过程中,我们常常需 要优化某个目标函数,例如最大化利润、最小化成本等。通过建立数 学模型和应用最优化方法,我们可以求解出最优解,并得到对问题的 最佳回答。 3. 微分方程模型 微分方程是描述变量之间变化关系的数学模型。在建模过程中,我 们经常遇到一些动态变化的问题,例如人口增长、化学反应等。通过 建立微分方程模型,我们可以研究变量之间的关系,预测未来的发展 趋势,并得出对问题的解答。 4. 离散数学模型 离散数学模型是以离散对象和离散关系为基础的数学模型。在建模 过程中,我们常常需要处理离散的数据和变量,例如图论、排队论等。通过建立离散数学模型,我们可以对离散问题进行分析和求解,得出 对问题的解答。 三、数学建模的应用领域 数学建模在各个领域都有广泛的应用,例如: 1. 自然科学领域:物理学、化学、生物学等领域都需要通过数学建 模来研究和解决实际问题,例如天体力学、药物代谢等。 2. 工程技术领域:工程和技术领域都需要通过数学建模来进行设计 和优化,例如交通规划、电力系统调度等。

大学生数学建模--常用模型与算法

数学建模常用模型与算法 一、常用模型 ?(一)、评价模型: ?AHP(层次分析法)(确定权重)、模糊评价、聚类分析、因子分析、主成份分析、回归分析、神经网络、多指标综合评价、熵值法(确定权重)等 ?(二)、预测模型: ?指数平滑法、灰色预测法、回归模型、神经网络预测、时间序列模型、马尔科夫预测、差分微分方程 ?(三)、统计模型: ?方差分析、均值比较的假设检验 ?(四)、方程模型: ?常微分方程、差分方程、偏微分方程、以及各种方程的求解(数值解和解析解) ?(五)运筹优化类: ?线性规划、非线性规划、目标规划、整数规划、图论模型(最短路、最大流、遍历问题等)、排队论、对策论、以及各种模型的算法 ?(六)其他模型: ?随机模拟模型、等 二、十大算法 1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法) 2、数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具) 3、线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现) 4、图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备) 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用) 7、网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用, 当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8、一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的) 9、数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用) 10、图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab进行处理)

数学建模常用算法模型

数学模型的分类 按模型的数学方法分: 几何模型、图论模型、微分方程模型、概率模型、最优控制模型、规划论模型、马氏链模型等 按模型的特征分: 静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型等 按模型的应用领域分: 人口模型、交通模型、经济模型、生态模型、资源模型、环境模型等. 按建模的目的分: 预测模型、优化模型、决策模型、控制模型等 一般研究数学建模论文的时候,是按照建模的目的去分类的,并且是算法往往也和建模的目的对应 按对模型结构的了解程度分: 有白箱模型、灰箱模型、黑箱模型等 比赛尽量避免使用,黑箱模型、灰箱模型,以及一些主观性模型. 按比赛命题方向分: 国赛一般是离散模型和连续模型各一个,2016美赛六个题目离散、连续、运筹学/复杂网络、大数据、环境科学、政策 数学建模十大算法 1、蒙特卡罗算法 该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以

来检验自己模型的正确性,比较好用的算法 2、数据拟合、参数估计、插值等数据处理算法 比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具 3、线性规划、整数规划、多元规划、二次规划等规划类问题 建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现 4、图论算法 这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法 这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法 这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用 7、网格算法和穷举法 当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具 8、一些连续离散化方法 很多问题都是从实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的 9、数值分析算法 如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用

数学建模的方法和步骤

数学建模的方法和步骤 数学建模是将实际问题抽象为数学模型,并通过数学方法进行分析和求解的过程。数学建模方法和步骤如下: 一、问题理解与分析: 1.了解问题的背景和目标,明确问题的具体需求; 2.收集相关的数据和信息,理解问题的约束条件; 3.划定问题的范围和假设,确定问题的数学建模方向。 二、问题描述与假设: 1.定义问题的数学符号和变量,描述问题的数学模型; 2.提出问题的假设,假定问题中的未知参数或条件。 三、建立数学模型: 1.根据问题的特点选择合适的数学方法,包括代数、几何、概率统计等; 2.基于问题的约束条件和假设,通过推理和分析建立数学方程组或函数模型; 3.利用数学工具求解数学模型。 四、模型验证与分析: 1.对建立的数学模型进行验证,检验解的合理性和有效性; 2.分析模型的稳定性、灵敏度和可行性。

五、模型求解与结果解读: 1.利用数学软件、计算机程序或手工计算的方法求解数学模型; 2.对模型的解进行解释、分析和解读,给出问题的答案和解决方案。 六、模型评价与优化: 1.对建立的数学模型和求解结果进行评价,判断模型的优劣; 2.如果模型存在不足,可以进行优化和改进,重新调整模型的参数和假设。 七、实施方案和应用: 1.根据模型的求解结果,制定实施方案和行动计划; 2.将模型的解决方案应用到实际问题中,监测实施效果并进行调整。 八、报告撰写与展示: 1.将建立的数学模型、求解方法和结果进行报告撰写; 2.使用图表、表格等方式进行结果展示,并进行清晰的解释和讲解。 九、模型迭代和改进: 1.随着问题的发展和实际情况的变化,及时调整和改进建立的数学模型; 2.针对模型的不足,进行迭代和改进,提高模型的准确性和实用性。总结: 数学建模方法和步骤的关键是理解问题、建立数学模型、求解和分析结果。在建模的过程中,需要根据实际问题进行合理的假设,并灵活运用

数学建模常用模型及算法

数学建模常用模型及算法 数学建模主要是通过现实世界的数据,利用一定的数学方法和算法, 借助计算机,使用一定的软件工具,结合相应的算法去建立一定的数 学模型,从而对实际问题进行研究和解决,称之为数学建模。常用的 数学建模模型有基于概率的模型、基于最优性的模型、非线性规划模型、组合优化模型、灰色系统模型、网络流模型、层次分析模型、模 糊系统模型等等,而常用的数学建模算法可以分为局部搜索算法、精 确算法、启发式算法等三大类。 一、基于概率的模型 1. 最大熵模型:是一种最大化熵的统计学方法,应用熵来描述不确定度,并在要求最大熵原则的条件下确定参数,从而最大程度的推广模 型中的统计分布,从而达到优化的目的。 2. 贝叶斯模型:贝叶斯模型是基于概率的统计模型,用于描述各种随 机现象,主要是通过贝叶斯公式结合先验概率以及似然度来推测结果,求出客观事件发生的概率。 二、基于最优性的模型 1. 模糊优化方法:模糊优化方法是以模糊集,而不是确定性集,对优 化问题加以解决,是一种基于最优性的模型。它将目标函数和约束条 件分解成模糊函数,然后形成模糊优化模型,用模糊图的方法求得最 优解,使问题的解决变得更加容易和有效率。

2. 模拟退火算法:模拟退火算法通过数值模拟来求解最优性模型,是一种模拟对象的能量计算的算法,其本质为元胞自动机和目标函数的计算,基于物理反应速率理论实现,利用“热量”的概念,从而模拟从温度较高到低温过程,求解最终最优解。 三、非线性规划模型 1. 单约束模型:单约束模型旨在求解目标函数,给定一个约束条件,求解一个最优解。 2. 线性规划模型:线性规划模型利用线性函数来描述算法模型,尝试求得最大或最小的解。 四、组合优化模型 1. 模拟退火算法:模拟退火算法是一种组合优化模型,它能够模拟热力学反应,并利用物理反应速率理论来求解组合优化问题,从而使问题更加容易解决。 2. 遗传算法:遗传算法是一种基于自然进化规律的算法,通过模拟种群的变异和进化过程,来搜索出最优的解。 五、网络流模型 1. 最大流最小割:最大流最小割是网络流模型的经典算法,利用最大流最小割定理求解网络的最大流量。它的核心思想是在给定的流网络中,从源点到汇点

数学建模的主要建模方法

数学建模的主要建模方法 数学建模是指运用数学方法和技巧对复杂的实际问题进行抽象、建模、分析和求解的过程。它是解决实际问题的一个重要工具,在科学研究、工 程技术和决策管理等领域都有广泛的应用。数学建模的主要建模方法包括 数理统计法、最优化方法、方程模型法、概率论方法、图论方法等。下面 将分别介绍这些主要建模方法。 1.数理统计法: 数理统计法是基于现有的数据进行概率分布的估计和参数的推断,以 及对未知数据的预测。它适用于对大量数据进行分析和归纳,提取有用的 信息。数理统计法可以通过描述统计和推断统计两种方式实现。描述统计 主要是对数据进行可视化和总结,如通过绘制直方图、散点图等图形来展 示数据的分布特征;推断统计则采用统计模型对数据进行拟合,进行参数 估计和假设检验等。 2.最优化方法: 最优化方法是研究如何在给定的约束条件下找到一个最优解或近似最 优解的方法。它可以用来寻找最大值、最小值、使一些目标函数最优等问题。最优化方法包括线性规划、非线性规划、整数规划、动态规划等方法。这些方法可以通过建立数学模型来描述问题,并通过优化算法进行求解。3.方程模型法: 方程模型法是通过建立数学方程或函数来描述问题,并利用方程求解 的方法进行求解。这种方法适用于可以用一些基本的方程来描述的问题。 方程模型法可以采用微分方程、代数方程、差分方程等不同类型的方程进 行建模。通过求解这些方程,可以得到问题的解析解或数值解。

4.概率论方法: 概率论方法是通过概率模型来描述和分析不确定性问题。它可以用来 处理随机变量、随机过程和随机事件等问题。概率论方法主要包括概率分布、随机变量、概率计算、条件概率和贝叶斯推理等内容。利用概率论的 方法,可以对问题进行建模和分析,从而得到相应的结论和决策。 5.图论方法: 图论方法是研究图结构的数学理论和应用方法。它通过把问题抽象成图,利用图的性质和算法来分析和求解问题。图论方法主要包括图的遍历、最短路径、最小生成树、网络流等内容。图论方法适用于描述和求解一些 网络、路径和连接问题,如交通规划、电力网络等。 除了以上主要的建模方法,数学建模还涉及到很多其他的方法和技巧,如回归分析、时间序列分析、混沌理论、神经网络、遗传算法等。不同的 问题需要选择不同的方法进行建模和求解,需要结合具体问题的特点和要 求来确定合适的建模方法。数学建模是一个综合性较强的学科,需要运用 多种数学方法和技巧进行综合分析和求解。

数学建模方法和应用

数学建模方法和应用 数学作为一门学科和一种工具,一直在各个领域中发挥着重要 的作用。数学建模是一种解决实际问题的方式,不仅可以帮助人 们理清复杂的问题脉络,还能够精确地描述问题的本质和规律。 本文将介绍数学建模的概念、方法和应用领域。 一、数学建模的概念 数学建模是指利用数学语言和方法来解决实际问题的过程。其 具体步骤一般包括问题的分析、模型的建立、模型的求解及模型 的验证等。数学建模主要涉及数学分析、统计学、概率论、图论、运筹学、优化理论等多个学科。 数学建模的核心在于建立一个恰当的模型,即根据问题的特征 和需求,选择合适的数学工具和方法,将问题抽象成一个可以用 数学语言和符号表示的模型。这个模型不仅要简单明了,而且还 要尽量贴近实际情况,并且具有可解性和可行性。只有建立了一 个好的模型,才能够得到一个有效的解决方案。 二、数学建模的方法

数学建模的方法根据问题的类型和需求而不同。一般来说数学建模可以分为以下几个步骤: 1. 问题分析:明确问题背景、目标和限制条件等,确定问题的类型和性质。 2. 建立模型:将问题抽象成一个可以用数学方法求解的模型,选择合适的数学工具和方法。 3. 模型求解:利用数学工具和方法求解模型,得到问题的最优解或近似解。 4. 模型验证:将模型的结果与实际情况进行比较,评估模型的可靠性和适用性。 数学建模的方法需要结合具体的问题和数据来分析和处理。在建模过程中需要注意对数据的处理,同时也要注意不要过度追求数学细节而将问题复杂化。

三、数学建模的应用 数学建模可以应用于众多领域,如经济、物理、化学、医学、生物学、环境科学等。下面介绍其中的几个应用领域: 1. 生态学 生态学是一门综合性学科,用数学工具和方法解决复杂的生态系统问题已成为一个重要的趋势。生态建模可以对生态系统的结构和功能进行定量描述,从而预测生态系统的演化和变化趋势。 2. 金融 数学建模在金融领域中应用广泛,主要涉及到风险管理、资产定价、投资策略、股票波动率预测等问题。数学建模可以帮助人们制定合理的投资策略和风险管理方案。 3. 物理学

数学建模的常用模型与求解方法知识点总结

数学建模的常用模型与求解方法知识点总结数学建模是运用数学方法和技巧来研究和解决现实问题的一门学科。它将实际问题抽象化,建立数学模型,并通过数学推理和计算求解模型,从而得出对实际问题的理解和解决方案。本文将总结数学建模中 常用的模型类型和求解方法,并介绍每种方法的应用场景。 一、线性规划模型与求解方法 线性规划是数学建模中最常用的模型之一,其基本形式为: $$ \begin{align*} \max \quad & c^Tx \\ s.t. \quad & Ax \leq b \\ & x \geq 0 \end{align*} $$ 其中,$x$为决策变量向量,$c$为目标函数系数向量,$A$为约束 系数矩阵,$b$为约束条件向量。常用的求解方法有单纯形法、对偶单 纯形法和内点法等。 二、非线性规划模型与求解方法

非线性规划是一类约束条件下的非线性优化问题,其目标函数或约 束条件存在非线性函数。常见的非线性规划模型包括凸规划、二次规 划和整数规划等。求解方法有梯度法、拟牛顿法和遗传算法等。 三、动态规划模型与求解方法 动态规划是一种用于解决多阶段决策问题的数学方法。它通过将问 题分解为一系列子问题,并利用子问题的最优解构造原问题的最优解。常见的动态规划模型包括最短路径问题、背包问题和任务分配等。求 解方法有递推法、记忆化搜索和剪枝算法等。 四、图论模型与求解方法 图论是研究图及其应用的一门学科,广泛应用于网络优化、城市规 划和交通调度等领域。常见的图论模型包括最小生成树、最短路径和 最大流等。求解方法有贪心算法、深度优先搜索和广度优先搜索等。 五、随机模型与概率统计方法 随机模型是描述不确定性问题的数学模型,常用于风险评估和决策 分析。概率统计方法用于根据样本数据对随机模型进行参数估计和假 设检验。常见的随机模型包括马尔可夫链、蒙特卡洛模拟和马尔科夫 决策过程等。求解方法有蒙特卡洛法、马尔科夫链蒙特卡洛法和最大 似然估计等。 六、模拟模型与求解方法

复杂网络中的数学建模与分析

复杂网络中的数学建模与分析 随着互联网的迅速发展和普及,我们的生活变得越来越依赖于网络。而这个网 络世界是一个庞大而复杂的系统,包含了无数个节点和连接。为了更好地理解和分析这个复杂网络,数学建模成为了一种重要的工具和方法。 数学建模是将实际问题转化为数学模型的过程。在复杂网络中,我们可以将节 点看作是网络的基本单位,连接则代表节点之间的关系。通过对节点和连接的建模,我们可以揭示网络中的规律和特性。 首先,我们可以通过图论来建模复杂网络。图论是数学中研究图的一门学科, 而图则是由节点和连接组成的一种数据结构。通过图论,我们可以分析网络中的节点度、节点之间的距离、连通性等特性。例如,我们可以通过计算节点的度分布来研究网络的结构特征,进而了解网络中的节点重要性和影响力。 其次,复杂网络中的节点之间的关系往往是动态变化的。为了建模这种动态变化,我们可以使用动力学系统理论。动力学系统理论是一种研究系统随时间演化的数学工具。通过建立节点之间的演化规则,我们可以模拟网络中节点的行为和变化。例如,我们可以利用微分方程来描述节点之间的相互作用,进而预测网络中节点的演化轨迹。 此外,复杂网络中的节点往往不是孤立存在的,它们之间存在着复杂的关联。 为了研究这种关联,我们可以运用复杂网络理论。复杂网络理论是一种研究网络中非线性和非均匀特性的数学工具。通过复杂网络理论,我们可以揭示网络中的小世界效应、无标度特性等。例如,我们可以利用复杂网络理论来分析社交网络中的信息传播过程,进而预测病毒传播的速度和范围。 此外,复杂网络中的节点和连接往往存在着不确定性和随机性。为了研究这种 不确定性,我们可以使用随机图模型。随机图模型是一种用概率论和统计学方法描述网络结构和性质的数学模型。通过随机图模型,我们可以模拟网络中节点和连接

数学建模中的时空网络模型研究

数学建模中的时空网络模型研究时空网络模型是数学建模领域中的一种重要工具,用于描述和分析 时空中的各种事件、过程和相互关系。它在交通、通信、城市规划等 领域具有广泛的应用。本文将介绍数学建模中时空网络模型的研究内容、方法和应用。 1. 引言 时空网络模型是对时空信息进行表达和处理的数学模型,它通过图论、统计学和最优化等方法来描述和分析时空中的事件和过程。时空 网络模型可以用于交通流量预测、城市规划、通信网络设计等问题。 2. 时空网络图 时空网络图是时空网络模型的基础表示形式,它由节点和边组成。 节点表示空间位置或事件,边表示空间和时间上的关系。时空网络图 可以是有向图或无向图,其中边上带有权重表示不同事件或过程之间 的关联强度。 3. 时空网络模型的构建 构建时空网络模型通常包括数据采集、图像处理和拓扑提取等步骤。数据采集可以通过传感器、卫星图像等手段获取时空信息,图像处理 用于处理原始数据,提取有用的时空特征,拓扑提取则是将图像信息 转化为网络结构。 4. 时空网络模型的分析方法

时空网络模型的分析方法包括网络中心性度量、路径分析、模拟仿 真和优化算法等。网络中心性度量用于评估节点或边在网络中的重要性,路径分析则用于研究节点之间的关系。模拟仿真可以用来模拟时 空过程的演化,优化算法则用于确定最佳的时空网络配置。 5. 时空网络模型的应用 时空网络模型在交通流量预测、城市规划和通信网络设计等领域具 有广泛的应用。在交通领域,时空网络模型可以用于预测交通拥堵状 况和优化交通路线。在城市规划方面,时空网络模型可以帮助规划师 分析城市发展趋势和评估不同规划方案的影响。在通信网络设计方面,时空网络模型可以优化网络拓扑结构和传输路由,提高数据传输效率。 6. 时空网络模型的挑战和展望 虽然时空网络模型在各个领域有广泛的应用,但仍然存在一些挑战。例如,数据采集和处理的准确性对模型的构建和分析有重要影响;模 型的求解过程需要高效的算法支持。未来,随着技术的发展,时空网 络模型将更加精确和高效,应用范围也会进一步扩大。 7. 结论 时空网络模型是数学建模中重要的工具,能够帮助我们理解和分析 时空中的事件和过程。通过构建和分析时空网络模型,可以为交通、 城市规划和通信网络等领域提供有效的解决方案。尽管面临一些挑战,但时空网络模型的研究在不断取得进展,展望未来,它将发挥更大的 作用。

复杂网络的数学建模

复杂网络的数学建模 复杂网络是指由大量节点以及它们之间的连接所构成的网络结构,常见的例子包括社交网络、互联网、生物网络等。对于这些网络,我们希望能够进行数学建模以深入了解其内部特性、预测其发展趋势以及设计相应的控制策略。本文将介绍复杂网络的数学建模方法,并探讨其应用前景。 一、复杂网络的基本模型 复杂网络的数学建模从最简单的模型开始逐渐复杂化。其中最经典的模型之一是随机图模型,即随机地连接节点构成网络。在随机图模型中,每个节点都有相同的连接概率,这种模型可以很好地描述一些无规律的网络。另一个常用的模型是小世界网络模型,该模型通过引入一定的随机性和局部性连接规则,更好地刻画了现实中的社交网络以及人类关系网络。此外,还有无标度网络模型,该模型根据“富者愈富”原则,描述了一些节点度分布呈幂律分布的网络,如互联网等。 二、复杂网络的数学描述 对于复杂网络的数学描述通常使用图论来实现。图是由节点和边组成的数学结构,可以直观地表示网络的拓扑结构。节点表示网络中的个体,边表示个体之间的连接关系。通过定义适当的度量指标,如节点的度和聚类系数等,可以量化地描述网络的特性。此外,还可以使用邻接矩阵、关联矩阵等高维数据结构来表示网络,进一步进行数学计算和分析。

三、复杂网络的动力学过程 为了更好地理解和预测复杂网络的演化过程,需要将网络建模与动力学过程结合起来。常用的动力学模型包括传播模型、同步模型等。在传播模型中,研究信息、疾病等在网络中的传播规律,可以通过病毒传播模型、信息传播模型等来描述。同步模型则关注网络中节点之间的同步现象,如耦合振荡器网络等。这些模型可以帮助我们揭示网络中的交互行为和相互影响,为网络控制和管理提供理论基础。 四、复杂网络的应用前景 复杂网络的数学建模在许多领域具有广泛的应用前景。在社交网络中,可以利用数学模型揭示信息传播、影响力传播等现象,为推荐算法、社交媒体营销等提供支持。在交通网络中,可以通过建立交通流模型预测交通拥堵情况,优化交通规划。在生物网络中,可以通过仿真模拟等方法研究神经网络的功能和动力学机制。此外,复杂网络的数学建模还被广泛应用于供电网络、金融网络、物流网络等领域。 总结: 复杂网络的数学建模是研究复杂系统的重要手段之一,它可以帮助我们深入理解网络结构、预测网络动态以及设计网络控制策略。随着信息时代的到来,对于复杂网络的研究越来越受到重视。我们相信,在数学建模的不断发展和完善下,复杂网络将为我们提供更多的机遇和挑战。

数学建模常用模型方法总结

数学建模常用模型方法总 结 Revised by Jack on December 14,2020

数学建模常用模型方法总结 无约束优化 线性规划连续优化 非线性规划 整数规划离散优化 组合优化 数学规划模型多目标规划 目标规划 动态规划从其他角度分类 网络规划 多层规划等… 运筹学模型 (优化模型) 图论模型存 储论模型排 队论模型博 弈论模型 可靠性理论模型等… 运筹学应用重点:①市场销售②生产计划③库存管理④运输问题⑤财政和会计⑥人事管理⑦设备维修、更新和可靠度、项目选择和评价⑧工程的最佳化设计⑨计算器和讯息系统⑩城市管理 优化模型四要素:①目标函数②决策变量③约束条件 ④求解方法(MATLAB--通用软件LINGO--专业软件) 聚类分析、 主成分分析 因子分析 多元分析模型判别分析 典型相关性分析 对应分析 多维标度法 概率论与数理统计模型 假设检验模型 相关分析 回归分析 方差分析 贝叶斯统计模型 时间序列分析模型 决策树 逻辑回归

传染病模型马尔萨斯人口预测模型微分方程模型人口预 测控制模型 经济增长模型Logistic 人口预测模型 战争模型等等。。 灰色预测模型 回归分析预测模型 预测分析模型差分方程模型 马尔可夫预测模 型 时间序列模型 插值拟合模型 神经网络模型 系统动力学模型(SD) 模糊综合评判法模型 数据包络分析 综合评价与决策方法灰色关联度 主成分分析 秩和比综合评价法 理想解读法等 旅行商(TSP)问题模型 背包问题模型车辆路 径问题模型 物流中心选址问题模型 经典NP问题模型路径规划问题模型 着色图问题模型多目 标优化问题模型 车间生产调度问题模型 最优树问题模型二次分 配问题模型 模拟退火算法(SA) 遗传算法(GA) 智能算法 蚁群算法(ACA) (启发式) 常用算法模型神经网络算法 蒙特卡罗算法元 胞自动机算法穷 举搜索算法小波 分析算法 确定性数学模型 三类数学模型随机性数学模型

基于图论的数学建模

基于图论的数学建模 图论,作为数学的一个重要分支,研究的是由节点(顶点)和边(弧)组成的图形或网络。这些图形可以用来表示各种实际系统的结构和行为,因此,图论在物理、化学、生物、社会科学、社会科学等许多领域都有广泛的应用。基于图论的数学建模是一种强大的工具,可以用来描述和分析这些复杂系统的行为。 图论中的基本概念包括:节点、边、子图、路径、环、连通性、二部图、树等。这些基本概念构成了图论的基础,也是我们进行数学建模的关键工具。 在构建基于图论的数学模型时,我们通常需要遵循以下步骤: 1、确定研究目标:我们需要明确我们想要研究的问题是什么,以及我们希望通过图论来揭示什么样的关系或模式。 2、数据收集:根据我们的研究目标,收集相关的数据。这些数据可以是真实的,也可以是模拟的。数据的形式可以是多样的,如表格、图像或文本等。 3、数据预处理:对收集到的数据进行清洗、整理和标准化,以便于我们将其转化为图论中的节点和边。

4、构建模型:使用图论的概念和工具,根据处理后的数据,构建一 个能够描述我们所研究系统的模型。 5、模型分析:通过分析模型,我们可以发现隐藏在数据中的模式和 关系。我们还可以使用图论中的算法来找出重要的节点、边或者子图。 6、模型验证:我们需要验证模型的准确性,以确保其能够真实地反 映我们所研究的问题。如果模型不能准确地描述问题,那么我们就需要回到模型构建的步骤,对模型进行修正。 7、模型应用:一旦模型被验证为准确,我们就可以使用它来解决实 际问题,或者预测未来的行为。 基于图论的数学建模是一种强大的工具,可以用来理解和解决复杂的问题。然而,它并不是万能的。我们需要根据具体的问题和数据来选择最合适的建模方法。我们也需要不断地学习和探索新的方法和技术,以应对日益复杂的现实世界问题。 图论在数学建模中的应用 随着科学技术日新月异的发展,图论这一古老的数学分支再次焕发出强大的生命力。图论以其独特的模型化和网络化视角,广泛应用于各个领域,尤其是数学建模中。本文将探讨图论在数学建模中的应用。

相关主题
文本预览
相关文档 最新文档