资讯动态

基于Stackelberg博弈的无人机抗干扰信道分配仿真

发布时间:2026/10/21 8:20:40 来源:尧图企业网站定制
无人机边缘计算这几年在通信和物联网方向火得很但实际部署里很容易被忽略的坑是无线链路一旦被恶意干扰所有算力调度和卸载策略全都白搭。这篇内容围绕“基于Stackelberg博弈的无人机边缘计算抗干扰信道分配”展开把模型构建、博弈求解、Matlab仿真实现一次讲透。我手头这个模拟项目X也用上了这套框架跑完最大的感受是如果只把信道分配当成普通优化问题很难抓住干扰节点主动对抗的特性把干扰节点建模成博弈参与者之后问题反而清楚很多也更方便出结果。这篇笔记适合正在做无人机MEC、无线安全、博弈论应用方向的同学参考尤其是需要快速复现并做仿真对比的场景。1. 项目背景与模型定位1.1 无人机边缘计算中为什么要关注抗干扰信道分配无人机边缘计算的基本逻辑是无人机自身算力有限采集的图像、传感数据、控制信息都要通过无线链路卸载到地面边缘节点或基站处理。整个链路里最脆弱、最容易被攻击的环节就是无线传输。如果此时有一个恶意干扰节点在附近不断向目标信道发射干扰信号信噪比会迅速恶化重传次数增加时延上升任务在截止时间内完不成边缘计算能力再强也没有意义。所以抗干扰不能只停留在物理层的扩频、跳频或者发射功率控制。信道分配是一个更高层的资源决策在频谱资源有限、多个无人机同时需要卸载任务、干扰节点又存在的情况下每架无人机该选哪个子信道、用什么功率发送才能让系统整体吞吐量尽量高、时延尽量低。信道分配做得不好即使发射功率再大也会把能量浪费在已经被干扰的信道上。可以打个比方这就像多个人要排队打业务服务窗口有限旁边还有一个不断播放噪音的大喇叭。如果只按先来后到的顺序盲选窗口完全不去预判喇叭会把哪个窗口吵得没法用效率自然很差。信道分配就是提前决定谁去哪个窗口、什么时候去尽量避开噪音干扰。1.2 为什么是Stackelberg博弈而不是普通优化最开始我尝试过直接用集中式优化。把所有无人机的吞吐量加起来加入信道互斥约束和功率约束写成混合整数规划问题用求解器硬解。这种思路在小规模场景下能出结果但有一个致命问题它把干扰节点当成固定环境默认干扰功率是常数。实际上干扰节点是有主观能动性的它会监测无人机的传输行为动态调整干扰功率和干扰信道。固定假设一旦失败整个分配方案在实际中会严重变形。后来也试过普通的非合作博弈模型让所有无人机平行做决策同时让干扰节点也作为普通参与者。这样的模型虽然包含了干扰节点但所有玩家地位对等、同时决策缺少主从顺序容易产生多个低效率的纳什均衡点而且现实中无人机和干扰节点的决策顺序本来就不是同时的无人机先布署信道分配方案干扰节点根据观察到的分配方案再调整干扰策略或者反过来干扰节点先发起干扰无人机再选择躲避信道。Stackelberg博弈正好匹配这种主从关系。项目里把无人机群作为领导者干扰节点作为跟随者。无人机先给出信道分配矩阵干扰节点看到分配结果后在干扰预算和成本约束下选择最优干扰功率分配。无人机在第一步做决策时已经通过反向归纳预判了干扰节点的最佳响应因此能选出对干扰最“免疫”的信道分配方案。这也是“Stackelberg博弈”在这个场景里最大的价值把对抗性、层级性和先动优势全部纳入模型。方法对干扰的建模决策关系均衡/解的概念适用性集中式优化固定参数单层决策全局最优理想场景小、干扰固定普通Nash博弈对等参与者同时决策纳什均衡玩家地位平等Stackelberg博弈主从参与者先后决策子博弈完美纳什均衡/Stackelberg均衡无人机先动、干扰机后动2. 系统建模与博弈求解核心2.1 网络模型与关键假设这个项目的仿真场景我做了如下抽象也是目前无人机边缘计算相关研究里比较标准的建模方式。假设网络内有N架无人机用户每个无人机需要将计算任务卸载到一个装有MEC服务器的边缘基站。频谱被划分为K个正交子信道每个子信道在同一时刻最多分配给一个无人机使用避免用户间互相干扰。存在一个恶意干扰节点它可以在所有子信道上分配自己的发射功率目标就是降低无人机到基站的传输速率。信道增益方面用h(i,k)表示第i架无人机在第k个信道上的信道增益用g(i,k)表示干扰节点到第i架无人机接收端也就是基站端的等效干扰信道增益。这里的信道增益包含了路径损耗、阴影和小规模衰落。为简化模型假设所有信道在一个时隙内块衰落近似不变。无人机选择信道变量用二值矩阵x(i,k)表示x1表示第i架无人机占用第k个信道。符号含义N无人机用户数K子信道数B单信道带宽P无人机发射功率h(i,k)无人机i到基站的信道增益g(i,k)干扰节点到基站的信道增益J(k)干扰节点在第k个信道上的干扰功率N0背景噪声功率β干扰成本系数α无人机发射功率成本系数在研究前期不建议把模型做得太复杂。无人机移动性、非正交多址、多基站协作这些都可以放到后面扩展先把“干扰-信道选择”的核心对抗关系跑通。2.2 干扰机响应与无人机效用求解在第k个信道上无人机i的接收信干噪比可以写成SINR(i,k) (P · h(i,k)) / (N0 J(k) · g(i,k))对应的传输速率为R(i,k) B · log2(1 SINR(i,k))干扰节点的目标很直接尽量压低所有无人机速率的加权和但同时也要付出干扰功率成本。于是干扰机的效用函数可以写成U_J - Σ_i Σ_k x(i,k) · R(i,k) - β · Σ_k J(k)这里的β是一个归一化成本系数。β越大代表干扰节点发射功率越贵它就越不愿意大规模干扰β越小它会更激进地攻击所有信道。由于干扰机的效用函数对J(k)在各个信道之间是可分的给定无人机信道分配矩阵x之后每个信道上的最优干扰功率可以独立求解。对J(k)求偏导并令其等于零可以整理出如下条件Σ_i x(i,k) · (B / ln2) · P · h(i,k) · g(i,k) / [(N0 J(k)·g(i,k)) · (N0 J(k)·g(i,k) P·h(i,k))] β这个方程没有特别简洁的闭式解但很容易用数值工具求根或者直接在区间上最大化U_J。在Matlab里用fminbnd对每个信道分别求最优J(k)就足够。无人机作为领导者在预判到干扰机会按上述规则响应后要最大化自己的效用。无人机群的总效用可以定义为U_U Σ_i Σ_k x(i,k) · R(i,k) - α · Σ_i P · Σ_k x(i,k)这里不加入复杂的切换惩罚和公平性惩罚目的是先把主从博弈逻辑讲清楚。α是功率成本因子主要防止无人机无线以最大功率蛮干。2.3 均衡求解流程与算法设计Stackelberg均衡求解的思路是反向归纳。无人机先假设一个信道分配矩阵干扰机根据这个矩阵计算出最优干扰功率然后无人机再把这些最优干扰功率代入自己的效用重新调整信道分配。两者循环迭代直到信道分配矩阵不再变化。这个问题的难点在于信道分配变量是二值整数无人机效用函数关于x不一定是凸的所以不能用一次凸优化把所有问题解决。实践中我采用的是一轮一轮的启发式交替优化初始化随机生成一个满足每信道至多分配给一个无人机的初始信道分配矩阵。循环执行以下步骤固定当前信道分配矩阵x。对每个信道k求解U_J关于J(k)的最大化得到干扰节点最优响应J*(k)。固定干扰功率向量J*让每架无人机重新选择通信效用最高的信道生成新的信道分配矩阵x_new。比较x和x_new。如果完全一致停止迭代输出当前结果如果达到最大迭代次数则保留历史最优结果。整个算法本质上是在“干扰机反应函数”和“无人机最优响应”之间交替逼近。只要每次迭代都能保证某一方的效用不下降循环就有大概率收敛到局部稳定的Stackelberg均衡点。3. Matlab仿真框架与代码实现3.1 参数初始化与信道生成Matlab仿真的第一步是把整个场景参数化。项目里我习惯把所有参数集中在脚本开头方便批量扫参。N 6; % 无人机用户数 K 8; % 子信道数 B 1e6; % 单信道带宽单位Hz N0 1e-12; % 背景噪声功率单位W P 0.1; % 无人机发射功率单位W alpha 0.05; % 无人机功率成本系数 beta 0.01; % 干扰成本系数 rng(42); % 固定随机种子保证结果可复现 h exprnd(1, N, K); % 生成有用信道增益指数分布对应瑞利衰落下的功率增益 g exprnd(0.8, N, K); % 生成干扰信道增益这里用exprnd的原因值得说明一下。瑞利衰落的包络服从瑞利分布信号功率增益服从指数分布。exprnd生成的随机数正好模拟了无线信道在统计意义上的快衰落特性。如果你希望更真实后面可以加入路径损耗模型按照无人机和基站之间的距离重新计算平均功率再用单位均值的指数分布乘上去。3.2 核心迭代代码干扰机响应求解函数我一般单写一个function文件。为了稳定不需要直接解方程而是对每个信道直接做置信域搜索function J solve_jammer_response(X, P, h, g, N0, B, beta) K size(X, 2); J zeros(1, K); for k 1:K % 干扰机效用 utilityJ (Jk) -sum(X(:, k) .* B .* log2(1 P .* h(:, k) ./ (N0 Jk .* g(:, k)))) - beta * Jk; % 在0到1W范围内搜索最大化干扰机效用的Jk [bestJ, ~, exitflag] fminbnd((Jk) -utilityJ(Jk), 0, 1); if exitflag 0 bestJ 0; % 搜索失败则退化为不干扰 end J(k) bestJ; end end注意fminbnd求解的是最小值所以目标函数取负号。搜索区间上限我通常设为1W实际跑下来干扰功率很少会顶到上限但如果某些信道吞吐量特别高干扰节点会倾向于集中火力攻击单信道。如果你希望约束总干扰功率就不能用这个逐信道独立的版本需要加拉格朗日乘子重新推导。无人机更新信道分配的函数如下function X_new update_channel(X_old, J, P, h, g, N0, B, alpha) N size(X_old, 1); K size(X_old, 2); X_new zeros(N, K); for i 1:N best_k 0; best_u -inf; for k 1:K % 一个信道只分配给一个用户模拟互斥约束 if sum(X_new(:, k)) 1 continue; end SINR P * h(i, k) / (N0 J(k) * g(i, k)); R B * log2(1 SINR); u R - alpha * P; if u best_u best_u u; best_k k; end end if best_k 0 X_new(i, best_k) 1; end end end这种逐用户贪心更新实现起来简单但存在顺序依赖问题。第一个用户优先选走了最好的信道后面用户只能从剩余信道里挑。要缓解这个问题可以在每一轮让用户的顺序随机打乱一次这样能一定程度避免固定顺序造成的偏向性。最后是主循环maxIter 50; X zeros(N, K); randIdx randperm(N); for i 1:N X(randIdx(i), mod(i, K) 1) 1; end for iter 1:maxIter J solve_jammer_response(X, P, h, g, N0, B, beta); X_new update_channel(X, J, P, h, g, N0, B, alpha); if isequal(X, X_new) fprintf(在第 %d 轮收敛\n, iter); break; end X X_new; end跑通这套主循环之后优化才算真正开始。3.3 结果展示与性能分析仿真结果我一般会看三个量总吞吐量、单个无人机最低吞吐量代表公平性以及迭代收敛轮数。在N6、K8、β0.01的参数组合下我的模拟实验结果是大概在4到7轮迭代收敛总吞吐量比随机信道分配高出20%到30%左右。这个提升幅度和信道随机种子有很大关系不同种子可能差距很大所以做实验时一定要多次跑蒙特卡洛取平均。如果只看单次运行的收敛曲线可以每次迭代计算一下当前总速率画成折线。通常前两轮变化剧烈后面逐渐平稳。如果你画出的曲线在几个值之间来回跳说明陷入了信道分配循环需要按第4章里的方法处理。4. 踩坑实录与常见问题排查4.1 均衡不收敛迭代振荡实际仿真里最常遇到的就是迭代不收敛信道分配矩阵在两个或三个状态之间循环。原因很简单贪心更新让一个用户切换信道后会改变干扰机响应干扰机响应变化又会让另一个用户想换信道最终形成循环。我试过几种处理办法最有效的是“历史最优保留”。在每一轮迭代中计算一下当前总吞吐量如果比历史最好值高就存下来最后不管循环怎么振荡直接输出历史最好状态。另一个办法是给信道更新加入随机扰动例如每轮按概率随机允许某个用户换到次优信道相当于模拟退火能跳出循环。还有一种更优雅的做法是改成“柔性更新”。不要直接用二进制0/1矩阵硬切而是维护一个概率矩阵每轮根据效用加权更新概率最后再按概率采样生成信道分配。这样收敛曲线会平滑很多代价是增加了一点计算复杂度。4.2 干扰响应求解失败fminbnd在目标函数不够平滑或者搜索区间不合适时可能返回局部最差结果。我会在正式跑之前先画一下U_J随J(k)变化的曲线确认目标函数在搜索区间内是单峰或者至少有个明显的峰值。如果函数是多峰的网格加细之后取最大峰值对应的点作为初值再用fminbnd局部精修。另一个容易犯的错是把搜索区间设得太大。干扰功率从0到10W时函数前半段可能全是平坦的fminbnd很容易陷在某个无关区域。建议先根据信道增益的典型数值粗算一下SINR随干扰功率的衰减规律再定区间。我的经验是把搜索区间上限设为干扰功率落到SINR低于1时所对应的值通常够用。4.3 组合爆炸与时间复杂度当N和K增大后逐用户贪心更新还能跑但每一轮都要求解K个干扰响应再对N个用户逐个扫描K个信道复杂度是O(NK)乘以导数求解开销再乘上迭代轮数。如果N50、K100跑一轮都可能到秒级。要想提速可以引入匹配算法。每轮固定干扰功率J后把所有无人机的效用算成一个N×K矩阵信道互斥约束可以当成一对一匹配问题用匈牙利算法求解。这一步能显著减少信道分配更新的时间而且解的质量往往比逐用户贪心更高。干扰响应求解也可以简化如果β比较大干扰功率本身很小可以在每个信道网格扫描基础上只搜索几个候选值不要反复调用fminbnd。4.4 信道估计误差与鲁棒性仿真里我们用了完美信道状态信息但实际项目中无人机估计h和g总会有误差。误差会让干扰机算出来的最优响应偏离真实最优也会让无人机信道选择不再最优。轻则性能小幅下降重则信道分配结果和实际需要的完全不一样。处理思路有两种。第一种是保守估计在信道增益上乘一个小于1的安全系数把信道条件估计得差一点再按这个保守值做博弈求解。第二种是蒙特卡洛验证给真实信道加随机扰动看当前信道分配在100次随机扰动下的平均吞吐量如果掉得太多说明这个解对信道误差过于敏感需要重新设计。我在模拟项目X里更常用第二种思路去检验算法的鲁棒性因为操作简单不用重新推导鲁棒博弈模型就能看到大概趋势。5. 仿真实验设计与扩展思路5.1 对比实验设计为了证明基于Stackelberg博弈的分配方法有效至少需要设置三个对照组。第一组是随机信道分配相当于没有任何智能决策这是性能下界参考。第二组是固定信道分配每个无人机固定占用一条预先分配好的信道不随干扰变化这样可以对比“有感知”和“无感知”的差距。第三组是用普通Nash博弈方式迭代求解所有无人机和干扰节点同时更新决策不区分主从顺序。第四组才是本文的Stackelberg策略。我惯用的评价指标有三个平均总吞吐量、最低用户吞吐量也叫公平性指标、平均时延。时延可以通过卸载速率和任务大小估算速率越高时延越低。方案平均总吞吐量最低用户吞吐量平均收敛轮数随机信道分配低低无固定信道分配中中无普通Nash博弈中高中10轮以上Stackelberg博弈高较高4~7轮这个表只是示意性的结论具体数值随信道种子和参数会变但趋势基本稳定Stackelberg模型因为预判了干扰响应总吞吐量通常更优而且给用户带来的公平性也比随机结果好。5.2 下一步可以往哪里扩展现在这套模型把所有无人机打包成一个领导者内部没有竞争。如果场景里无人机分属不同控制方它们之间也存在竞争关系就可以把用户之间的信道争夺建模成子博弈形成上层用户博弈、下层干扰响应的多层博弈结构。另一个扩展方向是三维动态无人机部署。无人机位置变化会导致信道增益变化可以把无人机部署坐标也作为决策变量变成“部署-信道分配-干扰功率”三层Stackelberg模型复杂度更高但更有应用价值。计算卸载也是自然延伸。现在无人机的速率直接影响任务上传时延下一步可以把任务切分比例、本地计算和边缘计算之间的分配同时放进效用函数。这样信道分配不再是单纯追求最大速率而是追求最小化任务处理总时延和能量消耗更贴合实际边缘计算需求。如果状态空间再大传统交替优化跑不动可以用深度强化学习来做在线决策。把干扰节点响应改成环境转移的一部分用DQN或者PPO学信道分配策略这也是目前比较热门的方向。不过不管是强化学习还是博弈论方法最终验证都离不开先把基本Stackelberg仿真跑通。我在实际调试中的体会是一定先把β调大让干扰机成本很高、几乎不干扰先把信道分配逻辑跑通再去缩小β激化对抗否则第一次跑看到大量振荡很难定位是信道分配的问题还是干扰响应求解的问题。最后再分享一个小技巧所有随机信道种子、参数和结果都统一记录在表格里跑蒙特卡洛时不要每次改rng种子否则对比实验的可信度会大打折扣。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