ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

数学建模竞赛中的配方优化:从水系电解液到多目标决策

数学建模竞赛中的配方优化:从水系电解液到多目标决策 2026认证杯A题的题面发下来那一刻我们队群里的第一反应不是“难”而是“这到底算化学还是算数学”。说实话“水系电解液配方”这六个字乍一看像材料科学的实验课题但真正上手之后你会发现它就是把一个完整的“配方寻优”问题包装在了电化学背景里。无论是离子电导率预测、电化学窗口判断还是成本约束下的多目标优化每一问都能用数学建模的办法打穿。这篇文章我是以参赛者的身份来写的把我们队伍从读题、查文献、建模、优化到拿奖的完整链路复盘一遍。对即将参加认证杯或者其他数学建模竞赛的同学来说这里面的思路可以直接复用对想了解配方优化类赛题如何入门的读者也值得慢慢看。1. 赛题拆解这不是化学题而是一个带约束的多目标优化问题1.1 题目里真正需要数学建模的地方在哪里我们拿到的A题给了这么一条主线水是一种绿色、不可燃的溶剂水系电解液相比有机电解液更安全、成本也更低但水的电化学稳定窗口只有约1.23 V限制了其在高压电池中的应用同时电解液还需具备高离子电导率、低黏度、低温不结晶、环境友好等特点。题面通常会给一组“盐-溶剂-添加剂”的可选清单并在后面设置三到四个小问第一问要求根据已知实验样本建立性能预测模型第二问要求在给定的组分范围内寻找让电导率最高的配方第三问会加入成本和电化学窗口两个目标让你给出综合最优的配方方案如果有第四问往往是针对-20℃低温或者高盐浓度的特殊工况进行延伸分析。如果只看第一问很多队伍会以为这就是回归拟合。但真正拉开差距的是把后面几问当成一个整体来设计框架。我见过有队伍第一问用随机森林第二问用同一批特征网格搜索第三问才临时上多目标优化结果三个问的模型口径不统一最后评委根本看不出你到底有没有理解配方约束。正确做法是先明确所有小问共享同一个“配方变量空间”再统一建模。1.2 水系电解液的“水”到底限制了什么要建模先得清楚水系电解液为什么特殊。水的优势是便宜、安全、不燃但它最大的短板是电化学窗口窄。普通的锂离子电池有机电解液耐压能做到4 V以上水系电解液稍不注意就容易析氢析氧窗口只有1.23 V左右。想扩大窗口一个常用思路就是提高盐浓度让水分子都被锂离子或盐阴离子“锁”在溶剂化壳层里降低自由水的活性。可问题是盐浓度过高溶液的黏度会迅速上升离子迁移反而变慢电导率会下降。这种非单调的关系恰好是数学建模最爱的素材也是最容易让参赛队伍翻车的地方。我自己的理解是这样水系电解液配方很像调一杯鸡尾酒。基酒决定了基本性格但喝起来顺不顺口、后劲大不大取决于几种配料的比例。电压窗口就像酒的度数水本身“度数”低加点高浓度盐可以把“度数”撑上去但如果盐加太多整杯“酒”变得像糖浆一样黏离子跑不动电导率反而下降。建模要做的事就是把这种“多了也不行、少了也不行”的权衡量化出来。1.3 隐藏约束组分和、浓度上下限与溶解度极限很多队伍把配方变量当成普通连续变量来处理这是第一硬伤。电解液配方本质上是一个带约束的混合物设计问题所有组分质量分数加起来必须等于1而且每种组分都有实际溶解度的上下限。比如某盐在混合溶剂里的溶解度就是有限的模型给出一个超过饱和浓度的配方实验上根本配不出来。这类约束如果不写进优化模型最后得到的“最优配方”就只是一个数学符号没有任何工程意义。我的建议是无论是预测模型还是优化模型都要把变量处理成“真实可用”的变量空间。最简单的做法是定义向量 x (x1, x2, …, xn)其中 xi 表示第 i 个组分的质量分数然后强制约束 sum(xi)1 以及 xi_low ≤ xi ≤ xi_high。后面做贝叶斯优化或者遗传算法时所有候选解都必须先过这一道真实性检验。别看这是个很基础的细节判卷时评委一眼就能看出你是不是真正理解配方问题。2. 数据从哪里来特征工程是国奖和优秀奖的分水岭2.1 官方数据不够三类补充方案竞赛给的数据量一般不会太大通常在几十组到两百组之间指望纯数据硬train出一个很深很准的模型并不现实。我们当时做的是三条线并行第一从已发表的学术论文里摘录相近水系电解液体系的实验数据整理成统一格式的表格第二利用电化学中的经验公式生成理论特征比如黏度估算、介电常数估算而不是只用原始的“质量分数”第三对明显不合理或单位不一致的数据做清洗缺失值用物理关系推算。有人担心“抄”文献数据会不会被看作作弊其实不会。建模竞赛本来就是开放数据环境只要你在论文里标注数据来源、筛选标准和清洗过程它反而说明你们的资料收集能力很强。关键是不要堆砌数据要说明哪些文献、为什么选这些数据、数据与题目体系的匹配度如何。我当时在附录里列了一个表格把每篇文章的体系、盐浓度范围、温度范围都标了出来评委很容易就能看出我们对数据做过功课。2.2 从“配方组成”到“物理化学特征”直接拿组分的质量分数喂给机器学习模型模型也能跑但泛化能力通常一般。原因是质量分数是“配料表”而不是“物性”。真正决定电导率的是背后的物理化学量比如有效的电荷载流子浓度、离子迁移速率、溶剂化结构、黏度等。我们构造的输入特征大致包括盐的摩尔浓度、混合溶剂的介电常数、混合溶剂的估算黏度、阳离子半径、醇类或酯类官能团的比例以及温度倒数 1/T。下面这个表格是我们在复现时常用的特征模板。特征名称计算方式物理含义盐摩尔浓度由质量分数、溶剂密度和摩尔质量换算决定可迁移的离子数量混合溶剂介电常数各溶剂介电常数按体积分数加权影响盐的解离程度混合溶剂估算黏度对数混合规则估算影响离子迁移速度和最终电导率溶剂化有效配位数官能团比例与文献配位数加权反映高盐浓度下的溶剂化结构温度倒数1/(t273.15)体现阿伦尼乌斯型温度依赖这套特征最大的好处是把“组分百分数”变成了“有物理单位的量”。举个例子质量分数一样的高氯酸钠和六氟磷酸钾因为摩尔质量不同实际的离子浓度差异很大模型如果只看质量分数就很难区分。但把盐摩尔浓度作为输入模型就有机会学到更真实的规律。特征构造这一步往往决定了模型最终能不能从0.85的R²走到0.93我认为这是普通队和国奖队的第一个分水岭。2.3 数据切分和归一化先切分再标准化提到数据切分很多人会觉得这是基本功但实际操作时最容易翻车。我们第一次做交叉验证时先对全量数据做了标准化然后再随机划分训练集和测试集结果模型在验证集上的表现虚高了不少。原因是标准化时用了测试集的信息相当于数据泄漏。后来我们把顺序纠正过来先切分再在训练集上fit标准化器再对测试集做transform。from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) scaler StandardScaler().fit(X_train) X_train_scaled scaler.transform(X_train) X_test_scaled scaler.transform(X_test)这个细节对气体组分、溶液配方这类强物理约束的问题特别重要。如果数据本身就存在分布偏移错误的标准化的确会让模型看起来很好但实际部署时完全失效。比赛结束后我把这个代码片段反复看了好几遍觉得它比大多数花哨的模型都值得记录。3. 建模思路为什么我们放弃了纯机理模型3.1 从电化学理论到回归模型一个对照实验理论上离子电导率可以写成 σ Σ zi F ci ui其中 zi 是电荷数F 是法拉第常数ci 是离子浓度ui 是离子迁移率。再往深走离子迁移率又和黏度、溶剂化半径、温度相关。这套机理模型看起来很完美但用到实际多组分电解液里就很痛苦因为溶剂化结构、离子对缔合、黏度非线性变化都不是简单公式能描述的。我们起初也尝试建立半经验模型后来发现拟合效果远不如数据驱动模型。于是做了一个系统的对照实验线性回归、岭回归、随机森林、XGBoost、高斯过程回归都用同一套物理化学特征。当时在验证集上大致结果是线性回归 R²约0.82随机森林约0.88XGBoost约0.90高斯过程回归约0.93。这个实验告诉我们在几十到两百个样本的规模下树模型和贝叶斯类模型的性价比明显更高深度学习反而容易过拟合。3.2 高斯过程回归为什么适合配方小样本我们最后选择高斯过程回归作为电导率的代理模型原因有两点。第一高斯过程对样本量的需求不像深度神经网络那么大在几十到两三百个样本下也能给出平滑且合理的预测第二也是最关键的它能输出预测的不确定性也就是均值和方差。这个方差非常有用知道模型对哪些区域没把握在后面的贝叶斯优化里就能主动去探索那些不确定性高的配方区间。打个比方普通回归模型像是一个只告诉你“这条路大概要走30分钟”的导航高斯过程还会告诉你“这个时间误差可能只有5分钟也可能有20分钟因为前面路况未知”。在配方优化这种高代价场景里知道自己不知道比假装知道更有价值。我们后面做优化时代理模型的不确定性直接参与了采集函数的计算让算法在“开发目前看起来好的区域”和“探索没试过的区域”之间自动平衡。3.3 贝叶斯优化怎么用在配方空间有了高斯过程作为代理模型配方搜索就可以走贝叶斯优化。经典贝叶斯优化的大致流程是先随机获取少量初始样本点训练一个高斯过程代理模型然后在候选空间里最大化采集函数比如期望改进量EI选择下一个要评估的点把新样本加入训练集更新代理模型反复迭代。这样做的好处是不需要暴力网格搜索也不需要做大量真实实验就能在较少的模型评估次数下逼近最优配方。# 简化伪代码说明核心逻辑 for i in range(n_iter): # mean, std 来自高斯过程 mean, std surrogate.predict(candidates) ei (mean - best - xi) * norm.cdf(z) std * norm.pdf(z) next_x candidates[ei.argmax()] next_y objective(next_x) surrogate.update(next_x, next_y)这里特别要注意变量空间的定义。配方中有很多组分百分比它们必须满足相加为1的约束。一种做法是用罚函数把约束写进目标函数不满足约束的候选直接给一个很差的适应度另一种做法是先用无约束的参数生成再通过归一化映射到可行域。我们更推荐第一种因为罚函数更透明写论文的时候也更容易解释。3.4 温度维度单独建模还是放进模型题面里如果出现不同温度下的实验数据很多队伍会纠结要不要单独建模。其实两条路都行。单独建模就是每个温度点拟合一个电导率预测模型好处是物理意义清晰坏处是样本被切碎模型统计量不够。把温度作为输入特征放进同一个模型好处是能利用所有数据点温度的影响也由数据自动学出来坏处是模型更容易变得复杂需要小心过拟合。我们当时选了“温度作为输入特征”的方案因为数据里温度范围不大在0℃到60℃之间而且组分的交互效应比温度效应更复杂。建模完成后我们还专门画了一张 ln σ 与 1/T 的阿伦尼乌斯图从图上确认预测曲线在物理趋势上是合理的没有出现“温度升高电导率反而骤降”这种离谱行为。能在论文里放进这一页图价值其实不低于那些复杂的数学公式。4. 多目标优化电导率、电压窗口和成本的三方博弈4.1 目标函数与约束的数学表达到第三问以后题目通常不再要求只把电导率做大而是要在多个性能指标之间做平衡。我们当时把目标拆成了三个最大化离子电导率 σ最大化电化学稳定窗口 ΔV最小化单位体积原料成本 cost。这三个目标的量纲不一样电导率是 mS/cm窗口是 V成本是 元/L不能直接加权求和就算了否则结果会被量级最大的那个目标牵着走。标准做法是先定义Pareto支配关系再用多目标优化算法找到一组互不支配的候选解。约束方面除了组分和为1、组分上下限我们还加了一个电导率不低于某阈值、电化学窗口不低于某阈值的硬性约束。这样优化器不会给出一个“电导率极高但电压窗口只有1.1 V”的不安全配方。其实这类问题非常像工程设计中的多目标寻优数学上不难难的是把每个约束都解释清楚。4.2 为什么选NSGA-II而不是简单加权求和很多没有接触过优化算法的队伍会在这一步选择最简单的加权求和给电导率、窗口、成本分别加一个权重变成单目标优化。这样做不是不行但有两个致命问题一是权重很难凭经验定电导率0.5和成本0.3这两个权重到底代表什么很难说清楚二是加权求和只能得到一个解评委看不到方案的多样性也无法理解为什么放弃另一个可能更好的配方。我们使用NSGA-II理由很简单实现稳定、解释成熟、社区资料多。它通过快速非支配排序把候选解分成不同层再用拥挤度距离保证解集尽可能均匀分布在Pareto前沿上。我们设置的参数是种群规模200迭代400代交叉概率0.8变异概率0.1。用Python的 pymoo 或 geatpy 都能方便调用。最终得到的Pareto前沿是一整个解集而不是孤零零一个点这样论文里画出来的图非常有说服力。4.3 从Pareto前沿到最终决策熵权TOPSIS拿到一组Pareto前沿解之后还需要做决策因为评委要看到一个最终配方。我们用熵权TOPSIS对候选解排序先对三个目标做标准化信息熵大的指标权重稍低信息熵小的指标权重稍高然后计算每个解与理想解、负理想解的距离按贴近度排序。下面是当时候选方案的简化结果方案电导率(mS/cm)电压窗口(V)成本(元/L)综合得分配方A12.62.1850.76配方B11.22.6780.85配方C10.13.0700.81最后我们选了配方B。它不是单项最强的但综合得分最高而且在后续灵敏度分析中表现最稳定。这里想提醒一句多目标优化最后的“选点”不是一个纯粹的数学问题还要结合工程直觉。当时我们额外查了配方B的原料来源确认都不是稀缺材料才最终定下。评委看到这种细节时会更容易相信你们真正理解了问题。5. 论文呈现评委眼里“国奖版”论文长什么样5.1 摘要和问题重述前两页决定大半印象竞赛论文的评委一天要翻几十份论文花在每篇上的时间很有限摘要和问题重述基本决定了第一印象。一份足够好的摘要必须能在五句话内让人知道你们做了什么第一句讲问题背景和核心矛盾第二句说明你们建模的整体思路第三句到第五句分别概括三个小问的方法和关键结果最后再来一句“模型在交叉验证中R²为0.93Pareto最优解相比基准方案电导率提升18%”之类的硬指标。最忌讳的是把摘要写成“本文先后建立了模型一、模型二、模型三”却没有一句具体结果。问题重述也不要照抄题目。很多队伍会把题目原文整段粘过来占了一页纸评委看得很累。我们当时做了个压缩用三句话重新描述“水系电解液配方”的物理背景然后明确说“根据题意我们把问题分解为四个子问题”接着用一个小列表把每个子问题的输入、输出、约束列清楚。这样一来评委能很快确认我们没有偏题也方便他们后面快速定位对应的模型章节。5.2 图表设计的三个说服力细节图表是评委快速判断论文水平的重要信号也是“国奖版”和普通版肉眼可见的差别。第一张必须要有的是预测值与真实值的散点图对角线yx加进去R²标注在角落模型整体好坏一眼就能看出来。第二张是Pareto前沿图横坐标可以是电导率纵坐标可以是成本颜色深度表示电压窗口最后把你选定的最终配方案子用一个五角星单独标出来评委一眼就知道你在多目标解集里是怎么决策的。第三张是灵敏度分析的误差条形图比如把样本量从80%变化到120%看R²误差条的变化。图表不是越多越好而是要每张图都有“一句话就能讲完的信息量”。我们当时删掉了很多看起来炫酷但解释不清的三维图只保留了几张关键的二维图和热力图。热力图展示特征相关性、变量对电导率的影响强度可以帮助评委很快理解你们构造的特征确实有物理依据。这个环节投入产出比非常高同样一份模型图做好看的队伍分数往往高一个档次。5.3 灵敏度分析与模型稳健性评委最担心的一件事就是模型只对给定数据有效换两个点就崩了。为了打消这种质疑我们做了三组分析一是改变训练集和测试集的比例从70/30试到90/10看性能指标波动二是把组分上下限整体上下浮动5%重新跑优化看最优配方是否仍然落在同一区域三是对预测模型做交叉验证输出每个样本的残差分布。只要这三个结果都在合理范围论文的稳健性说服力就上来了。这里有个容易被忽略的小技巧灵敏度分析不只服务于“验证”还可以服务于“解释”。比如我们在做组分上下限浮动时发现某一种共溶剂的比例从10%调到15%最优电导率变化很小。这说明这个组分相对冗余于是我们在分析里明确指出“该组分对电导率的影响不敏感真正敏感的是盐浓度和温度”。这种结论能让评委觉得你们不是只会套模型而是真的理解了体系特性。6. 参赛过程中的踩坑记录与最终心得6.1 我们最严重的失误归一化顺序错误说起来有点丢人但这是我们队伍在比赛第二天犯下的最大错误。当时我们想快速出一个基准结果于是把全量数据读进来之后直接对X做了标准化然后才用交叉验证训练模型。结果随机森林的性能高得离谱R²甚至接近0.99大家还高兴了好一阵。后来我仔细一看标准差缩放器在fit的时候用了所有样本的信息模型在验证集上的“优秀表现”很多是数据泄漏带来的幻觉。发现问题之后我们把流程改成“先切分、再fit、再transform”重跑了一遍R²回落到接近0.93。虽然数字变低了但心里反而踏实了。这里也提醒所有参赛队伍模型的分数不是越高越好而是要能经得起交叉验证和不同的随机种子。评委也许不会去复现你们的每一段代码但一旦在附录里看到数据泄漏这种低级错误整篇论文的可信度都会受到质疑。6.2 单位、温度和溶剂配比三个看着小却能救命的细节这次比赛我们差点在单位上翻车。文献里电导率有的用 mS/cm有的用 S/m两者差了一个数量级温度有的用摄氏度有的用开尔文。如果没做统一模型的特征数据就会混入完全不在一个尺度上的量严重干扰训练。我们当时专门写了一个清洗脚本把所有数据都转成同一单位电导率统一为 mS/cm温度统一为摄氏度浓度统一为 mol/L并在论文附录里放了一份单位换算表。还有一个容易忽略的点是“溶剂比”。有些文献用体积比有些用质量比直接混用会导致同一个配方在不同数据源里算出的浓度不同。我们的处理方法是优先使用质量分数因为质量分数不随温度变化而且与题面常见的“配方配比”一致。如果题目本身给的是体积比我们就在特征构造时先换算成质量分数再建模保证所有数据源口径一致。6.3 给下一届参赛者的工具箱和时间分配建议最后聊一点实战分配。我们队的节奏大概是这样第一天前18小时只做三件事——读题、查文献、列数据需求表第二天到第三天上午处理数据、搭基准模型争取在第二天结束前跑出第一版预测结果第三天下午开始做多目标优化晚上进入论文写作第四天上午集中做灵敏度分析和画图下午留出时间统一排版、检查公式编号和附录代码。整个过程最忌讳的是前三天都在调参数最后一天才发现论文还没开始写。工具方面数据处理用 pandas、numpy机器学习用 scikit-learn高斯过程可以用 scikit-learn 的 GaussianProcessRegressor多目标优化用 pymoo 或 geatpy画图用 matplotlib再配一个如意或者 Overleaf 写 LaTeX 论文。这一套组合足够应对大部分赛题。印象很深的是我们在第四天凌晨改图的时候发现Pareto前沿图因为图例字体太小打印出来几乎看不清临时放大了字重。这种小细节看似不重要但在纸质打印评阅环境下体验影响很大。比赛结束之后回头再看我觉得“国奖版”的核心不是某个神秘算法而是一整套严格的处理流程从物理背景梳理、数据特征构造到模型选择、多目标优化最后再到论文呈现和稳健性分析每一步都有明确的理由和结果支撑。哪怕你们最终没有站上领奖台这种训练带来的思路和习惯才是参赛最值回票价的部分。
返回列表