这是MCM 2025 Problem B O奖论文2504448的学习笔记,其他MCM笔记:
论文写作

在Introduction的Our work部分放上我们的整个建模、求解、分析过程

加入图片说明文字(类似PPT)
建模
熵权法思路
- 对于每一个指标,对其评价对象的值进行归一化,然后计算该指标的熵值
- 用所有指标的熵值计算熵权
假设:
原始数据矩阵为:
X=⎣⎢⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋯x1nx2n⋮xmn⎦⎥⎥⎥⎥⎤
- 指标正向化
如果所有指标都是“越大越好”
- 指标内部数据归一化
pij=∑i=1mxij′x′ij
- 若 xij′=0*,*则规定 pijlnpij=0
- 计算指标熵值
ej=−ki=1∑mpijlnpij
其中:k=lnm1
- 计算熵权
dj=1−ej
wj=∑j=1ndjdj
得到每个指标的权重 wj
逻辑斯谛修正 (Logistic Correction)
适用于描述 “饱和增长/恢复模型”
例如本文中描述自然恢复的公式中的r⋅(1−Esub(t))就是Logistic Correction
E(t+1)=Esub(t)+r⋅(1−Esub(t))−h⋅(TmaxT(t))
它描述的是:环境恢复速度随着环境变好而下滑
本期增量=基础速率×剩余空间/缺口(1−KX)
X 是研究的变量(比如环境质量、人口、市场占有率),K 是该量的最大值
r⋅(1−Esub(t))=r⋅(1−1Esub(t))
基于理想点的归一化惩罚项
其思想是 “中庸之道”,适用于中间值是最好的情况
Score=1−Toptimal∣Tactual−Toptimal∣
适用场景:
- 体温、库存管理、城市规划(建筑密度…)、生态学(土壤pH、生物量…)
进阶:使用正态分布函数,消除不可导点
Q(t)=e−2σ2(T(t)−Topt)2
动态规划(Dynamic Programming, DP)
解决多阶段决策过程的工具,将长期的决策问题拆解为每个 t 下的决策问题
首先定义四要素:
1. 定义状态变量(State Variables)
随时间变化,且会被决策影响的指标,往往是目标函数中的变量
- 例如本文中选取了:T(t) 当前的游客数量,E(t) 当前的环境质量指数,Q(t) 当前的居民满意度
2. 定义决策变量
决策者可以修改的参数
- 本文中为税率 τ(t) 和拨款 M(t)
3. 定义状态转移方程
利用回归分析、微分方程或逻辑斯谛增长模型等方式构建 T(t+1) 与 T(t) 之间的等式关系
4. 定义阶段指标/回报函数
描述当前 t 下做得好不好
一般是利润、成本、效用等
- 文中为 Reward(t)=P(t)+ω4E(t)+ω5Q(t)
然后写出贝尔曼方程:
5. 写出贝尔曼方程
V(t)=决策变量max{Reward(t)+γ⋅V(t+1)}
V(t)=τ(t),M(t)max{当前回报P(t)+ω4E(t)+ω5Q(t)+未来折现价值γV(t+1)}
V(t):价值函数,表示从第 t 年开始一直到最后一年,能获得的最大总收益
γ : 折现因子,将未来的价值函数折现到当前
求解方法:逆向归纳法
- 设定 Final
假设第5年是最后一年,没有下一年了(V(6)=0),则
V(5)=τ(t),M(t)max{Reawrd(t)}
- 例如文中为 V(5)=maxτ(t),M(t){P(t)+ω4E(t)+ω5Q(t)}
- 由于文中模型的公式均为线性函数/凹函数,并且在定义域内连续,一定有全局最优解
如何求解?
(1) 首先,V(5)受到 t = 4 的状态变量的影响,例如文中的 T(4) 和 E(4)
因此,V(5) 实际上是一个以 T(4) 和 E(4) 为变量的表 / 函数
其一, 可以采用网格法,输入大量的 T(4) 和 E(4),对每个 (T(4) , E(4)),采取以下方法求得 V(5)
(离散)
- 对于处处可导的凹/凸函数,可以用梯度法(梯度下降)、牛顿法,
- 对于存在不可导点的凹/凸函数情形
- 定义域较小的可以用离散化求解(网格搜索)
- 否则采用次梯度法、近端梯度法
- 对于非凸函数的情形
- 若函数光滑可导:
- 若函数包含整型变量
- 使用MIP求解器求解:分支定界法(B&B):将定义域不断二分,分别求每一块中函数的上下界、
- 若函数是个黑箱
- 有的函数有特殊的数学结构可以变换为凸函数…
其二, 可以采用 近似动态规划
即在第 5 年随机输入几千个 (T(4) , E(4)),对每个 (T(4) , E(4))同样用上文所述方法求得最优解,然后用回归模型拟合这个函数,得到
V^5(T,E)
这是一个连续函数,适合T、E连续的情形
-
常用的回归模型包括:线性回归、随机森林 / XGBoost、神经网络
-
注意线性回归指关于各项权重是线性的,变量可以为任意幂次,不一定是线性的,即
y=w0⋅ϕ0(x)+w1⋅ϕ1(x)+w2⋅ϕ2(x)+…
线性回归可以用sklearn做到,e.g.
1 2 3 4 5 6
| poly = PolynomialFeatures(degree=2, include_bias=True) X_poly = poly.fit_transform(X_raw)
model_v5 = LinearRegression() model_v5.fit(X_poly, y_targets)
|
- 倒推
得到 V(5) 后,即可优化得到 V(4)
V(4)=τ(t),M(t)max{Reawrd(t)+γV(5)}
- 例如文中为 V(4)=maxτ(t),M(t){P(t)+ω4E(t)+ω5Q(t)+γV(5)}
- 以此类推可以求得前面各年的值
灵敏度分析
对于一个动态规划模型,可以尝试改变状态变量,看参数的变化
可以展示模型的 Smart 程度
一般的灵敏度分析(改变参数)展示的只是 Robust
这篇论文可以改进的点
论文中的决策变量只写了两个 τ(t),M(t)
但实际求解(根据3.5.7)可知 M(t) 实际上是有4个分量的,分别表示政府的基础设施投入、广告投入、补贴投入、环保投入
更好的写法是将其在模型建立时清晰地写出来,如下所示:
设 αi(t) 为第 t 年各类政府支出的分配比例,满足归一化约束:
α(t)=[αenv(t),αinfra(t),αsub(t),αads(t)]
s.t.∑αi(t)=1,αi(t)≥0
各类具体的支出金额为:Mi(t)=αi(t)⋅M(t)
-
广告投入 (Mads)
原公式只写了 η⋅M(t),现在更精确为:
g(t)=gbase−βCcap(t)+η⋅仅广告费起作用(αads(t)⋅M(t))
-
环保投入 (Menv)
原公式写的是 κ⋅M(t),现在更精确为:
Esub(t)=E(t)+κ⋅仅环保费起作用(αenv(t)⋅M(t))
-
基建投入 (Minfra)
基建投入应该提升城市的承载力。我们可以把 Topt 改写为动态变量:
Topt(t)=Toptbase+μ⋅k=1∑t累计基建投入(αinfra(k)⋅M(k))
-
补贴投入 (Msub)
收了税,但我返还了一部分 Msub 给居民,居民满意度提高
Q(t)=⋯−ω3⋅净税收负担max(0, τ(t)⋅R(t)−θ⋅(αsub(t)⋅M(t)))
- Cover
