当前位置: 首页 > article >正文

数学建模期末速成 最短路径

关键词:Dijkstra算法 Floyd算法

例题

已知有6个村庄,各村的小学生人数如表所列,各村庄间的距离如图所示。现在计划建造一所医院和一所小学,问医院应建在哪个村庄才能使最远村庄的人到医院看病所走的路最短?又问小学建在哪个村庄使得所有学生上学走的总路程最短?

村庄 v 1 v_1 v1 v 2 v_2 v2 v 3 v_3 v3 v 4 v_4 v4 v 5 v_5 v5 v 6 v_6 v6
小学生人数/个504060207090

在这里插入图片描述

一、 问题重述

在6个村庄构成的交通网络中,已知各村小学生人数及村庄间道路距离。现需解决两个优化问题:
​​医院选址​​:确定一个村庄建立医院,使得离医院最远村庄的就医路径最短。
​​小学选址​​:确定一个村庄建立小学,使得全体学生上学总路程最短。

二、 问题分析

​​医院选址问题​​属于​​最小化最大距离​​问题,需计算各候选点到其他所有点的最短距离中的最大值,再选择使该值最小的位置。

​​小学选址问题​​属于​​加权最短路径和​​问题,需计算各候选点到所有生源村的加权距离和(权重为各村学生数),选择总和最小的位置。

三、 符号说明

符号含义单位
V V V村庄集合 { v 1 , . . . , v 6 v_1,...,v_6 v1,...,v6}-
E E E边集合(道路连接关系)-
W W W邻接矩阵(道路距离)-
d ( i , j ) d(i,j) d(i,j)村庄 v i v_i vi v j v_j vj 的最短距离-
s i s_i si村庄 v i v_i vi 的学生人数-

四、 模型假设

  1. 道路网络为无向图,距离对称
  2. 最短路径计算不考虑交通拥堵等动态因素
  3. 学生人数固定且全部就近入学

五、 模型建立与求解

模型建立:

1. 图论建模
构造赋权图 ,邻接矩阵为:
W = [ 0 2 7 ∞ ∞ ∞ 2 0 4 6 8 ∞ 7 4 0 1 3 ∞ ∞ 6 1 0 1 6 ∞ 8 3 1 0 3 ∞ ∞ ∞ 6 3 0 ] W=\begin{bmatrix}0&2&7&\infty&\infty&\infty\\2&0&4&6&8&\infty\\7&4&0&1&3&\infty\\\infty&6&1&0&1&6\\\infty&8&3&1&0&3\\\infty&\infty&\infty&6&3&0\end{bmatrix} W= 02720468740136101683103630

2. 最短路径计算
应用Floyd算法求得全源最短距离矩阵 :
d = [ 0 2 6 7 8 11 2 0 4 5 6 9 6 4 0 1 2 5 7 5 1 0 1 4 8 6 2 1 0 3 11 9 5 4 3 0 ] d=\begin{bmatrix}0&2&6&7&8&11\\2&0&4&5&6&9\\6&4&0&1&2&5\\7&5&1&0&1&4\\8&6&2&1&0&3\\11&9&5&4&3&0\end{bmatrix} d= 02678112045696401257510148621031195430
3. 医院选址分析
计算各列最大值:
最大值向量 = [ 11 , 9 , 6 , 7 , 8 , 11 ] [11,9,6,7,8,11] [11,9,6,7,8,11]
最小值6对应的 ​ v 3 v_3 v3 为最优选址。

4. 小学选址分析
计算加权总路程:
总路程向量 = [ 2130 , 1670 , 1070 , 1040 , 1050 , 1500 ] [2130,1670,1070,1040,1050,1500] [2130,1670,1070,1040,1050,1500]
最小值1040对应的 ​ v 4 v_4 v4 为最优选址。

例题求解代码

import numpy as np
import networkx as nx# 初始化参数
n = 6
node = ['v' + str(i) for i in range(1, n+1)]
students = [50, 40, 60, 20, 70, 90]# 构建邻接矩阵
A = np.zeros((n, n))
A[0, [1, 2]] = [2, 7]        # v1连接v2(2),v3(7)
A[1, [2, 3, 4]] = [4, 6, 8]  # v2连接v3(4),v4(6),v5(8)
A[2, [3, 4]] = [1, 3]        # v3连接v4(1),v5(3)
A[3, [4, 5]] = [1, 6]        # v4连接v5(1),v6(6)
A[4, 5] = 3                  # v5连接v6(3)
A = np.maximum(A, A.T)       # 保证对称性# 计算最短路径
G = nx.from_numpy_array(A)
d = nx.floyd_warshall_numpy(G)# 医院选址分析
max_distances = np.max(d, axis=0)
hospital = node[np.argmin(max_distances)]# 小学选址分析
weighted_dist = np.dot(d.T, students)
school = node[np.argmin(weighted_dist)]print(f"医院最佳选址: {hospital}")
print(f"小学最佳选址: {school}")
http://www.lryc.cn/news/2396627.html

相关文章:

  • 【Netty系列】实现HTTP文件服务器
  • Java开发经验——阿里巴巴编码规范实践解析7
  • 权威认证与质量保障:第三方检测在科技成果鉴定测试中的核心作用
  • 混和效应模型在医学分析中的应用
  • 架构分享|三层存储架构加速云端大模型推理
  • Perforce P4产品简介:无限扩展+全球协作+安全管控+工具集成(附下载)
  • 网络协议入门:TCP/IP五层模型如何实现全球数据传输?
  • Docker安装Redis集群(3主3从+动态扩容、缩容)保姆级教程含踩坑及安装中遇到的问题解决
  • 企业级 AI 开发新范式:Spring AI 深度解析与实践
  • 如何用docker部署ELK?
  • Redis最佳实践——安全与稳定性保障之高可用架构详解
  • 【Python 算法零基础 4.排序 ⑥ 快速排序】
  • Java面试实战:从Spring Boot到微服务与AI的全栈挑战
  • Go 即时通讯系统:日志模块重构,并从main函数开始
  • CppCon 2014 学习:Exception-Safe Coding
  • MYSQL MGR高可用
  • 阿里通义实验室突破空间音频新纪元!OmniAudio让360°全景视频“声”临其境
  • 异步上传石墨文件进度条前端展示记录(采用Redis中String数据结构实现-苏东坡版本)
  • 处理知识库文件_编写powershell脚本文件_批量转换其他格式文件到pdf文件---人工智能工作笔记0249
  • rtpmixsound:实现音频混音攻击!全参数详细教程!Kali Linux教程!
  • 【Netty系列】解决TCP粘包和拆包:LengthFieldBasedFrameDecoder
  • stm与51单片机哪个更适合新手学
  • 【计算机网络】第3章:传输层—面向连接的传输:TCP
  • 从架构视角设计统一网络请求体系 —— 基于 uni-app 的前后端通信模型
  • 《信号与系统》--期末总结V1.0
  • 第32次CCF计算机软件能力认证-2-因子化简
  • mac笔记本如何快捷键截图后自动复制到粘贴板
  • 高考加油!UI界面生成器!
  • window ollama部署模型
  • 用mediamtx搭建简易rtmp,rtsp视频服务器