Testing Time: The Constant Wear On Stairs(优秀范文三:人流随机波动下的蒙特卡洛寿命分布)
2025 美赛 MCM A 题 · 优秀范文三。视角:确定性模型给出的是"平均世界的单点寿命",但真实楼梯面对的是随机世界——年人流有丰枯、人群步幅有差异、行走习惯参差。本文把三类随机性(年人流 ±20% 对数正态、步态偏置幅度 、出入口加成 )注入范文一的累积磨损模型,3000 次蒙特卡洛仿真得到全段寿命的概率分布,并把分布翻译成维护决策语言:不同维护时点下的"提前失效概率"。正文 / 配图 / 附录 / 真源四路数字一致(固定种子 20250822)。
摘要
维护排程若只按确定性寿命(12.9 年)一刀切,会忽略随机世界的两种代价:过早更换的浪费与过晚更换的失效风险。本文用 3000 次蒙特卡洛仿真量化这一权衡:全段寿命 服从均值 13.4 年、标准差 1.0 年的右偏分布,10/50/90 百分位分别为 12 / 13 / 15 年,极值区间 [11, 18] 年;MC 均值比确定性解高 4%,源于对数正态人流的凸性。寿命谱显示两端第 1、20 级平均寿命并列最短(13.4 年)、相位低谷级最长(28.6 年),两级差距 15 年——差异化维护的依据在随机世界下依然稳健。决策曲线上,若拖到第 13 年才维护,已有 15.5% 概率发生"提前失效";把首检定在第 12 年则严格提前失效率仅 1.4%。灵敏度表明:年人流波动从 5% 增到 40% 时寿命标准差从 0.68 年放大到 1.59 年(翻倍有余),是离散度的主要来源;而步态异质性对平均寿命的影响不足 0.1 年——两类不确定性需要不同的应对(前者靠提前首检、后者靠规范步态与定期实测校准)。
一、问题重述
题目第③问要求预测踏步达到更换阈值的时点,第⑤问(鲁棒性)要求评估人流随机波动下寿命分布与替换时点的不确定性。范文一在确定性人流下给出了单点寿命 12.9 年,但"人流每年恰为 40 万"从未真实发生。本文回答:①寿命的完整分布长什么样,而非单点;②分布如何随人流波动幅度、人群步态异质性变化;③分布如何转化为维护时点决策——在"提前维护的浪费"与"延迟维护的失效风险"之间给出概率化的最优区间。
二、模型假设
- 磨损机理沿用范文一:落点权重 = 均匀 + 正弦周期偏置 + 出入口加成,累积磨损线性推进,阈值 当量。
- 年人流 独立同分布,对数正态 ,相对波动 20%;丰枯年之间无自相关。
- 步态偏置幅度 、出入口加成 ,每次仿真抽取一次(代表"这栋楼的人群特征"),年内不变。
- 每级磨损独立累计,任一级达标即为"该级失效";全段寿命 。
- 维护策略为单次首检时点 :若 则发生"提前失效"(安全事件),否则视为及时。仿真上限 60 年。
三、符号说明
| 符号 | 含义 |
|---|---|
| 第 年人流量(对数正态) | |
| 步态偏置幅度、出入口加成(每次仿真抽取) | |
| 第 级累积磨损 | |
| 各级寿命、全段寿命 | |
| 寿命分布的 10/50/90 百分位 | |
| 维护时点 对应的提前失效概率 |
四、建模过程
4.1 随机注入与单次仿真
单次仿真分三步:①抽取本次的 ,生成落点权重谱;②逐年抽取 ,按 累加每级磨损;③记录每级首次越过阈值的年份,全段寿命取最小。图 8 展示第 1 级累积磨损的 12 条随机路径——同一栋楼、同一套机理,因人流丰枯不同,撞线时间从 11 年到 15 年不等;红色最快路径直观解释了为什么"按均值排程"会翻车:
4.2 寿命分布与分位数
3000 次仿真收敛后的寿命直方与累积分布见图 1、图 2:
分布呈右偏:主体集中在 12–15 年,右尾拖到 18 年(连续低人流年的"长寿楼")。均值 13.4 年、标准差 1.0 年;P10=12 年是工程上最有用的数字——它表示仅约一成楼的寿命不足 12 年:若把首检定在第 12 年,绝大多数楼尚无任何一级失效,风险已被前置锁定。
4.3 确定性解在分布中的位置
图 3 把范文一确定性解(12.9 年)放回 MC 分布中对照:它落在 P10 与 P50 之间——确定性解天然偏悲观但不极端,作为"安全侧单点估计"合格;但它的缺陷是无法回答"提前失效概率多大"这类风险问题,而分布可以。
4.4 各级平均寿命谱:差异化维护在随机世界下依然成立
图 4 给出 3000 次仿真中每级平均寿命:两端第 1、20 级并列最短(均 13.4 年,二者权重在本周期参数下严格相等),相位低谷级最长 28.6 年,极差 15.2 年。随机性没有抹平差异——均值意义上"哪级先坏"与确定性结论一致,差异化维护排程(范文一的三档方案)在随机世界下依然成立,只是每档时点应按分布分位而非均值设定。
三篇范文至此形成完整闭环:范文一的确定性模型回答"哪级先坏、为什么",范文二的双目标优化回答"怎么改设计",本文的随机框架回答"何时去维护"。工程实践中三者按时间轴串联——设计期用范文二选方案,交付后用本文的 P10/P50 排首检与巡检,磨损数据回流后再校准范文一的参数重算全链路。这种"确定性定机理、优化定设计、随机定运维"的三层结构,正是本题作为经典磨损-维护问题的完整解法谱系。
4.5 维护时点的风险曲线
把分布翻译成决策:若到时点 才维护,提前失效概率 。图 7 画出这条曲线:
关键读数:(10 年前维护绝对安全但偏浪费)、(若把恰在第 12 年失效计入则累计约一成)、、。推荐首检窗口为第 11–12 年:严格意义的提前失效风险压到 2% 以内,同时只牺牲约 1–2 年的剩余寿命——这是分布模型才能给出的"风险—成本"显式权衡。
五、灵敏度分析
- 年人流波动(图 5):固定其余参数,把年人流相对波动从 5% 逐步提到 40%,各档重跑 1200 次仿真:
寿命标准差从 0.68 年(5% 波动)单调放大到 1.59 年(40% 波动),翻倍有余——人流越不稳定,寿命越不可单点预测。对交通枢纽类楼梯(客流天然大起大落)应直接按 P10 排程首检;对波动小的内部楼梯可放宽到 P25–P50,省下的检修频次就是真金白银。
- 步态异质性(图 6): 的标准差从 0.02 增到 0.08:
平均寿命稳定在 13.4 年附近、变化不足 0.1 年——人群异质性既不移均值也不放大整体离散,它的作用藏在结构里:让"哪一级先坏"在两端并列级之间轻微摇摆。应对它靠"治本"手段:入口导向铺设、扶手与踏面色彩规范步态,把 本身压回去;这与范文二加强垫的"治标"互补。
- 两类不确定性叠加:人流波动 40% 且步态异质性 0.08 时,P10 从 12 年前移到约 10.5 年——叠加场景的安全边际要再多让一年,单因素灵敏度无法暴露这一耦合,这正是蒙特卡洛优于单维扫描之处。
- 收敛性:样本从 1000 增到 6000,均值漂移小于 0.05 年、P10 漂移小于 0.3 年,3000 次已足够支撑上述全部读数。
六、模型评价与改进
优点:把"单点寿命"升级为"寿命分布",让维护决策第一次有了风险语言(失效概率、分位排程);三类随机源的注入方式都可实测标定(闸机人流计数、踏面厚度普查);决策曲线直接可用于写维护规程。局限:①年人流假设独立同分布,真实有早晚高峰、寒暑假与疫情类结构性冲击,可用时间序列模型替代;②步态参数年内不变,实际随租户更替漂移;③未与范文二的改造决策联动——随机寿命分布应进入成本模型(失效损失 × 概率),形成"随机多目标"版本;④失效定义为单级越限,未建安全冗余(相邻级分担载荷)。改进路径清晰:用实测磨损数据做贝叶斯参数更新,让分布随楼龄不断收窄。
七、结论
随机世界里的楼梯寿命不是一个数而是一条分布:均值 13.4 年、标准差 1.0 年、P10=12 年。确定性解 12.9 年位于分布左侧安全区,适合做保守单点,但只有分布才能回答维护者真正的问题——"拖到第 13 年才修,15.5% 的楼会先坏"。把首检定在第 11–12 年、按各级平均寿命谱(两端 13.4 年 vs 低谷 28.6 年)差异化排程、并在人流波动加大时主动前移 P10,这三条构成随机框架下的完整维护策略。寿命预测的终点不是算出一个数字,而是给决策者一张写着概率的日程表;这张表随实测数据滚动更新,越用越准、越用越可信。
参考文献
- COMAP. MCM Problem A: Testing Time — The Constant Wear On Stairs. 2025.
- Metropolis N., Ulam S. The Monte Carlo Method. J. Am. Stat. Assoc., 1949.
- Law A. M. Simulation Modeling and Analysis. 5th ed. McGraw-Hill, 2014.
- Frangopol D. M., et al. Life-cycle reliability and maintenance of deteriorating structures. Struct. Infrastruct. Eng., 2004.
- 本站范文一/二真源
tools/gen_mcm2025a*.py(载荷场与设计优化接口)。
附录:核心 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_mcm2025a_3 as M # 真源:随机人流/步态注入 + 3000次MC + 8图
# 1) 蒙特卡洛(与真源 main() 一致:n=3000,种子 20250822)
Ts, wis, avg_life = M.mc(3000)
stat = M.summarize(Ts)
print("MC 寿命: 均值=%.1f年 sd=%.1f P10=%.0f P50=%.0f P90=%.0f 极值=[%.0f,%.0f]"
% (stat["mean"], stat["sd"], stat["p10"], stat["p50"], stat["p90"],
stat["min"], stat["max"]))
print("确定性解=%.1f年 MC均值/确定性=%.2f" % (M.deterministic_T(), stat["mean"] / M.deterministic_T()))
# 2) 各级平均寿命谱(两端 vs 低谷)
print("第1级=%.1f年 第20级=%.1f年 低谷最长=%.1f年"
% (avg_life[0], avg_life[-1], max(avg_life)))
# 3) 维护时点风险曲线上的关键读数
for t0 in (10, 12, 13):
r = 100.0 * sum(1 for T in Ts if T < t0) / len(Ts)
print("R(%d年)=%.1f%%" % (t0, r))