目录
1.前言
认知无线电(CR)中的频谱共享问题本质是主用户(PU, Primary User)与次用户(SU, Secondary User)之间的资源博弈。主用户拥有授权频谱并希望通过定价机制获得收益,次用户则希望以最低代价获得最大传输速率。这种"领导者-跟随者"的非对称决策结构非常适合用Stackelberg博弈建模。然而,主用户的定价策略空间是连续高维的(每个SU对应一个价格),传统数学优化难以处理。因此引入鲸鱼优化算法(WOA, Whale Optimization Algorithm)作为外层优化器,模拟座头鲸的气泡网捕食行为,搜索全局最优定价向量。
2.算法测试效果图预览





3.算法运行软件版本
matlab2024B
4.部分核心程序
%WOA收敛曲线
figure('Name','WOA收敛曲线','Color','w');
subplot(121);
plot(1:T_max, ConvCurve,'b-','LineWidth',2); hold on;
plot(1:T_max, AvgCurve,'r--','LineWidth',1.5);
xlabel('迭代次数');
ylabel('PU效用值');
title('WOA收敛过程');
legend('最优适应度','平均适应度','Location','best');
grid on;
subplot(122);
plot(1:T_max, ConvCurve,'b-','LineWidth',2); hold on;
plot(1:T_max, PSO_curve,'r--','LineWidth',2);
plot(1:T_max, GA_curve,'g-.','LineWidth',2);
xlabel('迭代次数');
ylabel('PU效用值');
title('WOA vs PSO vs GA');
legend('WOA','PSO','GA','Location','best');
grid on;
%最优价格
figure;
subplot(131);
bar(BestWhale,'FaceColor',[0.2 0.6 0.8]);
xlabel('次用户编号'); ylabel('最优价格 \lambda');
title('PU对各SU的最优定价'); grid on;
%SU功率分配&价格演化热图
[p_opt,u_opt] = SU_BestResponse(BestWhale,h_su,w,N0,Pmax);
subplot(132);
bar([p_opt]','grouped');
xlabel('次用户编号');
ylabel('值');
title('SU最优功率');
legend('功率');
grid on;
subplot(133);
bar([u_opt]','grouped');
xlabel('次用户编号');
ylabel('值');
title('SU最优效用');
legend('效用');
grid on;
%SU功率随迭代演化
figure('Name','SU功率演化','Color','w');
subplot(121);
plot(1:T_max, SU_Power_Hist,'LineWidth',1.5);
xlabel('迭代次数');
ylabel('SU功率');
title('各SU功率随WOA迭代变化');
legend(arrayfun(@(x)sprintf('SU%d',x),1:N_SU,'UniformOutput',false));
grid on;
%价格-功率响应曲线
lambda_range = linspace(0.1,5,100);
P_response = zeros(length(lambda_range),N_SU);
for k = 1:length(lambda_range)
lam = lambda_range(k)*ones(1,N_SU);
P_response(k,:) = SU_BestResponse(lam, h_su, w, N0, Pmax);
end
subplot(122);
plot(lambda_range, P_response,'LineWidth',1.8);
xlabel('价格 \lambda'); ylabel('SU最优功率');
title('Stackelberg博弈:价格-功率响应');
grid on;
%不同SU数量下PU效用
SU_range = 2:2:14;
PU_util_vs_N = zeros(size(SU_range));
for k = 1:length(SU_range)
n = SU_range(k);
h1 = 0.5 + 0.8*rand(1,n);
h2 = 0.2 + 0.6*rand(1,n);
PU_util_vs_N(k) = quickWOA(h1,h2,ones(1,n),N0,Pmax,I_th,C_coef,n,20,50,lambda_min,lambda_max);
end
figure('Name','SU数量影响','Color','w');
subplot(121);
plot(SU_range, PU_util_vs_N,'-o','LineWidth',2,'MarkerFaceColor','b');
xlabel('SU数量');
ylabel('PU最优效用');
title('SU数量对PU效用影响'); grid on;
%干扰门限影响
Ith_range = 0.2:0.2:2.0;
PU_util_vs_I = zeros(size(Ith_range));
for k = 1:length(Ith_range)
PU_util_vs_I(k) = quickWOA(h_su,h_pu_su,w,N0,Pmax,Ith_range(k),C_coef,...
N_SU,20,50,lambda_min,lambda_max);
end
subplot(122);
plot(Ith_range, PU_util_vs_I,'-s','LineWidth',2,'MarkerFaceColor','r');
xlabel('干扰门限 I_{th}'); ylabel('PU效用');
title('干扰门限对PU效用影响'); grid on;
%信道增益影响(3D)
h_range = linspace(0.2,1.5,15);
[Hg,Hpg] = meshgrid(h_range,h_range);
Z = zeros(size(Hg));
for i=1:size(Hg,1)
for j=1:size(Hg,2)
Z(i,j)=quickWOA(Hg(i,j)*ones(1,N_SU),Hpg(i,j)*ones(1,N_SU),...
w,N0,Pmax,I_th,C_coef,N_SU,15,40,lambda_min,lambda_max);
end
end
figure('Name','信道增益3D','Color','w');
subplot(121);
surf(Hg,Hpg,Z); shading interp; colorbar;
xlabel('h_{su}'); ylabel('h_{pu-su}'); zlabel('PU效用');
title('信道增益对PU效用的影响');
subplot(122);
SNR = h_su.*p_opt/N0;
Rate = log2(1+SNR);
bar(Rate,'FaceColor',[0.8 0.4 0.2]);
xlabel('SU编号'); ylabel('速率 (bps/Hz)');
title('各SU传输速率'); grid on;
fprintf('\n===== 最终结果 =====\n');
fprintf('最优PU效用: %.4f\n',BestScore);
fprintf('最优价格向量: '); disp(BestWhale);
fprintf('SU最优功率: '); disp(p_opt);
fprintf('总干扰: %.4f / 门限 %.4f\n',sum(h_pu_su.*p_opt),I_th);
5.算法理论概述
5.1 系统模型
设系统有1个主用户和N个次用户,第i个次用户的发射功率为pi,自身信道增益为hi,对主用户的干扰信道增益为gi,加性高斯白噪声功率为N0。
第i个次用户的接收信噪比为:

由香农公式可得其传输速率为:

5.2 Stackelberg博弈建模
跟随者(SU)效用函数:传输收益减去支付给PU的费用:

其中wi为效用权重,λi为PU对SUi收取的单位功率价格。
领导者(PU)效用函数:收取的总费用减去干扰惩罚:

其中Ith是干扰门限,η是惩罚系数。
5.3 Stackelberg均衡求解(内层)
固定λi,对SU效用求一阶偏导:

解得SU的最佳响应函数:

5.4 具体的实现步骤
参数初始化
设置SU数量N、噪声N0、信道增益hi,gi、最大功率Pmax、干扰门限Ith、WOA种群规模Nw、最大迭代次数Tmax、价格搜索范围[λmin,λmax]。
种群初始化
在价格空间中随机生成Nw只鲸鱼:
![]()
适应度评估
对每只鲸鱼Xi=λ:

更新最优鲸鱼
![]()
位置更新
更新每只鲸鱼位置,并使用边界处理:
![]()
迭代终止
达到Tmax后输出X∗和对应的SU最优功率p∗,绘制各项仿真图。
6.算法完整程序工程
OOOOO
OOO
O
关注GZH后输入回复:0054

727

被折叠的 条评论
为什么被折叠?



