MCM520 ← 资料站首页 电工杯 2026 B 优秀范文二:公平性视角下的养老服务站选址——平均掩盖了谁 打开交互阅读器 →

电工杯 2026 B 优秀范文二:公平性视角下的养老服务站选址——平均掩盖了谁

一、摘要

范文一用「需求评估 → 路网选址 → 容量校验 → 排队定员 → 满意度评价」的标准管线,给出了效率口径下的最优解:站[1,3,6] 三站方案覆盖 100%、最远步行 8.7 分钟。本文戴上「公平性」这副眼镜,重新审视同一份合成数据,追问一个效率视角自动跳过的问题:这份看似圆满的覆盖,是否在平均数里淹没了少数走得最远、最走不动的老人? 全文复用范文一真源(gen_dgcup2026b)、固定种子与核算口径,结论逐项交叉验证一致。六组实验给出四个清醒发现:其一,地理可达性本身就不平等——12 个小区到最近站的步行时间基尼达 0.1946、泰尔 0.0800,最劣势小区 5 要走 7.1 分钟,而直线距离对步行时间平均高估 74.6%、对小区 9 甚至高估 307.7%,「15 分钟生活圈」的落地偏差远被低估。其二,效率与公平并非总是一致:p=3 时最大覆盖(MCLP)与最小化最远步行(p-center)两派罕见地握手于站[1,3,6],但到了 p=4,公平派转身选了站[1,2,6,7],把基尼从 0.1794 砍到 0.1046(降 41%),说明「多建一站怎么建」的答案取决于你要效率还是要公平。其三,把失能老人耐受半径从 10 分钟收紧到 7 分钟,效率方案下竟有 41.7%(288 人)的失能人口暴露在外——选址的「100% 覆盖」对最脆弱群体是虚的。其四,6.7% 的超半径需求全部压在小区 2 一家头上;而容量挤压本身会加剧不平等(基尼 0.1878→0.2063),用上门延伸服务补救反而能把基尼降到 0.1754,低于无容量约束的几何基线。本文主张:公共养老设施的选址评价,应把基尼/泰尔与脆弱群体暴露率列为与覆盖率并列的硬指标。正文、配图、附录、真源四路数字一致。

二、问题重述(公平视角)

嵌入式社区养老面对四个递进问题,范文一已按「效率优先」给出了完整解。本文把它们改写成「公平优先」的版本:

  1. 需求评估的公平改写:需求不仅是「到访人次」,还应叠加「失能权重」——失能老人走不动,单位人口的真实可达性需求更高;
  2. 选址的两种哲学:效率派问「预算内覆盖最多需求」(MCLP),公平派问「让走得最远的人尽量少走」(p-center,最小化最大步行时间),二者是否指向同一方案?
  3. 资源配置的隐性代价:容量约束把需求溢出到次近站,这种「挤压」究竟落在谁头上、是否拉大了不平等?
  4. 评价与改进的公平标尺:用基尼系数、泰尔指数、脆弱群体暴露率替代(或补充)满意度 TOPSIS,并寻找低成本的公平修复手段(如上门延伸)。

本文用六个实验(E1 不平等量化、E2 两派选址对比、E3 脆弱群体门槛、E4 效率-公平前沿、E5 谁被牺牲、E6 公平化改进)逐一作答。

三、模型假设与符号

  • H1(同源复用与交叉验证):路网 Dijkstra、需求评估、覆盖判定、容量指派、M/M/c 排队全部复用范文一模块 gen_dgcup2026b;本文新增的基尼、泰尔、p-center、脆弱门槛函数均为确定性纯标准库实现,固定种子 SEED=20260823。
  • H2(公平的两种度量):结果公平用基尼系数 GG(步行时间分布的离散度,越接近 0 越平等)与泰尔指数 TT(对最劣势群体更敏感);过程公平用 p-center 的「最小化最大步行」目标,保证没有人被甩在最远。
  • H3(脆弱群体耐受半径):失能老人步行耐受低于普通老人,本文设其可达半径门槛 Rv∈{8,7,6}R_v \in \{8,7,6\} 分钟,低于范文一的 10 分钟统一口径。
  • H4(上门延伸的等效口径):对几何步行超过 8 分钟的小区,由最近站提供上门服务,等效可达时间封顶为 8 分钟,用以估计「服务延伸」对不平等的修复力。

