数学建模之图论

概览

  1. 问题引入与分析
  2. 图论的基本概念
  3. 最短路问题及算法
  4. 最小生成树及算法
  5. 旅行售货员问题
  6. 模型建立与求解

1. 问题引入与分析

1) 98年全国大学生数学建模竞赛B题“最佳灾情巡视路线”中的前两个问题是这样的:

今年(1998年)夏天某县遭受水灾. 为考察灾情、组织自救,县领导决定,带领有关部门负责人到全县各乡(镇)、村巡视. 巡视路线指从县政府所在地出发,走遍各乡(镇)、村,又回到县政府所在地的路线.
a. 若分三组(路)巡视,试设计总路程最短且各组尽可能均衡的巡视路线。
b. 假定巡视人员在各乡(镇)停留时间T=2小时,在各村停留时间t=1小时,汽车行驶速度V =35公里/小时. 要在24小时内完成巡视,至少应分几组;给出这种分组下最佳的巡视路线.

在这里插入图片描述
公路边的数字为该路段的公里。

2) 问题分析:

本题给出了某县的公路网络图,要求的是在不同的条件下,灾情巡视的最佳分组方案和路线.
将每个乡(镇)或村看作一个图的顶点,各乡镇、村之间的公路看作此图对应顶点间的边,各条公路的长度(或行驶时间)看作对应边上的权,所给公路网就转化为加权网络图,问题就转化图论中一类称之为旅行售货员问题,即在给定的加权网络图中寻找从给定点O出发,行遍所有顶点至少一次
再回到点O,使得总权(路程或时间)最小.

本题是旅行售货员问题的延伸-多旅行售货员问题.
本题所求的分组巡视的最佳路线,也就是m条经过同一点并覆盖所有其他顶点又使边权之和达到最小的闭链(闭迹).
如第一问是三个旅行售货员问题,第二问是四个旅行售货员问题.
众所周知,旅行售货员问题属于NP完全问题,即求解没有多项式时间算法.
显然本问题更应属于NP完全问题. 有鉴于此,一定要针对问题的实际特点寻找简便方法,想找到解决此类问题的一般方法是不现实的,对于规模较大的问题可使用近似算法来求得近似最优解.

2. 图论的基本概念

  1. 图的概念
  2. 赋权图与子图
  3. 图的矩阵表示
  4. 图的顶点度
  5. 路和连通
1) 图的概念

定义 一个图G是指一个二元组(V(G),E(G)),其中:

  1. V ( G ) = { v 1 , v 2 , . . . , v ν } V (G) = \{ v_1,v_2,...,v_ν \} V(G)={v1,v2,...,vν}是非空有限集,称为顶点集,其中元素称为图G的顶点.
  2. E ( G ) E(G) E(G)是顶点集 V ( G ) V(G) V(G)中的无序或有序的元素偶对 ( v i , v j ) (v_i ,v_j ) (vi,vj) 组成的集合,即称为边集,其中元素称为边.

定义 图G的是指图的顶点数|V(G)|, 用 v来表示;图的边的数目|E(G)|用ε 来表示.
G = ( V ( G ) , E ( G ) ) G = (V (G),E(G)) G=(V(G),E(G)) 表示图,简记 G = ( V , E ) G = (V , E) G=(V,E).也用 v i v j v_iv_j vivj 来表示边 ( v i , v j ) (v_i ,v_j ) (vi,vj).

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 最短路

Dijkstra算法

Floyd算法
算法的基本思想

直接在图的带权邻接矩阵中用插入顶点的方法依次构造出ν 个矩阵 D ( 1 ) 、 D ( 2 ) 、 … 、 D ( ν ) D(1)、 D(2)、 … 、D(ν) D(1)D(2)D(ν),使最后得到的矩阵 D ( ν ) D(ν ) D(ν)成为图的距离矩阵,同时也求出插入点矩阵以便得到两点间的最短路径。
(I)求距离矩阵的方法.
(II)求路径矩阵的方法.
(III)查找最短路路径的方法.

Floyd有两个矩阵,一个是D矩阵(代表距离),一个是R矩阵(代表中介点)
在这里插入图片描述
在这里插入图片描述

  • 在这里相当于 v 1 v_1 v1被打通了,此时 v 1 v_1 v1就可以作为中介点连接。
  • 于是遍历和 v 1 v_1 v1连接的点,例如此时遍历到 v 2 v_2 v2
  • 然后再以 v 2 v_2 v2为基准,遍历和 v 1 v_1 v1连接的点。
  • 所有遍历到的点都尝试一下是否可以变化距离矩阵,如果可以变化,那么再他们的中介点矩阵上打入"1"的标记。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这里的逻辑是这样的:
  • R 52 = 6 R_{52} = 6 R52=6,说明从5到2的下一个点为6
  • R 62 = 1 R_{62} = 1 R62=1,说明6到2的下一个点为1
  • R 12 = 2 R_{12} = 2 R12=2,说明1到2的下一个点为2
  • 所以路径为 v 5 → v 6 → v 1 → v 2 v_5\rightarrow v_6\rightarrow v_1\rightarrow v_2 v5v6v1v2

最小生成树

(略)

  • 12
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数学建模图论是指使用数学模型和图论的方法来解决实际问。在这个方法中,我们使用图的概念来表示问中的元素和它们之间的关系,并使用数学模型来描述这些关系。而Matlab是一个用于数值计算和科学工程应用的高级编程语言和环境。在Matlab中,我们可以使用图论算法来解决数学建模中的图论,如最短路径问。通过使用Matlab中的函数和编程技巧,我们可以实现Dijkstra算法来计算最短路径和最短距离。下面是一个使用Matlab编写的Dijkstra算法的示例代码: ```matlab function [min,path]=dijkstra(w,start,terminal) n=size(w,1); label(start)=0; f(start)=start; for i=1:n if i~=start label(i)=inf; end end s(1)=start; u=start; while length(s)<n for i=1:n ins=0; for j=1:length(s) if i==s(j) ins=1; end end if ins==0 v=i; if label(v)>(label(u)+w(u,v)) label(v)=(label(u)+w(u,v)); f(v)=u; end end end v1=0; k=inf; for i=1:n ins=0; for j=1:length(s) if i==s(j) ins=1; end end if ins==0 v=i; if k>label(v) k=label(v); v1=v; end end end s(length(s)+1)=v1; u=v1; end min=label(terminal); path(1)=terminal; i=1; while path(i)~=start path(i+1)=f(path(i)); i=i+1; end path(i)=start; L=length(path); path=path(L:-1:1); ``` 这个代码使用了Dijkstra算法来计算从起点到终点的最短路径和最短距离。输入参数w是一个带权邻接矩阵,start和terminal分别是起点和终点的索引。函数返回值min是最短距离,path是最短路径。你可以根据自己的具体问,将带权邻接矩阵和起点终点索引替换为实际的数值进行计算。希望这个例子能够帮助你理解数学建模图论和Matlab的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值