
1. 项目概述一次从问题到模型的深度实战复盘又到了一年一度的数学建模竞赛季最近在整理资料时翻到了2021年“认证杯”数学中国数学建模网络挑战赛B题的解题文档。这道题当时给我留下了很深的印象它不像一些纯理论推导题那样抽象而是将一个非常具体的现实问题——“分布式无线网络的功率分配优化”——抛给了参赛者。题目要求我们为一个由多个发射节点和接收节点组成的网络设计一套算法在满足所有接收节点最低信噪比要求的前提下使得所有发射节点的总发射功率最小。这本质上是一个典型的带约束的非线性优化问题但它的背景和约束条件非常“接地气”直接关联到通信工程中的核心痛点如何在有限的频谱和能量资源下最大化网络性能或最小化能耗。对于参加过数学建模的同学来说这类问题既熟悉又充满挑战。熟悉是因为优化模型是数模竞赛的常客挑战在于如何将一个工程描述转化为严谨的数学模型如何选择合适的算法进行求解以及如何将求解结果清晰、有说服力地呈现出来。今天我就以这道B题为例完整拆解一遍我们的解题思路、模型构建过程、算法实现细节以及那些“踩过坑”才得来的经验。无论你是正在备赛的新手还是对优化问题感兴趣的同行希望这篇复盘能给你带来一些实实在在的启发。2. 问题重述与核心需求解析拿到赛题后第一步绝不是急着建模型或写代码而是反复精读题目确保完全、准确无误地理解问题的每一个细节。这是避免后续方向性错误的最重要一环。2.1 题目场景与条件梳理2021年认证杯B题描述了一个简化的分布式无线通信网络场景网络拓扑在一个区域内存在多个发射节点例如手机基站、Wi-Fi接入点和多个接收节点例如用户手机、物联网设备。每个发射节点服务于一个特定的接收节点形成一对一的通信链路。但关键在于这些链路共享相同的频段。核心矛盾当多个发射节点同时工作时它们发出的信号对于非目标接收节点而言就变成了干扰。你的信号越强对别人的干扰就越大反之别人的信号也会干扰你的接收。目标与约束首要目标Objective找到一组发射节点的功率值使得所有发射节点的总功率之和最小。这对应着降低网络整体能耗、延长设备电池寿命等实际需求。硬性约束Constraint对于每一对通信链路一个发射节点对应一个接收节点接收端收到的信噪比必须不低于一个给定的阈值。信噪比低了通信质量就无法保证可能会断线、卡顿。已知条件题目通常会给出所有节点之间的路径损耗或信道增益矩阵。这个矩阵描述了信号从任何一个发射节点到任何一个接收节点所经历的衰减强度是建模的基础数据。简单来说这就是一个“戴着镣铐跳舞”的问题你要用最小的“力气”总功率让所有人“听清”各自的目标声音满足信噪比但大家在一个房间里同时说话声音大了会互相干扰。2.2 关键术语与数学模型转化要将上述文字描述转化为计算机能处理的模型需要明确几个关键术语的数学表达发射功率设共有N对通信链路。我们用向量p [p₁, p₂, ..., pₙ]ᵀ 来表示所有发射节点的功率其中 pᵢ ≥ 0。这就是我们的决策变量是需要通过优化求解出来的值。信道增益设 gᵢⱼ 表示从发射节点j到接收节点i的信道功率增益通常是一个小于1的正数代表衰减。那么接收节点i从它的目标发射节点i收到的有用信号功率就是gᵢᵢ * pᵢ。干扰与噪声接收节点i还会收到来自所有其他发射节点j(j ≠ i) 的信号这些全是干扰。总干扰功率为Σ_{j≠i} (gᵢⱼ * pⱼ)。此外还存在环境热噪声设其功率为 σ²。信噪比对于接收节点i其信噪比定义为有用信号功率除以干扰加噪声功率SINRᵢ (gᵢᵢ * pᵢ) / (Σ_{j≠i} (gᵢⱼ * pⱼ) σ²)这里准确说是“信号与干扰加噪声比”。信噪比约束题目要求每个接收节点的 SINR 不低于一个阈值 γᵢ可能所有节点相同也可能不同。即SINRᵢ ≥ γᵢ, for all i 1, 2, ..., N。至此我们可以写出该优化问题的标准数学形式最小化总功率P_total Σ pᵢ满足(gᵢᵢ * pᵢ) / (Σ_{j≠i} (gᵢⱼ * pⱼ) σ²) ≥ γᵢ, for all i且pᵢ ≥ 0, for all i这是一个典型的非线性、非凸的约束优化问题。约束条件是关于 p 的分式形式直接处理起来比较麻烦。2.3 思路破局从分式约束到线性约束直接求解上述模型比较困难。一个关键的技巧是对信噪比约束进行等价变换将其转化为线性形式这是本题建模的核心步骤。将不等式SINRᵢ ≥ γᵢ两边同时乘以分母并移项gᵢᵢ * pᵢ ≥ γᵢ * (Σ_{j≠i} (gᵢⱼ * pⱼ) σ²)进一步整理把所有包含 p 的项移到一边gᵢᵢ * pᵢ - γᵢ * Σ_{j≠i} (gᵢⱼ * pⱼ) ≥ γᵢ * σ²我们注意到Σ_{j≠i} (gᵢⱼ * pⱼ)可以写成Σ_{j1}^{N} (gᵢⱼ * pⱼ) - gᵢᵢ * pᵢ。代入上式并整理可以得到一个更整洁的形式(1 γᵢ) * gᵢᵢ * pᵢ - γᵢ * Σ_{j1}^{N} (gᵢⱼ * pⱼ) ≥ γᵢ * σ²为了写成矩阵形式我们定义矩阵G其元素为 Gᵢⱼ gᵢⱼ。对角矩阵D其第 i 个对角线元素为 Dᵢᵢ (1 γᵢ) * gᵢᵢ。向量u其第 i 个元素为 uᵢ γᵢ * σ²。那么对于所有 i 的约束条件可以合并写为(D - diag(γ) * G) * p ≥ u其中diag(γ)是以 γᵢ 为对角线元素的对角矩阵*表示矩阵乘法。这里的D - diag(γ)*G是一个已知的矩阵记为A。于是原问题被转化为一个线性规划问题如果目标函数是线性的或更一般的线性约束优化问题最小化1ᵀ * p即所有 pᵢ 之和满足A * p ≥ u且p ≥ 0注意这里的“≥”是向量意义上的表示每一个分量都大于等于。这个转化大大简化了问题因为线性约束比非线性分式约束容易处理得多。这是通信中“基于信干噪比约束的功率控制”问题的标准建模方法之一核心在于发现了信干噪比约束在给定增益和阈值下对功率是线性的。3. 模型求解算法选择与实现细节将问题转化为线性约束下的线性目标函数最小化后我们面临几种算法选择。每种选择都有其适用场景和优缺点。3.1 算法选型分析线性规划法思路我们的目标函数和约束都是线性的这完美符合线性规划的标准形式。可以直接调用成熟的线性规划求解器如 MATLAB 的linprogPython 的scipy.optimize.linprog或专业的PuLP、CVXOPT库。优点实现简单代码量少。求解器非常成熟、稳定能保证找到全局最优解如果存在。缺点对于大规模问题节点数成百上千通用线性规划求解器的效率可能不是最高的。但在数模竞赛规模通常节点数在几十个下这完全不是问题。我们的选择在数模竞赛有限的时间内追求稳定、可靠、易实现是第一要务。因此我们首选了线性规划法作为核心求解方案。迭代分布式算法思路在通信领域针对这类功率控制问题有一种经典的分布式算法如基于定价的算法或迭代注水算法。其核心思想是每个节点根据当前网络干扰情况独立地、迭代地调整自己的功率。优点分布式计算不需要中央控制器更符合“分布式网络”的题设背景。物理意义清晰。缺点需要证明算法的收敛性实现起来比直接调用求解器稍复杂。对于竞赛而言增加了不必要的风险。我们的策略我们将其作为备选方案和模型验证手段。即用线性规划求出一个解后可以用分布式算法的思想去验证这个解的合理性或者在模型分析部分进行讨论体现思维的深度。凸优化工具包思路虽然我们转化后是线性规划但它本质上也是一个凸优化问题。可以使用 CVXMATLAB或 CVXPYPython这样的凸优化建模工具。优点书写模型非常直观几乎和数学公式一一对应。缺点需要安装额外的工具包在有些竞赛环境中可能受限。对于简单的线性规划有点“杀鸡用牛刀”。我们的看法如果团队对 CVX 很熟悉这是一个非常优雅的选择。但我们当时更倾向于使用更基础、更通用的linprog以确保在任何环境下都能运行。3.2 基于线性规划的MATLAB实现详解我们最终采用 MATLAB 的linprog函数进行求解。下面详细解释代码和关键点。% 假设已有以下输入数据 % N: 链路数量发射-接收对的数量 % G: N x N 矩阵路径损耗增益矩阵 (g_{ij}) % gamma: N x 1 向量每个链路要求的最低信噪比阈值 % sigma2: 标量噪声功率 % 1. 构造线性规划的参数 f ones(N, 1); % 目标函数系数最小化 sum(p_i)即所有元素为1的向量 % 2. 构造不等式约束矩阵 A 和向量 b % 约束形式A * p b (但我们需要的是 A * p u所以两边乘以-1) % 即-A * p -u D diag((1 gamma) .* diag(G)); % 对角矩阵D A_ineq D - diag(gamma) * G; % 计算矩阵 A D - diag(gamma)*G u gamma * sigma2; % 约束下界向量 % 对于 linprog需要将约束写成 A_ineq * p b_ineq 的形式 % 我们的约束是 A_ineq * p u等价于 -A_ineq * p -u A -A_ineq; b -u; % 3. 变量下界约束 (p 0) lb zeros(N, 1); % 4. 调用线性规划求解器 options optimoptions(linprog, Display, iter, Algorithm, dual-simplex); [p_opt, fval, exitflag, output] linprog(f, A, b, [], [], lb, [], [], options); % 5. 结果检查与后处理 if exitflag 0 fprintf(求解成功\n); fprintf(最小总功率为%.4f\n, fval); fprintf(各节点最优功率分配为\n); disp(p_opt); % 验证信噪比约束是否满足 p p_opt; SINR_achieved zeros(N, 1); for i 1:N signal G(i,i) * p(i); interference sum(G(i, :) .* p) - G(i,i)*p(i); % 总接收功率减去有用信号 SINR_achieved(i) signal / (interference sigma2); end fprintf(实际达到的信噪比\n); disp(SINR_achieved); fprintf(要求的最低信噪比\n); disp(gamma); % 检查是否所有约束都满足考虑数值计算误差 tolerance 1e-6; if all(SINR_achieved gamma - tolerance) fprintf(所有信噪比约束均满足\n); else fprintf(警告部分信噪比约束未严格满足可能处于临界状态或数值误差。\n); end else fprintf(求解失败退出标志%d\n, exitflag); fprintf(可能原因问题不可行给定的gamma要求太高即使功率无穷大也无法满足\n); end关键点解析与注意事项约束形式的转换linprog默认处理A*x b的不等式约束。我们的约束是A_ineq * p u因此必须通过两边同乘以 -1 来转换。这是最容易出错的一步务必仔细核对不等式方向。算法选择optimoptions中我们指定了‘dual-simplex’算法。对偶单纯形法在处理只有不等式约束和边界约束的问题时通常效率很高且数值稳定。也可以尝试‘interior-point’内点法对于大规模问题可能更快。结果验证求解后一定要验证约束是否满足由于浮点数计算存在精度误差理论上满足约束的解在实际计算中可能略有偏差。我们计算实际达到的 SINR并与阈值比较。设置一个小的容差如1e-6来判断是否满足这是一个严谨的做法。问题可行性如果exitflag为负值特别是 -2表示问题不可行。这意味着题目给定的信噪比阈值gamma和信道条件G下不存在一组有限的功率能使所有链路同时满足要求。这时结论应该是“在当前条件下无解”并可以进一步分析例如哪个链路的gamma过高或者网络干扰过于严重。在竞赛中能分析出“无解”的原因并给出建议如降低某个链路的速率要求、增加节点间距等同样是出色的答卷。3.3 分布式算法作为验证与拓展为了丰富论文内容我们简要实现了一个基于标准干扰函数的迭代算法用于对比验证。其更新公式为p_i^{(k1)} min{ P_max, (γ_i / g_{ii}) * (Σ_{j≠i} g_{ij} p_j^{(k)} σ²) }其中P_max是功率上限题目未指定时可设为一个大数。这个公式直观理解是下一时刻的功率刚好是满足自身信噪比要求所需的最小功率基于上一时刻其他节点的干扰情况。迭代直到功率向量收敛。% 简化的分布式功率控制迭代算法 function p_dist distributed_pc(G, gamma, sigma2, max_iter, tol) N size(G,1); p ones(N,1); % 初始功率全设为1 for iter 1:max_iter p_old p; for i 1:N interference 0; for j 1:N if j ~ i interference interference G(i,j) * p(j); end end p(i) (gamma(i) / G(i,i)) * (interference sigma2); end % 检查收敛性 if norm(p - p_old, 2) tol fprintf(分布式算法在 %d 次迭代后收敛。\n, iter); break; end end p_dist p; end将分布式算法得到的结果p_dist与线性规划的结果p_opt进行比较。通常情况下如果问题有唯一解它们应该收敛到相同或非常接近的点。分布式算法的结果可以作为线性规划解的一个有力佐证表明我们的模型和求解是合理的。在论文中我们可以展示两种方法的结果对比表格并讨论其一致性。4. 灵敏度分析与模型深化在得到基本的最优功率解后一个优秀的数模论文不能止步于此。需要进行深入的灵敏度分析探讨模型参数变化对结果的影响这能极大提升论文的深度和广度。4.1 关键参数影响分析我们主要分析两个参数信噪比阈值 γ和噪声功率 σ²。信噪比阈值 γ 的灵敏度分析操作保持其他参数不变逐步增加所有链路的 γ例如从 5dB 线性增加到 15dB观察最小总功率的变化。预期结果与解释总功率P_total会随着 γ 的提高而单调递增且通常增长得越来越快。这是因为要对抗固定的干扰提升信噪比需要指数级增加信号功率从香农公式C B*log2(1SINR)可直观理解SINR 在 log 内。我们可以绘制P_total关于γ的曲线并计算其导数或弹性定量描述其增长趋势。在论文中可以指出“网络对信噪比要求非常敏感当 QoS服务质量要求提升10%时总功耗可能需要增加超过20%这为网络节能设计提供了重要参考。”噪声功率 σ² 的灵敏度分析操作改变 σ² 的值模拟环境噪声的变化观察最优功率分配的变化。预期结果与解释σ²增大意味着环境更“嘈杂”为了达到同样的 SINR所有节点都需要增加功率。总功率P_total与σ²近似呈线性增长关系。分析这一点可以说明在噪声较大的环境中如工厂、郊区网络能耗天生更高。4.2 “可行性区域”探索这是本题一个非常出彩的拓展点。我们之前提到问题可能“不可行”。那么对于一个给定的信道矩阵G和噪声σ²是否存在一个γ的可行域呢思路我们可以尝试寻找使问题可行的最大公共信噪比 γ_max。即假设所有链路要求相同的 γ通过二分法或扫描找到最大的 γ 值使得线性规划问题仍有解exitflag 0。实现固定 G 和 σ²从一个较小的 γ 开始此时肯定可行逐步增加 γ直到求解器返回“不可行”。这个临界点γ_max就是该网络能支持的最高统一服务质量水平。意义这个γ_max是网络的一个固有容量指标。它由网络拓扑G 矩阵决定。我们可以比较不同网络布局如节点密集部署 vs. 稀疏部署下的γ_max从而得出“网络规划建议”为了支持更高的数据速率对应更高的 γ节点之间应保持足够的距离以减小干扰即降低 G 矩阵中非对角线元素的值。4.3 引入功率上限的模型变体原题未限制单个节点的最大发射功率。在实际中设备功率总是有上限的。我们可以轻松地扩展模型在约束中加入p_i ≤ P_max。这只需在linprog中增加上界约束ub P_max * ones(N,1)即可。分析加入功率上限后的影响可行性进一步受限可能因为某个“劣势”节点信道条件差、受干扰大即使以最大功率发射也无法达到要求的 γ导致整个问题不可行。资源分配公平性问题凸显当总功率最优解要求某个节点功率超过P_max时在硬上限约束下系统必须“牺牲”这个节点无法满足其 QoS或者重新调整所有节点的功率可能不再是全局最优而是一个“满足功率上限下的最优”。这可以引申到“网络接入控制”和“资源调度”的讨论。5. 论文写作要点与常见陷阱数学建模竞赛是“建模求解写作”的综合比拼。清晰的表达和专业的呈现至关重要。5.1 论文核心章节组织建议问题重述与分析用自己的话精炼概括问题并画出网络拓扑示意图。明确决策变量、目标函数、约束条件。模型假设与符号说明列出清晰的符号表。假设可以包括信道增益在优化期间不变、各节点噪声功率相同且恒定、忽略快衰落等。合理的假设能简化模型体现思考。模型建立与转化这是核心。详细展示如何将信噪比约束从分式转化为线性不等式的推导过程。这是体现数学功底的关键部分。模型求解说明选用线性规划的理由给出完整的算法步骤流程图并附上关键的代码片段如核心的linprog调用部分。展示计算结果包括最优总功率、各节点功率分配列表。结果分析与验证验证计算并列出每个节点在实际功率分配下达到的 SINR与阈值对比证明约束满足。灵敏度分析展示 γ 和 σ² 变化对总功率的影响曲线并给出合理解释。可行性分析汇报找到的γ_max并讨论其意义。对比分析将线性规划结果与分布式迭代算法的结果进行对比验证解的有效性。模型评价与推广总结模型的优点转化巧妙、求解高效、结果清晰指出缺点假设信道静态、未考虑业务优先级等并提出可能的改进方向如考虑随机信道、动态业务、多载波等。5.2 实操中的常见“坑”与应对策略数据维度错误信道增益矩阵G是 N×N 的gamma是 N×1 的。在构造矩阵A时diag(gamma) * G和D的维度必须匹配。务必使用size()函数检查中间变量的维度。约束方向弄反这是最致命的错误。一定要反复核对linprog要求的约束形式A*x b与自己推导出的不等式A_ineq*p u之间的转换关系。一个简单的检查方法是假设一个非常小的功率向量p_test代入原始 SINR 公式和转化后的线性不等式看是否同时成立或不成立。忽略问题可行性直接假设问题有解。当求解失败时要能分析原因并在论文中讨论“无解”的物理意义和现实对应这往往是加分项。结果分析流于表面只给出最优功率值就结束了。必须进行验证、灵敏度分析并解释每个数字背后的物理或工程含义。例如“节点3的功率最高是因为它距离自己的接收端最远g_33小且受到邻居节点2的强干扰g_32大”。代码与描述脱节论文中描述的算法步骤和实际代码应对应。核心参数如容差tol、最大迭代次数应在论文中说明。将关键代码以整洁的格式放入附录。图表不规范灵敏度分析曲线图应有清晰的坐标轴标签、单位、图例。功率分配结果可以用条形图直观展示。所有图表都应有编号和标题并在正文中引用说明。回顾这道2021年的B题它完美地诠释了数学建模如何将工程问题抽象为数学问题并利用优化理论求解。从看似复杂的干扰描述到巧妙的线性转化再到稳健的线性规划求解和深入的灵敏度分析整个过程是一条逻辑严密的链条。在竞赛中我们小组正是沿着这条思路稳扎稳打最终获得了不错的成绩。希望这份详细的拆解能帮助你下次面对类似优化问题时心中更有章法下笔更有神。建模之路关键在于多想一步多验一遍多挖一层。