电工杯数学建模竞赛解题复盘:储能优化与无人机通信的资源调度模型

📅 2026/8/22 20:22:11
电工杯数学建模竞赛解题复盘:储能优化与无人机通信的资源调度模型
1. 项目概述一次竞赛解题思路的深度复盘又到了一年一度的“电工杯”全国大学生电工数学建模竞赛2022年的赛题AB题相信很多参赛的同学和指导老师都还记忆犹新。作为一项在电气、自动化、信息交叉领域极具分量的赛事电工杯的题目向来以“工程背景强、数学建模巧、解决方案实”而著称。今天我不打算再复述一遍题目原文而是想从一个“过来人”的视角对当年AB两题的解题思路进行一次彻底的、手术刀式的拆解。这不仅仅是对过去题目的回顾更是一次建模思维和工程问题解决方法的深度训练。无论你是即将参赛的新手还是对数学建模、数据分析感兴趣的从业者我相信这种从问题本质出发到模型构建再到求解验证的完整逻辑链条其价值远超几行代码或一个最终答案。2022年的A题和B题分别聚焦于“高比例风电电力系统储能运行优化”和“5G网络环境下超密集组网的无人机辅助通信优化”这两个前沿热点。表面上看一个偏向传统电力系统的新能源消纳一个偏向新兴通信网络的资源调度领域迥异。但剥开技术外壳其内核都是典型的“资源受限下的多目标优化问题”。解题的关键不在于你掌握了多么高深的算法而在于你能否将模糊的工程描述精准地转化为数学语言并找到贴合场景的求解路径。接下来我将分题解析不仅告诉你“可以怎么做”更重点剖析“为什么要这么做”以及“在实际操作中容易在哪里翻车”。2. A题思路拆解电力系统储能优化的建模实战2.1 核心问题与场景理解A题的背景是含有高比例风电的电力系统由于风电出力的随机性和波动性给电网的功率平衡带来了巨大挑战。题目要求我们配置一定容量的储能系统并制定其运行策略以平抑波动、跟踪计划出力并兼顾经济性。这本质上是一个随机优化或鲁棒优化问题因为风电出力是未来不确定的。很多新手拿到题目的第一反应是去搜“储能优化”的论文然后套用现成的模型。这往往会导致模型与题目细节脱节。我们的第一步必须是“咬文嚼字”地理解题目设定的所有边界条件风电预测误差的分布特性是什么储能的充放电效率、功率上限、容量上限是多少考核的目标是波动最小化、跟踪误差最小化还是总成本最小化或者是多目标组合题目中“计划出力曲线”是给定的这意味着我们的优化是在一个已知的“调度指令”下进行的储能的任务是弥补风电实际出力与计划值之间的偏差。注意这里最容易犯的错误是忽略时间尺度。题目通常给出的是时序数据比如15分钟一个点这意味着你需要建立的是一个多时段时序优化模型决策变量是每个时段的储能充放电功率。模型必须包含储能的“状态”转移方程即当前时刻的储能电量等于上一时刻电量加上本时段净充入电量考虑效率损耗。2.2 模型构建的核心选择与权衡明确了问题接下来就是建模。这里有几个关键选择点每一个都直接影响到模型的复杂度和求解可行性。1. 目标函数设计单目标还是多目标题目通常隐含多个优化目标如减小功率波动、降低跟踪误差、减少储能动作次数延长寿命、降低运行成本等。一个稳妥的策略是采用主目标法将一个最重要的目标如计划跟踪误差的平方和作为主目标函数将其他目标如储能充放电功率变化率转化为约束条件例如限制相邻时段功率变化不超过某个阈值。如果题目明确要求多目标则可以采用加权求和法将多目标转化为单目标但权重的选择需要灵敏性分析来佐证或者采用帕累托前沿求解法但这会大大增加计算和论文写作的难度。2. 不确定性处理随机规划、鲁棒优化还是场景法风电出力不确定这是核心难点。有三种主流思路场景法Scenario-Based Stochastic Programming这是最常用、也相对容易实现的方法。根据风电预测误差的历史数据或分布特性生成大量可能的未来风电出力场景例如用蒙特卡洛模拟生成几百条风电出力曲线。然后构建一个两阶段或机会约束规划模型使得在所有这些场景下系统的期望性能最优或满足约束的概率最高。这种方法直观但计算量随场景数增加而剧增。鲁棒优化Robust Optimization不假设具体的概率分布只设定风电出力在一个不确定集合内波动例如预测值±某个百分比。优化目标是寻求一个在最坏情况下worst-case仍然可行的策略。这种方法得到的策略非常保守但可靠性高。需要精心定义不确定集合否则结果可能过于悲观。模型预测控制MPC滚动优化这是一种在线策略。在每个时刻利用最新的风电超短期预测信息对未来有限时域如未来4小时进行优化只执行当前时刻的决策然后到下一时刻重新滚动优化。这种方法能有效利用更新的信息更贴近实际工程应用但对编程和模型实时求解能力要求较高。对于电工杯这类竞赛场景法是平衡了模型深度和实现难度的首选。你需要在论文中详细描述场景生成的方法如基于历史误差分布的自举抽样法并展示不同场景数对结果稳定性的影响。3. 约束条件梳理一个都不能少这是模型是否严谨的试金石。必须包含的约束有储能系统运行约束功率上下限-P_discharge_max P_ess(t) P_charge_max容量上下限E_min E_ess(t) E_max状态转移E_ess(t1) E_ess(t) (η_charge * P_charge(t) - P_discharge(t)/η_discharge) * Δt注意充放电效率通常不同且充放电功率应为非负变量通过引入0-1变量或互补约束处理不能同时充放电的逻辑。系统功率平衡约束P_wind(t) P_ess(t) P_plan(t)假设不考虑其他电源。这里P_ess(t)为正表示放电为负表示充电。其他约束如储能的初始和终止电量约束通常要求相等即循环使用、爬坡率约束等。2.3 求解算法与编程实现要点模型建立后它通常是一个**混合整数线性规划MILP或混合整数二次规划MIQP**问题如果目标函数是平方误差。求解工具的选择至关重要。1. 求解器选择MATLAB YALMIP/OPTIMIZATION TOOLBOX 求解器这是最经典的组合。YALMIP是一个强大的建模语言让你可以用非常直观的方式描述优化问题然后调用后台的求解器如Gurobi, CPLEX, MOSEK来求解。对于学生Gurobi和MOSEK有免费学术许可。MATLAB自身的intlinprog和quadprog也能处理中小规模问题。Python Pyomo/PuLP 求解器Python生态同样强大。Pyomo功能与YALMIP类似PuLP更轻量。结合Gurobi、CPLEX或开源的CBC求解器是另一种高效选择。Lingo对于特别擅长Lingo的同学它也能直接求解这类优化模型但其语言相对封闭调试和复杂数据处理不如前两者方便。2. 编程实操中的“坑”索引混乱时序模型涉及大量时间索引t。务必在代码开头明确定义时间集合T 1:NT所有变量和参数都基于此索引。使用向量化操作代替循环能极大提升代码效率和可读性。单位统一功率单位MW、kW、时间单位小时、15分钟、能量单位MWh、kWh必须全程统一。一个常见的错误是功率乘以时间间隔Δt时忘记将Δt从分钟转换为小时导致能量计算结果差60倍。求解失败处理模型可能因约束冲突或无界而求解失败。首先检查约束的数学表达式是否与代码一致。其次尝试逐步放松约束找到冲突点。使用求解器提供的infeasibility report不可行报告功能它能指出最可能导致冲突的约束。结果可视化与分析求解完成后不能只给出一个最优值。必须绘制关键曲线进行对比分析例如风电计划出力、实际出力、储能出力、等效总出力的时序对比图。储能SOC荷电状态随时间变化曲线。不同场景下或不同权重下的目标函数值对比表格。灵敏性分析改变储能容量、功率上限观察目标函数的变化趋势并给出经济性分析。实操心得在正式求解大规模场景法模型前务必先用一个确定性模型即假设风电预测100%准确进行测试。这个简单模型应该能快速求解并得到一个合理的结果例如储能平滑地充放电以跟踪计划。这能验证你模型基本框架和代码的正确性。之后再引入场景数据进行随机优化。3. B题思路拆解无人机辅助通信的优化博弈3.1 问题本质动态网络中的资源协同调度B题将我们带入5G超密集组网和无人机通信的领域。题目核心是在用户分布动态变化、业务需求各异的区域如何部署有限的无人机作为空中基站并为它们分配合适的频谱、功率等资源以最大化网络总容量或满足率同时保证公平性和无人机能耗限制。这个问题比A题更“立体”。它包含了三维空间部署优化无人机位置、无线资源分配优化信道、功率以及用户关联优化每个用户连接哪个无人机/地面基站。这三者相互耦合无人机位置影响信道质量信道质量影响资源分配策略而资源分配的结果又可能反过来指导无人机调整位置。这是一个典型的**混合整数非线性规划MINLP**问题且非凸求解非常困难。因此解题的通用思路是解耦与迭代。将原问题分解为几个相对容易的子问题通过交替迭代求解来逼近全局较优解。一个经典的框架是固定无人机位置优化用户关联和资源分配然后根据当前的关联和资源状态优化无人机位置如此反复。3.2 分步建模与关键模型详解1. 通信模型建立从香农公式开始一切分析的基础是无线信道模型。必须根据题目给出的参数无人机高度、用户位置、载频、路径损耗模型等计算每个用户-无人机对之间的信道增益h_{i,j}。然后基于香农公式用户i从无人机j获得的可达速率约为R_{i,j} B * log2(1 (P_j * h_{i,j}) / (N0*B I_{i,j}))其中B分配给该用户的带宽。P_j无人机j的发射功率。N0噪声功率谱密度。I_{i,j}用户i从其他无人机同频干扰受到的干扰总和。这是超密集组网的核心挑战之一。2. 用户关联与资源分配子问题假设无人机位置固定这是一个经典的无线资源管理问题。目标通常是最大化加权和速率或满足比例公平。变量包括二元变量x_{i,j}用户i是否关联到无人机j、连续变量P_j功率、B_{i,j}带宽。难点x_{i,j}是整数变量且目标函数中包含log2(1SINR)这种非线性项与功率、带宽变量耦合。常用简化/求解技巧关联决策可以先基于最大接收信号强度RSRP或最大信干噪比SINR进行初始关联将其固定然后优化资源分配。资源分配在关联固定的情况下功率和带宽分配可以建模为凸优化或几何规划问题经过变量替换可以使用拉格朗日对偶法、注水算法等高效求解。对于竞赛可以采用分数规划或连续凸近似的方法将非凸问题转化为一系列凸子问题迭代求解。干扰处理为了简化题目有时会假设通过正交频分复用OFDM完全消除小区内干扰只考虑小区间干扰。这时干扰I_{i,j}主要来自使用相同频率资源块的其他无人机。可以通过干扰图、图着色算法来进行频率复用规划减少干扰。3. 无人机部署位置优化子问题在用户关联和资源分配策略已知的情况下优化无人机位置以进一步提升网络性能。这可以看作一个设施选址问题或聚类中心优化问题。目标最小化所有用户到其服务无人机的加权距离或路径损耗或者最大化最差用户的信道质量。方法梯度下降法如果目标函数关于无人机位置可导例如最小化总路径损耗可以计算梯度进行迭代更新。但实际信道模型复杂梯度可能难以解析求出。粒子群优化PSO/遗传算法GA这是竞赛中最实用的方法。将每个无人机的位置坐标编码为粒子或基因以网络总容量或用户最低速率为适应度函数通过迭代寻找最优位置。这类元启发式算法能很好地处理非凸、不可导的问题。K-means聚类一个非常有效的初始解生成方法。将用户的三维坐标考虑地面用户其z坐标固定进行聚类聚类中心可以作为无人机的初始水平位置。高度则可以单独作为一个优化变量或根据覆盖半径和路损模型设定一个经验值。3.3 算法集成与仿真评估框架将上述子问题整合成一个完整的算法流程是B题建模成功的关键。1. 整体迭代算法设计一个可行的主循环如下初始化使用K-means确定无人机初始位置基于距离进行初始用户关联。固定位置优化资源在当前位置下采用凸优化或启发式方法优化功率和带宽分配计算当前网络总速率R_current。固定关联与资源优化位置以当前用户关联关系或关联权重和资源分配结果为输入使用PSO/GA优化无人机位置。这里的目标函数可以是“在现有资源分配策略下移动位置后根据信道模型重新计算的理论速率”但更严谨的做法是将位置变化后重新执行一次步骤2的资源分配微调。判断收敛比较优化前后的网络性能提升或无人机位置变化幅度。若小于阈值则结束否则用新位置更新返回步骤2。2. 仿真平台搭建强烈建议使用MATLAB或Python进行全流程仿真。需要编写的模块包括场景生成器随机生成符合题目要求的用户分布如泊松点过程。信道计算模块输入位置输出路径损耗和信道增益。资源分配算法模块实现固定的功率/带宽优化算法。位置优化算法模块实现PSO或GA。性能评估模块计算区域频谱效率、用户平均速率、5%边缘用户速率、公平性指数如Jain‘s Fairness Index等关键指标。3. 对比基准与结果分析为了体现所提算法的优越性必须设置合理的对比基准例如静态均匀部署无人机在区域上空均匀网格状分布。仅K-means部署只用聚类确定位置不进行后续资源优化。传统迭代算法与你的改进算法进行对比例如你改进了PSO的惯性权重更新策略。 分析结果时不仅要看总容量更要关注用户速率分布的累积分布函数CDF图它能清晰展示算法对边缘用户性能的改善程度。踩坑实录在B题仿真中最耗时的部分往往是信道增益矩阵的计算用户数×无人机数。务必使用矩阵运算代替双重循环这在MATLAB和PythonNumPy中能带来成百上千倍的加速。另外元启发式算法PSO/GA的参数种群大小、迭代次数需要调参。参数太小容易陷入局部最优太大则计算时间过长。一个技巧是先在小规模场景上调参再将参数应用到大规模场景。4. 通用建模竞赛心法与论文写作要点无论是A题还是B题抑或是其他任何建模赛题其底层心法是相通的。除了具体的模型和算法如何在有限时间内完成一篇逻辑清晰、内容扎实的论文往往决定了最终成绩。4.1 从审题到模型建立的思维流程精细化审题至少30分钟用笔划出题目中的所有名词、条件、数据、目标。为每个术语建立清晰的数学符号。思考每个条件背后对应的数学约束是什么。明确题目最终要求输出的答案形式是曲线、表格还是一个具体的策略。问题重构与简化将复杂的工程问题用一句话概括其数学本质。例如A题是“含随机变量的多时段线性/二次规划”B题是“混合整数非凸规划”。基于这个本质搜索相关的经典模型如机组组合、设施选址、资源分配。然后根据题目具体条件对经典模型进行“剪枝”或“嫁接”完成简化。模型假设的艺术合理的假设是简化问题的关键但必须明确列出并说明其合理性。例如“假设风电预测误差服从正态分布”、“假设无人机与用户之间的视距传输概率为100%”。好的假设应该在保证模型核心逻辑成立的前提下极大降低求解难度。求解路径规划在动笔写模型之前就要想好“这个模型我打算用什么方法、什么工具来解”如果发现规划的求解路径过于复杂可能需要返回上一步重新调整模型或假设。4.2 论文写作的结构化呈现一篇好的数模论文读起来应该像一个引人入胜的技术故事。摘要这是论文的“脸面”。采用“总-分-总”结构。第一句概述问题与方法。然后用“针对问题一我们建立了…模型采用了…方法得到了…结果”的句式分点简述每个问题的解决方案和核心结论。最后一句总结全文亮点。摘要里不要出现公式和图表引用尽量用文字概括。问题重述与分析不要照抄题目要用自己的语言重新组织描述并加入自己的初步分析点明问题的难点和关键点。这体现了你对题目的消化理解。模型假设与符号说明假设要清晰编号。符号说明建议使用三线表列明符号、含义、单位让评委一目了然。模型建立与求解这是核心章节。建议按子问题或模块划分小节。每个小节内部遵循“模型描述 - 数学公式 - 求解方法 - 结果展示”的逻辑。公式要居中、编号重要公式下方可配以简要的文字解释。在描述算法时可以结合流程图来展示整体步骤。模型检验与灵敏度分析这是区分优秀论文的关键。模型结果好不好需要多角度检验稳定性分析改变初始值、随机种子看结果是否稳定。参数灵敏度分析有策略地改变模型中的关键参数如储能容量、无人机数量观察目标函数的变化趋势并用图表清晰展示。分析其经济学或物理学含义。对比实验与基线方法或简单策略进行对比用数据证明你模型的优越性。模型评价与推广客观评价自己模型的优点创新点、贴合实际和缺点简化假设带来的局限、计算复杂度等。并提出几个可行的改进方向或推广到其他场景的可能性。4.3 团队协作与时间管理实战建议三天时间分秒必争。一个经典的节奏是第一天上午深入讨论确定核心思路和大致模型框架。完成问题重述、假设和符号说明。第一天下午至第二天全天主力编程手开始实现核心模型和算法并调试。其他队员开始撰写模型的建立部分并搜集结果分析所需的图表素材。务必在第二天结束前得到第一版可运行的结果即使它很粗糙。第三天上午集中进行灵敏度分析、对比实验完善所有图表。同时论文写作同步进行到模型检验部分。第三天下午整合所有内容撰写摘要、优缺点、推广部分。进行全文通读、格式调整、错别字检查。最后3小时专注于摘要的精修和论文的最终排版。摘要至少要留出1小时反复打磨。个人血泪教训永远不要追求“完美模型”。在竞赛中一个80分但完整、逻辑自洽的模型远胜于一个停留在纸面上100分却无法实现或来不及写完的“完美”模型。先建立一个最简单的版本V0.1让它跑通得到一些结果。然后在此基础上逐步增加复杂度V0.2 V0.3。这样即使最后时间不够你也有一份完整的、有结果的论文可以提交。最危险的做法是前期纠结于细节最后一天才发现模型根本解不出来或程序bug百出。编程和写作必须并行写作不能等到所有结果都完美了才开始。