> 技术文档 > 【A题解题思路】2025中青杯数学建模A题解题思路+可运行代码参考(无偿分享)_2025 年第七届中青杯全国大学生数学建模竞赛题目

【A题解题思路】2025中青杯数学建模A题解题思路+可运行代码参考(无偿分享)_2025 年第七届中青杯全国大学生数学建模竞赛题目

注:该内容由“数模加油站”原创,无偿分享,可以领取参考但不要利用该内容倒卖,谢谢!

A   康养城市建设

问题1 :康养资源分布的现状分析与优化需求 康养城市的建设离不开对现有康养资源的全面评估。请收集或使用模拟数据分析 某城市内不同区域的康养资源分布情况包括医疗设施、养老机构、公园绿地、文化设 施等的数量和分布密度。同时,结合居民健康状况数据(如平均寿命、慢性病发病率、 健康满意度等),分析当前康养资源分布的合理性。在此基础上,提出优化康养资源 布局的初步思路,重点关注如何解决资源分布不均衡的问题,以提升康养服务的公平 性和可达性。

问题 1 分析

康养城市建设的首要任务在于明确现有康养资源的空间分布状况以及其与居民健康需求之间的匹配程度。问题一旨在分析一个城市内部不同区域康养资源(医疗设施、养老机构、绿地、公建配套等)的配置是否公平、合理,并结合居民健康状况指标(如平均寿命、慢性病患病率、健康满意度)进行诊断。该问题实质是一个空间资源与人口健康需求的多因素匹配评估问题。我们采用综合指标构建法与资源-需求匹配度量模型,通过归一化与加权求和形成资源指数 R_i和健康指数 H_i,计算匹配度 \\rho_i = R_i / H_i 并识别供需失衡区域。为进一步提出资源初步调配建议,引入粒子群优化算法(PSO),在总资源守恒条件下调整区域资源分配方案,以最大限度减少资源错配程度,实现初步的资源再优化。

解题思路:

Step 1:城市区域划分与数据结构构建

康养资源是空间性资源,不可能统一规划到整个城市的每一个角落。我们需要知道每个片区的资源状况——哪里资源密集?哪里资源匮乏?因此,我们必须将城市划分为若干“子单元”(如街道、社区、网格块),每个单元作为分析对象。这为后续的空间对比与优化打下基础。

因此,我们将城市划分为 n 个互不重叠的区域(如街道、社区、网格单元等),每个区域都可以用如下向量来表示其状态:

  • M_i:区域 i 的医疗设施数;
  • E_i:区域 i 的养老机构数;
  • G_i:区域 i 的绿地面积;
  • C_i:区域 i 的文化设施数;
  • P_i:区域 i 的人口数;
  • A_i:区域 i 的面积(用于计算密度);
  • L_i:平均寿命;
  • D_i:慢性病患病率;
  • S_i:居民健康满意度;

Step 2:资源指数与健康指数建模

现实中资源种类很多,直接比较“绿地数”和“医院数”没有意义,必须将多种资源整合为一个统一的评估指标。我们构建如下资源指数:

而为了衡量某一地区的康养资源供给能力,我们构造资源指数 R_i

R_i = \\alpha_1 \\cdot \\frac{M_i}{P_i} + \\alpha_2 \\cdot \\frac{E_i}{P_i} + \\alpha_3 \\cdot \\frac{G_i}{A_i} + \\alpha_4 \\cdot \\frac{C_i}{P_i}

解释如下:

  • 每类资源与人口或面积之间形成密度;医疗/养老/文化设施用“人均密度”表示:体现服务压力;
  • 权重\\alpha_1\\alpha_4 表示不同康养资源的影响强度;体现环境宜居性;
  • 权重满足 \\sum_{j=1}^{4} \\alpha_j = 1反映各资源重要性,可以由熵权法或专家评分法设定。

健康状况是多因素综合结果,只用慢病率衡量显然失真。我们构建复合健康需求指数:

构造居民健康需求指数 H_i,其形式为:

H_i = \\beta_1 \\cdot L_i - \\beta_2 \\cdot D_i + \\beta_3 \\cdot S_i

其中:

  • L_i 越高越好,正相关;
  • D_i 越高越差,负相关;
  • S_i代表主观评价,也为正向指标;
  • 同样,\\beta_j为各指标的权重。

 Step 3:资源匹配度构建与合理性评估

衡量某区域的资源是“多了”还是“少了”;

量化标准,使不同区域可以进行横向比较;

方便后续判断:该不该调资源,调多少,往哪里调?

将“资源供给”和“健康需求”统一起来,定义资源匹配度为:

\\rho_i = \\frac{R_i}{H_i}

含义解释:

  • \\rho_i \\approx 1,说明资源配置与需求匹配;
  • 若<img alt=\"\\rho_i ,代表资源不足;
  • 1\" class=\"mathcode\" src=\"https://latex.csdn.net/eq?%5Crho_i%20%3E%201\" />,可能资源浪费或不合理集中;

该指标是本题核心指标之一。

我们可以统计\\rho_i在整个城市的均值、标准差,并画出空间分布热力图,对资源分布不均现象进行定量刻画

 Step 4:优化动因 —— 初步资源调整目标

在进行现状分析后,我们希望回答一个实际问题:

在保持总资源不变的前提下,如何重新分配资源,以尽量平衡各区域的资源匹配度?

目标是使所有区域的 \\rho_i 尽量接近 1。

因此,引入以下目标函数:

f = \\sum_{i=1}^{n} \\left| \\rho_i - 1 \\right| = \\sum_{i=1}^{n} \\left| \\frac{R_i}{H_i} - 1 \\right|