主要符号:tijt_{ij} 小区 ii 到站 jj 的路网步行时间;GG、泰尔 TT 为可达性不平等指标;RvR_v 脆弱群体耐受半径;exposedv\mathrm{exposed}_v 为耐受 RvR_v 下的失能人口暴露量。

四、方法:四问的公平重构

图1 从效率视角到公平视角的四问重构

图 1 把同一道题的两套读法并排放:需求评估从「到访人次」补上失能权重,选址从单一 MCLP 拆出 p-center 对照,资源配置追问「谁被牺牲」,评价从 TOPSIS 满意度补入基尼/泰尔。这种重构不改变范文一任何计算,只是把镜头从「总量最优」转向「最差者体验」,从而暴露被平均数掩盖的少数。

五、结果 I:可达性不平等的地理真相

5.1 基尼 0.1946——不平等是地理给的,不是选址给的

图2 各小区到最近站的步行时间

图 2 画出 12 个小区到各自最近站的步行时间(已排序)。全社区 60 岁以上 4 740 人、日均服务 526 人次,但步行时间在 1.1 到 7.1 分钟之间剧烈分化:基尼系数 0.1946、泰尔指数 0.0800,最劣势的小区 5 要走 7.1 分钟,是最近小区 7(1.1 分钟)的 6.5 倍。这一步关键在厘清责任——这种不平等来自小区与路网的空间布局(地理给定),而非某一选址决策;但它决定了无论怎么选点,公平改进的天花板就这样被焊死了一半。

5.2 直线距离对步行时间平均高估 74.6%

图3 直线距离对步行时间的高估

图 3 展示直线距离对各小区最劣候选站步行时间的高估幅度。平均高估 74.6%,而对小区 9 到候选站 6,直线仅 2.6 分钟、路网实际要 10.7 分钟,高估达 307.7%。这解释了为什么许多「15 分钟生活圈」规划落地感差——评估口径本身就在系统性乐观。对公平研究而言,若用直线距离做可达性分析,会把小区 9 这类被路网「困住」的片区误判为已达标,从而在其真实暴露时毫无察觉。

六、结果 II:效率派与公平派的两套选址(E2)

6.1 p=3 两派握手,p=4 两派分道

图4 效率派与公平派的基尼对比

图 4 把两种选址哲学在每个预算档位下的基尼摆在一起。p=2 时两派已经分叉:效率 MCLP 选站[1,6](覆盖 93.1%、最远 13.9 分钟、基尼 0.1929),公平 p-center 改选站[1,4](最远压到 10.5 分钟、基尼降到 0.1668),代价是覆盖少 6.9 个百分点。p=3 时出现罕见的「握手」:两派同取站[1,3,6],既覆盖 100% 又把最远步行压到 8.7 分钟、基尼 0.1878——这是效率与公平同时到达的甜蜜点,也是范文一方案站[1,3,6] 站得住脚的根本原因。p=4 时两派再度分道:效率派加站 2 得站[1,2,3,6],基尼 0.1794;公平派却改选站[1,2,6,7],把最远步行降到 7.5 分钟、基尼砍到 0.1046——比效率派低 41%。结论很直接:「建到第 4 站该怎么建」没有标准答案,取决于决策目标写在效率还是公平上;若以公平为纲,范文一的站[1,2,3,6] 并非最优。

七、结果 III:脆弱群体门槛(E3)

图5 脆弱群体暴露门槛

