基于WOA鲸鱼优化的5G通信系统资源分配优化matlab仿真

发布时间 2023-04-13 23:36:17作者: 我爱C编程

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

2.算法涉及理论知识概要

3.1鲸鱼算法

       鲸鱼算法(Whale Optimization Algorithm,WOA)[1]。鲸鱼优化算法(WOA)2016 年由澳大利亚格里菲斯大学的 Mirjalili 等提出的一种新的群体智能优化算法,因算法简练易于实现,且对目标函数条件要求宽松,参数控制较少等种种优点受到一批又一批学者的亲睐,且经过不断的改进WOA已应用于许多领域。WOA算法设计的既精妙又富有特色,它源于对自然界中座头鲸群体狩猎行为的模拟, 通过鲸鱼群体搜索、包围、追捕和攻击猎物等过程实现优时化搜索的目的。在原始的WOA中,提供了包围猎物,螺旋气泡、寻找猎物的数学模型。

 

       WOA算法的初始阶段中,座头鲸并不知道食物所在的位置,他们都是通过群体合作来获得食物的位置信息,因此,距离食物最近的鲸鱼相当于当前的一个局部最优解,其他鲸鱼个体都会朝这个位置靠近,从而逐步包围食物,因此使用下列的数学模型表示:

 

 

 

 

2.2气泡攻击

 

   本阶段模仿座头鲸进行气泡攻击,通过收缩包围和螺旋更新位置来设计鲸鱼捕食吐出气泡的行为,从而达到鲸鱼局部寻优的目的。

 

 (1)螺旋更新位置

 

   座头鲸个体首先计算与当前最优鲸鱼的距离,然后再以螺旋方式游走,在进行食物的搜索时候,螺旋游走方式的数学模型为:

 

 

 

 

2.3寻觅食物阶段

 

       座头鲸通过控制|A|向量游走获取食物,|A|>1的时候,座头鲸个体向着参考座头鲸的位置靠近,鲸鱼个体朝着随机选取的座头鲸更新位置,这种方式保证了座头鲸个体能够进行全局搜索,获得全局最优解,其数学模型表示如下:

 

 

 

 

3.2 5G通信系统资源分配

      5G针对不同的服务、部署场景和频谱,可以游戏可扩展的numerology。对于具有可扩展numerology的资源块设计,支持PRB定义,其中对于所有numerology,每个PRB的子载波数相同,每个PRB的子载波数一般为12。对于2n*15kHz的子载波间隔,子载波在频域中以嵌套方式映射到15kHz的子载波间隔的子集/超集上。当多个numerology在时域多路复用时,在一个载波中,不同numerologyRB位于相对固定的网格上,对于2n*15kHz的子载波间隔,RB网格被定义为在频域中嵌套的15kHz子载波间隔RB网格的子集/超集。

 

       对于每个PRB的子载波数,在NR中,1216被视为候选,并在表1中进行比较:

 

       NRLTE之间的频谱共享:每个PRB 12个子载波更好地支持NRLTE之间的频谱共享。当NRLTEPRB定义相同时,对实现的影响将最小化。对于每个RB设计16个子载波,必须为NR设计独立实现。

        LTE设计的重用:每个PRB12个子载波,可以重用许多LTE设计方面,例如LTE中的TBS表。由于每个PRB16个子载波,调度器必须重新设计,并且必须为实现和规范付出巨大的努力。数据包大小/资源利用率:对于较小的数据包大小,例如用于URLLC模拟的32字节的URLLC服务,12可以提供比16更高的资源利用率和更少的冗余RE。对于中等和较大的分组大小,例如URLLCeMBB服务,很难说哪一个更好,因为分组大小是灵活的,并且可以用12个子载波间隔分配比16子载波间隔分配更多的RB,具有相似的资源数量,即相似的利用率。

        BW利用率:在系统频带内,两个备选方案支持类似的BW利用率。同意支持高达约100%的带宽利用率。以20MHz BW15kHz SCS为例,99.9%的带宽利用率和111RB将在每个PRB12个子载波的情况下处于活动状态,99.6%的带宽利用率和83RB将在每个PRB16个子载波的情况下处于活动状态。

       DCI的大小:在给定的BW下,每个RB 16个子载波提供的RB数少于12个,并且资源块分配所需的比特数也将更少。然而,通过适当的设计,DCI的尺寸可以减小,影响可以最小化。

 

3.MATLAB核心程序

 

delta = 1e-6;
Flag = 0;
Positions = initialization(SearchAgents_no, dim, ub, lb);
Convergence_curve = zeros(1,Max_iter);
iter = 0;  
while iter < Max_iter && Flag <= 3
    for i = 1:size(Positions,1)
 
        %返回超出搜索空间边界的搜索代理 
        Flag4ub = Positions(i,:) > ub;
        Flag4lb = Positions(i,:) < lb;
        Positions(i,:) = (Positions(i,:).*(~(Flag4ub+Flag4lb))) + ub.*Flag4ub + lb.*Flag4lb;
        
        % 计算每个搜索代理的目标函数
        fitness = fobj(Positions(i,:));
 
        %更新 
        if fitness < Leader_score   
            Leader_score = fitness;         
            Leader_pos = Positions(i,:);
        end       
    end
    
    a = 2 - iter*((2)/Max_iter);    
    
    a2 = -1 + iter*((-1)/Max_iter);
    
    % 更新搜索代理的位置
    for i = 1:size(Positions,1)
        r1 = rand();    
        r2 = rand();    
        
        A = 2*a*r1-a;   
        C = 2*r2;       
 
        b = 1;              
        l = (a2-1)*rand + 1;   
        
        p = rand();       
        
        for j = 1:size(Positions,2)
            if p < 0.5   
                if abs(A) >= 1
                    rand_leader_index = floor(SearchAgents_no*rand()+1);
                    X_rand = Positions(rand_leader_index, :);
                    D_X_rand = abs(C*X_rand(j) - Positions(i,j)); 
                    Positions(i,j) = X_rand(j) - A*D_X_rand;       
                elseif abs(A) < 1
                    D_Leader = abs(C*Leader_pos(j) - Positions(i,j)); 
                    Positions(i,j) = Leader_pos(j) - A*D_Leader;      
                end
            elseif p>=0.5
                distance2Leader = abs(Leader_pos(j)-Positions(i,j));
                Positions(i,j) = distance2Leader*exp(b.*l).*cos(l.*2*pi) + Leader_pos(j);
            end
        end
    end
    iter = iter + 1;
    Convergence_curve(iter) = -Leader_score;
    [iter -Leader_score]
end
end
function Positions = initialization(SearchAgents_no, dim, ub, lb)
Boundary_no = size(ub,2); 
if Boundary_no == 1
    Positions = rand(SearchAgents_no,dim).*(ub - lb) + lb;
end
if Boundary_no > 1
    for i = 1:dim
        ub_i = ub(i);
        lb_i = lb(i);
        Positions(:,i) = rand(SearchAgents_no,1).*(ub_i - lb_i) + lb_i;
    end
end
 
end