这将成为优化问题的目标函数。

此时我们知道哪里匹配差,但该如何“合理重分配资源”呢?

这一步涉及:

  • 总资源量不变;
  • 资源不能出现负数;
  • 分给A区多了,B区就少了;
  • 有无数组合,要找最合理分法。

这就是组合优化问题,也是传统方法难解的情形。

所以我们引入粒子群优化(PSO)算法模拟人类智慧调整资源的过程。

Step 5:粒子群优化算法(PSO)具体应用分析

1. 粒子设计

每一个粒子代表一种资源重新配置方案,记为:

\\vec{x} = [M_1\', ..., M_n\', E_1\', ..., E_n\', G_1\', ..., G_n\', C_1\', ..., C_n\']

总维度为 4n,对应四类资源在 n 个区域的重新分配结果。

粒子群 代表着不同分配思路的群体试探

目标 为找到让匹配度最平衡的分配方式

粒子的位置 \\vec{x}就是我们要优化的变量。

2. 目标函数重构

每次粒子生成的新资源配置 M_i\', E_i\', G_i\', C_i\'会被带入资源指数函数:

R_i\' = \\alpha_1 \\cdot \\frac{M_i\'}{P_i} + \\alpha_2 \\cdot \\frac{E_i\'}{P_i} + \\alpha_3 \\cdot \\frac{G_i\'}{A_i} + \\alpha_4 \\cdot \\frac{C_i\'}{P_i}

然后计算新匹配度:

\\rho_i\' = \\frac{R_i\'}{H_i}

最终目标函数值为:

f(\\vec{x}) = \\sum_{i=1}^{n} \\left| \\rho_i\' - 1 \\right|

此函数值越小,表示资源分配越合理。

3. 约束处理

资源守恒约束:

对每类资源,总和必须等于初始总量:

\\sum\\limits_{i=1}^{n}{​{​{M}_{​{​{i}\'}}}}=\\sum\\limits_{i=1}^{n}{​{​{M}_{i}}}\\quad \\text{ }{​{M}_{​{​{i}\'}}}\\ge 0

其他资源同理。

解决方式:

  • 使用归一化操作(粒子每次更新后自动调整资源总量);
  • 或使用惩罚函数法:

f_{penalty} = f + \\lambda \\cdot \\left( \\left| \\sum M_i\' - M_{total} \\right| + ... \\right)

4. PSO运行步骤

  • 初始化若干粒子,每个粒子对应一个资源配置方案;
  • 在每一轮迭代中:

对每个粒子计算 f(\\vec{x})

更新当前粒子的个体最优 p_i和全局最优 g;

根据以下公式更新粒子速度和位置:

v_{i}^{(t+1)} = \\omega v_{i}^{(t)} + c_1 r_1 (p_i - x_i^{(t)}) + c_2 r_2 (g - x_i^{(t)}) x_i^{(t+1)} = x_i^{(t)} + v_i^{(t+1)}

  • 若达到最大迭代次数或误差收敛,则停止迭代。

5. 优化输出的解释

最终输出粒子 \\vec{x}^* 中每类资源的重新分配值:

  • 我们可以将优化前后的 \\rho_i可视化对比;
  • 标注改善最多或资源变化幅度最大区域;
  • 这可以转化为政府政策建议:例如“建议将医院床位从A区转移至B区”等。

Python代码: 

import numpy as npimport pandas as pdfrom itertools import product# 设置随机种子保持一致性np.random.seed(42)# ========== 问题一:资源匹配度分析 + 粒子群优化模拟 ==========# 模拟数据n = 5M = np.random.randint(10, 20, n)E = np.random.randint(5, 10, n)G = np.random.randint(200, 400, n)C = np.random.randint(3, 6, n)P = np.random.randint(8000, 12000, n)A = np.random.randint(5, 15, n)L = np.random.uniform(75, 80, n)D = np.random.uniform(0.2, 0.4, n)S = np.random.uniform(0.6, 0.9, n)alpha = np.array([0.3, 0.3, 0.2, 0.2])beta = np.array([0.5, 0.3, 0.2])def calc_rho(M, E, G, C): R = alpha[0]*M/P + alpha[1]*E/P + alpha[2]*G/A + alpha[3]*C/P H = beta[0]*L - beta[1]*D + beta[2]*S return R / H# PSO优化资源再分配(简化为枚举模拟小规模)R_total = (M.sum(), E.sum(), G.sum(), C.sum())best_mismatch = float(\'inf\')best_alloc = Nonefor m_dist in product(range(0, R_total[0]+1, 1), repeat=n): if sum(m_dist) != R_total[0]: continue for e_dist in product(range(0, R_total[1]+1, 1), repeat=n): if sum(e_dist) != R_total[1]: continue for g_dist in product(range(0, R_total[2]+1, 50), repeat=n): if sum(g_dist) != R_total[2]: continue for c_dist in product(range(0, R_total[3]+1, 1), repeat=n): if sum(c_dist) != R_total[3]: continue rho = calc_rho(np.array(m_dist), np.array(e_dist), np.array(g_dist), np.array(c_dist)) mismatch = np.sum(np.abs(rho - 1)) if mismatch < best_mismatch:  best_mismatch = mismatch  best_alloc = (m_dist, e_dist, g_dist, c_dist)rho_final = calc_rho(*map(np.array, best_alloc))df1 = pd.DataFrame({ \'区域\': [f\'A{i+1}\' for i in range(n)], \'匹配度优化后ρ\': rho_final})

后续都在“数模加油站”......