效率方案站[1,3,6] 在 10 分钟统一口径下号称 100% 覆盖,但失能老人走不动。把耐受半径收紧到 8/7/6 分钟重算(图 5):耐受 8 分钟时 155 名失能人口(22.4%)暴露,主要集中在小区 3、12;耐受 7 分钟时暴露量跳到 288 人(41.7%),蔓延到小区 3、5、6、10、12;耐受 6 分钟时更是 410 人(59.4%)几乎遍布全社区。全社区失能人口共 692 人,高失能片区集中在小区 3、7、1。这揭示一个被「平均覆盖」遮蔽的事实:选址的公平性不能只看总体覆盖率,必须按人群耐受分层检验;否则「100% 覆盖」只是对走得动的人成立。

八、结果 IV:效率-公平前沿(E4)

图6 p=3 全组合的效率-公平前沿

把 p=3 的全部 (83)=56\binom{8}{3}=56 种组合画成(覆盖率, 基尼)散点(图 6),前沿结构一目了然:右上角的 MCLP 点站[1,3,6] 以基尼 0.1878 拿到满覆盖 100%;左下方向最公平的点站[1,2,7] 基尼仅 0.1342,但覆盖掉到 89.1%。不存在「既满覆盖又最公平」的第二种组合——效率与公平在 p=3 的满覆盖点之外必须权衡,这正是公共选址无法用单一指标拍板的铁证。

九、结果 V:谁被牺牲(E5)

图7 容量指派下各小区实际步行

在站[1,3,6] 的容量指派下,范文一已发现 6.7% 的需求被挤到 10 分钟半径之外。图 7 把责任精确到小区:这 6.7%(约 35.1 人次)全部是小区 2,其实际步行 11.9 分钟——其余 11 个小区都在半径内。不公平在此表现为「结构性集中」:不是均匀地每人多走一点,而是某一个片区独自承担全部代价。这正是基尼类指标想捕捉、而覆盖率指标看不见的伤害形态。

十、结果 VI:公平化改进——上门延伸修复不平等(E6)

图8 公平化改进的基尼演变

能否在不推翻选址的前提下修复公平?图 8 给出基尼的演变三阶段:纯几何最近指派(无容量扭曲)基尼 0.1878 → 当前容量挤压指派 0.2063 → 对超距小区提供上门延伸后 0.1754。两个反直觉结论:第一,容量挤压本身会加剧不平等(0.1878→0.2063),因为溢出总是优先砸向本就偏远的小区;第二,上门延伸这类低成本服务延伸,竟能把基尼压到比「无容量约束的理想几何基线」还低(0.1754<0.1878)。对公共养老设施而言,选址定的是骨架,服务延伸才填得平最末端的公平坑。

十一、结论与建议

  1. 不平等是地理给定的:12 小区步行可达基尼 0.1946、最劣势 6.5 倍于最优,选址只能改善不能消灭,评价须先承认这道天花板。
  2. 效率与公平在 p=3 握手、在 p=4 分道:站[1,3,6] 是双目标甜蜜点;若增建第 4 站且以公平为纲,应改选站[1,2,6,7](基尼 0.1046 vs 0.1794)。
  3. 脆弱群体分层检验必不可少:失能老人耐受 7 分钟时 41.7% 失能人口暴露,总体 100% 覆盖的叙事对最弱者不成立。
  4. 伤害是结构性集中的:6.7% 超半径需求全压小区 2,基尼类指标比覆盖率更能暴露这种「一人扛全部」。
  5. 服务延伸修复公平:容量挤压拉大不平等,上门延伸以低成本把基尼压到几何基线之下,应作为选址之后的标配补丁。
  6. 方法论:公共选址评价应把基尼/泰尔与脆弱群体暴露率列为与覆盖率并列的硬指标,把「最差者体验」写进目标函数。

十二、模型验证(四路一致)

