欢迎光临散文网 会员登陆 & 注册

数模练习题:关于某市的乡村建设问题

2022-04-07 21:40 作者:数学建模学习交流  | 我要投稿

发现了一道较为入门的练习题,分享给大家:


【腾讯文档】某市乡村数据

https://docs.qq.com/sheet/DWVJqRHZZUmNvSURl

部分数据如下图:


下面是花了不到三个小时编写的代码(运行环境:MATLAB2021b,低版本请自行测试),仅大致做了一遍,解题思路和最终计算出来的答案仅供大家参考,可能有错误之处大家自行甄别:

(1)第一问绘制图形,这里首先需要导入excel的数据,由于数据为表格形式,且数值型和文本型夹杂,因此这里导入为table类型。由于有三类不同的村庄,因此这里分别将这三类村庄的坐标以及名称保存为单独的变量。画图的难点在于如何将相邻的两个村庄进行连线,这里的代码大家可以仔细阅读。


(2)第二问实际上是图论中一个非常经典的问题:最小生成树问题,没学过的同学可以自行百度。这里我们需要先生成MATLAB中的无向图对象,然后直接调用内置的minspantree函数就能得到最小生成树。

下图红色的即为管道的铺设路线

(3)第三问问的有点奇怪:确定医院建设在哪个村庄使得所有居民去医院走的总路程最短。。。不难看出,这是一个规划问题,且可能性是有限的,我们就是把所有的村庄枚举一遍,即让医院分别在每个村庄建设,看哪种情况下是最优解。问题是这里的目标函数,这里给出我对于目标函数的定义:求出各村庄到医院的最短路径乘以这个村子的人数,将这个结果进行求和。

在这种定义下,我给出一种很简单的代码写法,只有四行,这种写法能避免循环加快运行速度,如果你能看懂那说明你的MATLAB基础很扎实:

这里的核心是distances函数:d = distances(G) 返回矩阵 d,其中 d(i,j) 是节点 i 和节点 j 之间的最短路径的长度。

大家可以查看MATLAB官网的帮助文档:https://ww2.mathworks.cn/help/matlab/ref/graph.distances.html


结果表明,当医院设立在V1时,能够使目标函数最小(事实上V1也在图中的中心位置,这也暗示我们的结果应该没太大问题)


数模练习题:关于某市的乡村建设问题的评论 (共 条)

分享到微博请遵守国家法律