简介:2022年美赛B题围绕美国西部千年一遇的干旱危机,要求给出水资源分配策略。这份M奖优秀论文面向参加数学建模竞赛的学生及指导教师,提供可直接研读的获奖级完整解法。论文提出FHSD公平分层供需模型,以多目标非线性规划为框架:先用马尔科夫链分析历史气候数据得到降雨概率,再借助蒙特卡洛模拟预测一个月内天气,以连续干旱天数最大概率确定模型更新时机;随后按一年周期构建分层供需结构,由水库水位与容量关系拟合供应函数,并设计公平效益系数、价格系数、成本系数与满意度刻画需求函数,最终用NSGA2算法求解帕累托非劣解,在公平性与经济效益间取得平衡,文中还附有敏感性分析与具体水量、经济效益结果。资源包共1个PDF文件,约1.16MB,正文含摘要、建模推导与结果讨论,结构完整,适合按模块精读与仿写。目前已有3065人学习下载,可供备赛选题、模型搭建与论文写作参考。
1. 先给判断:2022年美赛B题的分水岭,是“多久更新一次”这个参数
2022年美赛B题给的是一道典型的资源分配难题:一条长期缺水的流域上,上游和下游两座水库要给五个辖区同时提供农业、工业、居民用水和水力发电,问你怎么分、分多久、不够了怎么办。很多队伍一上来就开始写水库调度方程,最后交上去的是一份专业术语过多、让评审难以快速理解的水文作业。
那篇拿到M奖的优秀论文,真正让它获得认可的地方,在于它先把“模型多久更新一次”当成一个需要算出来的量:用马尔可夫链拟合历史降雨,用蒙特卡洛把连续干旱天数的分布跑出来,挑概率最大的那个天数当更新周期。这个动作看着不起眼,却同时解决了鲁棒性论证和时间粒度这两个扣分点。它后面的公平分层供需模型、多目标非线性规划和NSGA2,全建立在“更新周期”这个基础之上。
这篇笔记就按这条线拆:考什么、高频考点怎么背、真题怎么答、哪里最容易出错。适合已经能写完整篇论文、但总在“模型说不圆”上失分的队伍。
2. 命题拆解:B题四问之间的任务链条与评分视线顺序
2.1 四问之间的链条关系,比四问本身更重要
B题给了四个问题,表面上是并列的,实际上是一条单向依赖链。第一问要求建立水资源与电力分配模型,具体包括三件事:当上游水库水位为 P、下游水库水位为 M 时,两库之间的调水量是多少;在没有额外来水的情况下,满足既定需求需要多长时间;如果逐步补充来水,需要补多少。第二问要求建立一套标准,用来解决“一般用水(农业、工业、居民)”和“发电”之间的冲突。第三问是当所有水和电的需求都无法满足时怎么办。第四问是敏感性分析:农业、工业、人口变化时模型怎么变,可再生能源比例上升时怎么变,水和电需求下降时怎么变。
关键点在于:第一问给你的水位—库容—发电关系,是第二问目标函数的基础;第二问的多目标解集,是第三问“削减规则”的输入;第四问改的是第二问里的需求参数和供给参数。四问只要断掉一处,整篇论文的可信度就会下降一档。阅卷时常见的失分情形,是第一问算了一个孤立的水量平衡,第二问重新定义了一套变量,两者之间没有任何关联。读者看不到“你在同一套模型上迭代”,只会觉得你写了四个不相干的小作业。
这类题评委会按下面的顺序看:摘要里有没有完整的结果数字;假设有没有把“为什么可以这么假设”讲透;模型链条是不是一套变量贯穿到底;结果有没有量纲、有没有对照;敏感性分析是不是真的改变了结论而不只是贴了两张图;模型评价有没有说出自己方法的边界。真正拉开M奖和普通完成度差距的,是“链条完整”和“结果解释得动”这两条,不是用了多高级的算法。
提示:摘要里每个问题至少给一个数字结论,比如“更新周期取 10 天”“年度经济效益约 287 亿美元”“上游水库需 10 个月满足既定需求”。没有数字的摘要,评委很难给你高印象分。
2.2 把“分配水”翻译成决策变量、目标与约束
很多人卡在第一步:题目说的是水,但写模型时不知道该让什么当变量。标准做法是把“谁从哪座库取多少水”拆成三维下标:辖区、行业、水源。再补上“两库之间的调水量”和“发电用水量”,决策变量就完整了。
| 符号 | 含义 | 单位 | 取值约束 |
|---|---|---|---|
| x[i][j][k] | 第 i 个辖区第 j 个行业从第 k 座水库取的水量 | 百万立方米 | ≥0,且不超过该行业需求 |
| t | 两库之间的调水量 | 百万立方米 | ≥0,受输水能力上限约束 |
| g[k] | 第 k 座水库用于发电的下泄流量 | 百万立方米 | 在最小发电流量与最大下泄能力之间 |
| T | 满足既定需求所需月数 | 月 | 正整数 |
约束至少要写四类:库容约束,任一时刻蓄水量必须落在死库容和最大库容之间;发电水位约束,低于最小发电水位就发不出电;输水能力约束,渠道不是无限粗的;需求上限约束,不能给某个辖区分配超过它实际需要的水。目标函数至少两个:经济效益,用售水收入加售电收入再减输水成本;公平性,用各辖区缺水率的方差,或者各辖区满意度最小值的最大化。
这里有个容易被忽略的细节:输水成本跟距离成正比,所以成本系数不是常数,而是“距离×单位距离成本”。论文里专门设计了公平效益系数、价格系数、成本系数和满意度四个参数来确定需求函数,就是让不同辖区、不同行业的水在模型里“价格不同、权重不同”。农业用水量大但单价低,居民用水量小但优先级高,工业和发电抢同一股下泄流量。这些差异如果不体现在系数上,你的“公平”就只是一句口号。
2.3 真题演练:第一问的三种答法与评分差异
第一问是整篇的地基,也是最容易答浅的一问。把常见答法按水平排一下,你就能看出评委想要什么。
第一种答法:直接做水量平衡。用上游水库的蓄水量加上区间来水,减去蒸发和渗漏,再减去两库之间的调水量,得到下游水库蓄水量,然后判断“够不够”。这种答法的致命问题是它没有回答“要多久”。题目问的是时间,你给的是水量,评委会直接判定你漏问了。而且它没有优化,任何一组可行解都叫解,你没法说明自己的方案比别人的好。
第二种答法:建一个线性规划,目标是最小化总缺水量,约束就是上面那四类。这比第一种强,至少有了“最优”的概念。但它仍然没有回答“逐步补水需要补多少”,因为线性规划只给一个静态最优解,不含时间维度。而且最小化缺水量这个目标太单一,第二问的公平性和发电效益完全没接上。
第三种答法,也是那篇论文走的路线:分三段。第一段,先判断在当前水位下,既定需求能不能被满足,用可行性检验代替优化;第二段,如果不能满足,把“满足需求所需时间 T”当成决策变量,在每一期里滚动做水量平衡,解出 T;第三段,在 T 已知的前提下,反推每期需要额外补充多少来水才能把 T 压到目标值。三段之间共用一套变量和参数,第二问直接拿第一问的供水方案当初始解,链条自然就接上了。
第三种答法的好处在于,它把一道看起来是“算水量”的题,变成了“算时间、算缺口、算补给”的递进结构。评委看到的是一个有层次的模型,不是一堆公式。你如果在论文里再补一句“考虑到水库调度成本高、灵活性低,更新周期不宜取得过短”,就把第三问和第四问的讨论空间也预留出来了。
3. 高频考点:马尔可夫链加蒙特卡洛,怎么把“更新周期”算成一个数
3.1 转移矩阵的三个必答点:状态空间、无后效性、平稳性
这部分是整篇论文最容易被追问的技术点。状态空间要写得足够简单:把某一天分成“无雨”和“有雨”两个状态就够了,状态越多,转移矩阵越难估准,样本一少就会出现整行概率为 0 的情况。论文的做法就是二状态,事件 A 表示某日无雨,事件 B 表示某日有雨,用历史天气数据统计“昨天无雨今天有雨”“昨天有雨今天无雨”这类相邻日的频数,归一化得到 2×2 的转移概率矩阵。
无后效性这句话必须自己说清楚,不能只抄定义。“在给定今天天气的条件下,过去若干天的天气对预测明天没有额外信息”这句表述要配上你的检验思路:如果历史数据里连续干旱有明显的季节性聚集,那二状态马尔可夫链就是一个近似,你需要在假设里承认这一点,并在敏感性分析里说明它对结论的影响方向。评委不会因为你做了近似而扣分,但一定会因为你假装近似不存在而扣分。
平稳性是可加分的部分。给定转移矩阵 P,解 πP=π 且 π 各分量和为 1,得到长期处于无雨状态的概率。这个数有两个用处:一是在论文里说明“长期来看该流域约有八成时间处于干旱状态”,给后面的水资源紧张提供数据支撑;二是给蒙特卡洛模拟提供初始状态分布,避免你一上来就假设“从雨天开始”,把连续干旱天数系统性低估。
3.2 蒙特卡洛模拟连续干旱天数:抽样口径决定结论可信度
有了转移矩阵,模拟就很简单:从某个初始状态出发,按 P 一行一行地抽下一天的状态,跑满一个月,记录这个月里最长的连续无雨天数 L,重复上万次,就得到 L 的分布。论文取“概率最大的那个 L”作为更新周期,逻辑是:按最可能出现的连续干旱长度来定调度周期,模型在最坏情况附近也不会失灵。
这里有三个决定结论可信度的口径,写论文时必须交代。第一,初始状态怎么定。正确做法是用当月历史雨日频率作为初始分布抽样,错误做法是固定从雨天或旱天开始,后者会让结果偏移好几天。第二,月份长度取 28 还是 30 或 31。这个差异看着小,但对“最长连续干旱天数”这种极值统计量影响不小,论文里按季节分组处理,就是把月份长度差异吸收进分组里。第三,取众数还是取分位数。众数回答的是“最可能有多久”,分位数回答的是“九成情况下不会超过多久”,两者的工程含义不同。论文选了众数,你如果选分位数,就要在模型评价里说明这是更保守的策略,并且解释为什么保守在这里是合理的。
论文最终给出的更新周期是按季节、按水库分开的:上游水库在 1 到 5 月取 10 天,6 到 8 月取 11 天,9 到 12 月取 11 天;下游水库对应三个时段分别是 10 天、10 天和 17 天。分季节是有道理的,因为不同季节的降雨转移概率差别很大,把全年混在一起估一个矩阵,等于把季节信号平均掉了。分水库也有道理,两座库的集水区域不同,历史序列本来就该分开统计。
3.3 真题演练:从历史频数到更新周期表的完整链路
下面这段代码把上面三步串起来,你可以直接换成自己统计的历史序列跑。注意里面的转移矩阵是示意值,真实数值必须用你的数据重新估。
import numpy as np # 历史日天气序列:0 = 无雨,1 = 有雨(换成你自己整理的气象序列) hist = np.array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0]) # 第一步:用相邻日频数估计转移矩阵 n[i][j] 表示"昨天 i、今天 j"的次数 n = np.zeros((2, 2), dtype=int) for a, b in zip(hist[:-1], hist[1:]): n[a, b] += 1 # 加一平滑,防止某个状态在样本里没出现过导致整行概率为 0 P = (n + 1) / (n + 1).sum(axis=1, keepdims=True) print("转移矩阵 P =") print(np.round(P, 4)) print("行和 =", P.sum(axis=1)) # 必须都是 1,否则矩阵写错了 # 第二步:解平稳分布 pi * P = pi,作为初始状态抽样依据 w, v = np.linalg.eig(P.T) pi = np.real(v[:, np.argmax(np.real(w))]) pi = pi / pi.sum() print("平稳分布 pi =", np.round(pi, 4)) # pi[0] 即长期无雨概率这段代码的前半部分做两件事。n[a, b] += 1是在统计相邻日的状态转移次数,zip(hist[:-1], hist[1:])把序列错开一位配对,这是估计转移矩阵最直白的写法。除以行和是把频数变成概率,保证每一行加起来是 1。加一平滑是习惯性做法(血泪经验:样本只有两三年时,某个转移对一次都没出现是常事,不平滑就会出现整行 0,后面抽样直接报错)。平稳分布用特征向量法求,取实部最大特征值对应的向量再归一化,比迭代法短,但对数值精度敏感,跑完记得看行和是不是 1。
def longest_dry_run(days, P, start_dist, rng, n_sim=20000): """返回 n_sim 次模拟中"当月最长连续无雨天数"的数组""" out = np.empty(n_sim, dtype=int) for k in range(n_sim): s = rng.choice(2, p=start_dist) # 按平稳分布抽初始状态 run = best = 0 for _ in range(days): if s == 0: # 今天无雨,连续计数 +1 run += 1 best = max(best, run) else: # 今天有雨,连续计数清零 run = 0 s = rng.choice(2, p=P[s]) # 按当前状态那一行抽明天的状态 out[k] = best return out rng = np.random.default_rng(2022) L = longest_dry_run(days=31, P=P, start_dist=pi, rng=rng, n_sim=20000) vals, counts = np.unique(L, return_counts=True) freq = counts / counts.sum() for v_, f_ in zip(vals, freq): print(f"最长连续干旱 {v_:2d} 天:概率 {f_:.4f}") print("取众数作为更新周期 =", vals[np.argmax(counts)], "天")讲解几个参数怎么改。days填当月天数,1 月填 31、2 月填 28,不要全年统一填 30,极值统计对长度很敏感。n_sim至少一万,低于两千时众数会抖,你重跑一次结论就变,评审一眼能看出不稳。start_dist用平稳分布,如果按季节分组跑,就换成该季节子序列估出来的平稳分布。rng固定种子是为了让论文里的数字可复现,很多队伍忘了这点,答辩或复核时重跑结果对不上,很难解释。
最后一步是把众数按季节和水库排成一张表,作为模型更新周期直接写进第四问的灵敏度对照里。这张表本身就是得分点:它让“我们考虑了最坏情况”这句话从口号变成了有分布支撑的结论。
4. 核心模型:公平分层供需模型怎么搭,NSGA-II 怎么调
4.1 供给端:水位—库容的对数线性回归与发电函数
供给函数不是拍出来的,是从数据里回归出来的。做法是拿两座水库各自的历史水位与蓄水量配对数据,做对数—对数线性回归,也就是用 ln(蓄水量) 对 ln(水位) 做最小二乘。用双对数的好处是拟合出来的曲线在低水位段不会出现负值,而且斜率可以解释成弹性:水位变 1%,库容大约变多少。论文报了两个水库的斜率、截距、R² 和 p 值,两个回归方程的 p 值都远小于 0.01,说明在 1% 的显著性水平下回归系数显著不为零,蓄水量和水位之间确实存在相关关系。
这一段在论文里必须写全:数据来源、样本量、回归形式、参数估计、显著性检验、拟合优度。少任何一项,评委都会怀疑你的供水曲线是随手画的。另一个容易漏的点是分段:水位低于死库容对应的水位时蓄水量按零处理,低于最小发电水位时只能供水不能发电,高于某个阈值时库容接近上限、边际蓄水能力迅速下降。这三个拐点如果不写进供给函数,后面解出来的方案会出现“水位越低越能供水”这种反直觉结果。
发电部分用实际出力公式:出力等于效率乘密度乘重力加速度乘流量再乘水头,水头就是上下游水位差。把这个式子和水位—库容回归联立,就能得到“给定蓄水量,能发多少电”的映射。这里单位换算是最大的风险点,库容常用百万立方米或亿立方米,水头用米,流量用立方米每秒,最后出力是瓦,换算成千瓦时还要乘时间。论文里把单位统一写在一张符号表里,这个习惯值得照做。
4.2 需求端:公平效益系数、价格系数、成本系数、满意度四件套
需求函数由四个参数共同决定,这是这套模型最有辨识度的地方。公平效益系数给每个辖区一个权重,体现“缺水率高的辖区应该被优先照顾”;价格系数按行业区分,农业低、居民高,因为居民用水的支付意愿和不可替代性更强;成本系数等于输水距离乘单位距离成本,决定从哪座库调水更划算;满意度是一个归一化到 0 到 1 之间的量,由实际供水量除以需求量得到,缺水率就是 1 减满意度。
分层体现在两个维度上。第一个维度是辖区层:五个辖区的需求先汇总,再按公平效益系数分配总量。第二个维度是行业层:同一个辖区内部,农业、工业、居民三类的需求按价格系数和优先级排序。这样“公平”就不是一句形容词,而是可以被计算、被比较、被画成帕累托前沿的东西。论文里反复强调“公平与效益的权衡”,靠的就是这套参数化表达。
写这一段时建议配一张参数表,把每个系数的含义、取值范围、取值依据列清楚。取值依据可以来自文献、可以来自统计数据、也可以是合理假设,但必须写明白。评委最不喜欢看到的是“我们设公平效益系数为 0.6”然后没有下文,这个 0.6 是从哪来的,直接决定你的模型是可复现的还是编的。
4.3 多目标非线性规划:目标怎么写、约束怎么设、帕累托前沿怎么读
模型的目标有两个。经济效益目标最大化售水收入加售电收入再减输水成本;社会效益目标最小化各辖区缺水率的方差,或者最大化最缺水辖区的满意度。两个目标方向相反:全给农业,公平性好但经济效益差;全给工业和发电,效益好但居民和农业缺水率飙升。这种冲突正是多目标规划存在的理由。
约束汇总起来有六类:水库蓄水量上下限、最小发电水位、渠道输水能力、各行业需求上限、两库之间的调水量非负且受限、年度总水量不超过可用总量。非线性来自两处:水位和库容是对数关系,发电出力是水头乘流量的乘积。所以叫多目标非线性规划,不是随便起的名字。
求解用 NSGA2。这个算法的核心是 nondominated sorting 加拥挤度距离:先按支配关系把种群分层,第一层是非支配解;再在同一层里按拥挤度挑,保证帕累托前沿分布均匀。参数上,种群规模一般取 100 到 200,迭代代数 200 到 500,交叉概率 0.9 左右,变异概率取 1 除以决策变量个数。约束处理用罚函数最省事,把越界量平方后乘一个大系数加到目标上。跑完之后得到一条帕累托前沿,横轴是经济效益,纵轴是缺水率方差,每个点都是一套可行的分配方案。
怎么从前沿上挑最终方案,是很多人写不好的地方。可以直接报极值点,效益最大或公平最好;也可以用膝点法找拐弯最急的那个点,因为拐点之后再多牺牲公平换来的效益增量已经很小;还可以用 TOPSIS 按理想点距离排序。论文选了哪一套要写清楚,并解释为什么这套准则符合题意。只贴一张前沿图不选点,等于把决策问题又扔回给评委。
4.4 真题演练:经济效益数字怎么自圆其说
论文给出的年度经济效益是 287.01 亿美元,同时说明上游水库需要 10 个月满足既定需求、下游水库需要 12 个月,一年供水结束后大约有 20 亿立方米水量流入下游海湾而未被利用。这几个数字就是第二问和第三问的落点,也是摘要里最值钱的部分。下面给出目标函数的实现骨架,你可以把它接到任意 NSGA2 实现上。
import numpy as np N_AREA, N_SEC = 5, 3 # 辖区数、行业数(农、工、居) DEMAND = np.array([ [120, 60, 40], [90, 70, 55], [60, 30, 25], [45, 25, 20], [30, 20, 15]], dtype=float) # 各辖区各行业年需水(百万立方米) PRICE_W = np.array([0.15, 0.90, 1.60]) # 分行业水价(美元/立方米,示意值) COST_T = np.array([0.02, 0.05, 0.03, 0.06, 0.04]) # 各辖区输水成本系数 PRICE_E = 0.1041 # 电价(美元/千瓦时) KWH_PER_UNIT = 1200.0 # 每百万立方米下泄对应的发电量(示意值) def objectives(x): """x: 长度 N_AREA*N_SEC 的向量,返回 [负经济效益, 缺水率方差],越小越好""" alloc = x.reshape(N_AREA, N_SEC) alloc = np.clip(alloc, 0, DEMAND) # 硬约束:不超过需求 water_income = (alloc * PRICE_W).sum() # 售水收入 power_income = alloc.sum() * KWH_PER_UNIT * PRICE_E trans_cost = (alloc.sum(axis=1) * COST_T).sum() econ = water_income + power_income - trans_cost deficit = 1 - alloc.sum(axis=1) / DEMAND.sum(axis=1) deficit = np.clip(deficit, 0, 1) equity = deficit.var() # 缺水率方差越小越公平 return np.array([-econ, equity]) print(objectives(np.full(N_AREA * N_SEC, 20.0)))这段代码有三个设计取舍值得在论文里明说。第一,目标取“负经济效益”是因为 NSGA2 默认做最小化,符号一改就不用改算法内部。第二,np.clip用来保证分配量不超过需求,这属于硬约束,比用罚函数更干净,但代价是搜索空间被截断,可能错过边界最优解,所以论文里应该说明约束处理方式并做一次对比。第三,缺水率用“1 减 实际比需求”的均值向量取方差,衡量的是辖区之间的不均衡程度,不是总缺水量。如果你换成最小化总缺水量,模型会退化成“谁需求大谁挨饿”,公平性讨论就没了。
回到那个 287.01 亿美元。这个数不是重点,重点是它怎么被拆解和验证。一篇合格的论文至少要说清三件事:收入项里售水和售电各占多少;成本项里输水成本占比多少;把分配方案代回水量平衡后,两座水库的月末蓄水量是否仍在可行区间内。第三件事最容易被跳过,但它恰恰是“结果可信”的唯一证据。如果代回去发现某个月末蓄水量低于死库容,那你的经济效益再漂亮也是不可行解。
5. 易错点:五个最容易在B题上失分的地方
5.1 更新周期凭感觉定成常数
错在哪:直接在假设里写“设模型每月更新一次”,或者“取 30 天为一个调度周期”,然后全程不再讨论。为什么错:题目背景明确强调长期干旱和来水不确定,你的周期如果跟来水不确定性无关,第四问的敏感性分析就没有着力点,评委会认为你没有回应题意。怎么答对:把周期当成要解出来的量,先估计转移矩阵,再模拟连续干旱天数分布,取众数或分位数,并按季节、按水库分开列一张周期表。哪怕最后结论正好是 30 天,你也要把“为什么恰好是 30 天”的推导写出来。
5.2 单位不统一,算出来的水量差三个数量级
错在哪:库容用百万立方米,需求用亿立方米,流量用立方米每秒,发电量用千瓦时,中间不做换算就相加。为什么错:这是最典型的翻车点,而且它不会报错,代码照跑,结果照出,只是数字荒谬。评委看到“年度经济效益 2.87 亿美元”或者“缺水量 4000 万立方米”这种明显不合理的量级,会直接怀疑整篇的可信度。怎么答对:在符号表里给每个变量标单位,所有公式推导前后各做一次量纲检查,代码里用常量做显式换算,比如MAF_TO_M3 = 1.233e9,不要在心里默默乘。
5.3 多目标直接加权成单目标
错在哪:把经济效益和公平性各乘一个权重加起来,变成一个单目标优化问题。为什么错:权重怎么定你说不清,而且一旦加权,帕累托前沿就没了,评委看不到“公平换效益”的边际替代关系,等于把这道题最核心的权衡丢掉了。怎么答对:保留多目标,跑出前沿,再用膝点法或 TOPSIS 选一个方案,并说明选点准则。如果确实要加权,就把权重当敏感性变量,跑一组权重、给一组解,展示结论对权重是否敏感。
5.4 公平性只有形容词没有指标
错在哪:通篇写“我们兼顾了各辖区的公平”,但模型里没有任何一个量能算出公平。为什么错:不可量化的目标等于没有目标,第二问的“解决利益冲突”就成了空话。怎么答对:至少给一个可计算的指标,缺水率方差、基尼系数、最差辖区满意度、加权基尼,任选其一,写清定义、取值范围和取值方向,然后把它放进目标函数或者约束里。指标选哪个不重要,重要的是它出现在模型里而不只是文字里。
5.5 第三问答成一句“减少需求”
错在哪:当水和电都不够时,回答“建议减少用水、提高效率、发展可再生能源”。为什么错:这是政策建议,不是模型答案。题目问的是“你的模型怎么办”,要的是在你的模型框架内可执行的规则。怎么答对:写分层削减规则,按行业优先级排序,农业先削减、工业其次、居民最后;给触发阈值,比如蓄水量低于某个比例时启动第一级削减;用第一问算出的缺口量确定每一级削减多少;最后说明削减后模型的目标值怎么变。规则要能被代回模型跑出数字,否则还是空话。
还有一个隐性易错点,虽然不在上面五条里,但值得单独记住:图表的坐标轴没有单位、图例和正文对不上、帕累托前沿只画点不画坐标含义。这些细节不涉及模型对错,但评委翻论文只有那么点时间,图看不清就直接跳过,你的分析就白写了。
6. 保底做法:交卷前我会强制走一遍的六步清单
走到最后一步,讲讲怎么把上面这些内容落到一篇能在有限时间里交出去、并且不丢基础分的论文上。我带过的队伍里,最常见的失败不是模型想不出来,是想太多然后写不完。所以下面这套流程的核心是“先保结构完整,再谈模型精致”。
| 步骤 | 动作 | 时间占比 | 自检问题 |
|---|---|---|---|
| 1 | 拆四问,画依赖链 | 5% | 四个问题是不是共用一套变量 |
| 2 | 定决策变量、目标、约束 | 15% | 每个约束能不能写成一行不等式 |
| 3 | 挑一个“别人不会算”的量先算 | 20% | 更新周期有没有被算出来 |
| 4 | 主模型求解,拿到可行解 | 30% | 解代回水量平衡后是否可行 |
| 5 | 敏感性分析改参数不改结论 | 15% | 结论方向有没有变,为什么变 |
| 6 | 摘要与图表回头对齐数字 | 15% | 摘要里的每个数图表里能不能找到 |
第 3 步是这套流程里最值钱的一步。任何一道资源分配题,都有一个“看起来是背景、其实是关键变量”的量:这道题是更新周期,换成能源调度可能就是机组启停的最小间隔,换成物流可能是补货周期。你把这个量算出来,论文立刻就有了自己的观点,不再是对题目要求的逐条应付。
第 6 步我要求学生把摘要单独打印出来,拿着它去论文正文里逐句找对应。摘要写“经济效益约 287 亿美元”,正文里必须有一张表或者一段推导给出这个数;摘要写“更新周期按季节分为 10 天、11 天、17 天”,第三部分必须有那张按季节分组的表。找不到对应的句子就删掉或者补上,宁可摘要少写两句,也不要出现文摘不一致。
押题方向上,这类“资源分配 + 多目标 + 不确定性”的骨架复用力很强。流域配水可以换成区域电力调度、应急物资分配、碳排放配额分解、生产线的产能分配,题目换了,你要做的还是那四件事:把不确定性量化成一个可调参数,把公平性写成可计算的指标,把冲突画成帕累托前沿,把不够用时的削减写成可执行的规则。练透一道,等于给后面一类题准备了一个模板。
从那次之后,我每次拿到资源分配类题目,都强制先问自己一句“这个模型多久更新一次”,然后再动笔写任何一个公式。这句话救过我至少两次,因为它逼着我把“不确定性”从背景描述里拽出来,变成模型里一个实实在在的决策变量。希望帮到你。
本文还有配套的精品资源,点击获取