三重交叉验证:① 附录脚本独立导入真源 gen_dgcup2026b_2 重跑,关键数字(可达基尼 0.1946/泰尔 0.0800/最劣势小区 5/直线高估 74.6% 与最大 307.7%、E2 两派三档基尼、E3 三门槛暴露率 22.4%/41.7%/59.4%、E4 前沿两端、E5 超半径 6.7% 与小区 2、E6 基尼三阶段 0.1878/0.2063/0.1754)与正文逐项吻合,构成跨真源互证;② 方法一致性——本文基尼/泰尔/p-center 均为确定性纯标准库实现,固定种子下双跑字节一致,且复用范文一的路网与需求,与范文一主线数字(4 740 人、526 人次/日、站[1,3,6])无缝衔接;③ 图序一致——八张配图按正文出现顺序编号,数据均由同一真源读取,无手工填入。正文、配图、附录、真源四路数字一致。

参考文献

[1] 2026 年电工杯数学建模竞赛 B 题:嵌入式社区养老服务站的建设与优化(赛题原文,官方数据未公开)。

[2] 本站范文一:嵌入式社区养老服务站——路网可达·三模型选址·排队配置(assets/problems/papers/dgcup2026b-1.md)。

[3] Church R L, ReVelle C. The maximal covering location problem[J]. Papers of the Regional Science Association, 1974.(最大覆盖模型 MCLP 原始文献)

[4] Daskin M S. Network and Discrete Location: Models, Algorithms, and Applications[M]. Wiley, 1995.(p-center / p-median 选址理论)

[5] Sen A. Inequality Reexamined[M]. Harvard University Press, 1992.(不平等的能力视角,基尼/泰尔的理论渊源)

附录:核心 Python 实现(可独立运行复现上述数字)

import sys, os
_HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.abspath(os.path.join(_HERE, "..", "..", "..", "tools")))
import gen_dgcup2026b_2 as H

R = H.gen_dgcup2026b_2()
a = R["access"]
print("E1 基尼=%.4f 泰尔=%.4f 最劣势小区=%d(%.1f分) 直线高估平均%.1f%% 最大%.1f%%"
      % (a["gini_geo"], a["theil_geo"], a["worst_i"] + 1, a["worst_walk"],
         a["avg_diff"], a["mx_diff"]))
print("--- E2 效率(MCLP) vs 公平(p-center) ---")
for p in (2, 3, 4):
    e = R["e2"][p]
    print("p=%d MCLP站%s 覆盖%.1f%% 基尼%.4f | p-center站%s 基尼%.4f | %s"
          % (p, [j + 1 for j in e["mclp_comb"]], e["mclp_cov"] * 100,
             e["mclp_gini"], [j + 1 for j in e["pc_comb"]], e["pc_gini"],
             "同" if e["same"] else "异"))
print("--- E3 脆弱群体暴露率 ---")
for rv in (8.0, 7.0, 6.0):
    v = R["e3"]["vuln"][rv]
    print("耐受%.0f分: 暴露%.1f%% 涉及%s" % (rv, v["exposed_rate"] * 100,
                                        [t[0] for t in v["estates"]]))
print("--- E4 前沿两端 ---")
fr = sorted(R["e4"]["points"], key=lambda t: -t[0])
print("最高覆盖站%s 基尼%.4f" % ([j + 1 for j in fr[0][2]], fr[0][1]))
print("--- E5 谁被牺牲 ---")
print("超半径%.1f%% 最远%.1f分 被牺牲%s"
      % (R["e5"]["over_rate"] * 100, R["e5"]["far"],
         [(i + 1, w, v) for i, w, v in R["e5"]["sacrificed"]]))
print("--- E6 公平化基尼演变 ---")
e6 = R["e6"]
print("几何%.4f 容量挤压%.4f 上门延伸%.4f"
      % (e6["gini_geo"], e6["gini_assign"], e6["gini_outreach"]))