【免疫算法,资源分配】基于免疫算法的认知无线电资源分配研究

1.软件版本

matlab2017b

2.本算法理论知识

在生命科学领域,人们对遗传和免疫等自然现象进行了广泛而深入的研究.20世纪60年代,Bagley和Rosenberg等先驱使用了相关的内容和知识,特别是遗传学的理论和概念,在对这些研究成果进行分析和理解的基础上,将其成功应用于某些工程科学领域,取得了良好的效果。八十年代中期,美国密歇根大学的Hollan教授不仅对其进行了总结和扩展。先前学者提出的遗传概念,也给出了简洁明了的算法描述,从而形成了目前的一般遗传算法。(遗传算法,遗传算法)。因为传统遗传算法具有使用方便,鲁棒性强的特点。便于并行处理,广泛应用于组合优化,结构设计,人工智能等领域另一方面,Farmer和Bersini也在不同的时间和不同程度上参与了免疫的概念。遗传算法是一种具有迭代生成和测试过程的搜索算法。

研究人员正试图将生命科学中的免疫概念引入工程实践领域,并利用相关知识和理论将它们与现有的一些智能算法有机地结合起来,建立新的进化理论和算法来改进算法。整体性能。基于这一思想,将免疫概念及其理论应用于遗传算法。在保留原算法优良特性的前提下,试图有选择地,有目的地利用待解决问题中的一些特征信息或知识来抑制优化过程。降解现象,该算法称为免疫算法(IA))。

免疫算法相关概念

1、抗原:在生命科学中,一种刺激和诱导机体免疫系统产生免疫反应并在体内或体外与相应的免疫反应产物发生特异反应的物质。在我们的算法中,它指的是所有可能错误的基因,也就是说,非最佳个体的基因。

2、抗体:在生命科学中,免疫系统受到抗原的刺激,免疫细胞转化为浆细胞,产生与抗原特异性结合的免疫球蛋白。免疫球蛋白是抗体。在这种情况下,它指的是通过根据疫苗修改个体基因而获得的新个体。其中,根据疫苗修饰个体基因的过程是接种疫苗,目的是在产生新个体时消除抗原的不利影响。

3、免疫疫苗:基于进化或未决问题估计最佳个体基因。

4、免疫算子:与生命科学中的免疫学理论类似,免疫操作者也分为两种类型:总免疫和靶免疫,分别对应于生命科学中的非特异性免疫和特异性免疫。其中,总免疫指的是类型免疫接种,其中每个个体中的每个个体在每次突变操作后进行免疫操作;目标免疫是指个体在变异操作后的判断,个体仅在行动点。发生一种免疫反应。前者主要应用于个体进化的初始阶段,但基本上不起作用在进化过程中,否则它很可能产生通常意义上的“同化现象”;后者通常伴随着人口进化的整个过程。它也是免疫操纵的常见操作者。

5、免疫调节:在免疫反应过程中,大量抗体的产生减少了抗原对免疫细胞的刺激,从而抑制了抗体的分化和增殖,同时,还存在相互刺激和抑制的关系。产生的抗体,如抗原和抗体,抗体和抗体之间的相互限制将抗体的免疫应答维持在一定水平,确保身体的免疫平衡。

6、免疫记忆:免疫系统与抗原反应的抗体作为记忆细胞存储。当相同的抗原再次侵入时,相应的记忆细胞被激活以产生大量抗体,缩短免疫应答时间。

7、抗原识别:通过将抗原表面上的表位与抗体分子表面上的化学基团匹配来完成识别。这种匹配过程也是一个连续学习抗原的过程,最后选择最合适的抗体与抗原结合。排除抗原。

免疫算法流程

1、随机产生初始父代种群A1,根据先验知识抽取疫苗;

2、若当前群体中包含最佳个体,则算法停止运行并输出结果;否则,继续;

3、对当前第k代父本种群Ak进行交叉操作,得到种群Bk;

4、对Bk进行变异操作,得到种群Ck;

5、对Ck进行接种疫苗操作,得到种群Dk;

6、对Dk进行免疫选择操作,得到新一代父本Ak+1,转至第二步。

3.核心代码

%=========所需常量========
N=20;%子载波个数
M=3;%小区个数
K=50;%抗体规模
T=46;%抗体突变规模
L=1;%记忆细胞规模
O=5;%每代公平性调整次数
Pc=0.85;%交叉概率
Pm=0.1;%变异概率
Alpha=0.3;%优化目标调节因子wq
Gama=0.06;%相似度常数
Rho=0.6;%选择概率调节因子
Tau=20;%信号噪声比差距
Eta=2;%路径损耗指数
Sigma=3.16;%高斯标准差
Objective=0;%优化目标
genMax=200;%最大迭代次数
Ts=4e-6;%码元持续时间
N0=1e-6;%噪声功率谱密度
W=0.625e6;%主用户带宽
Delta_f=0.3125e6;%子载波带宽
Pth=10;%认知基站最大允许发射功率
Ith=0.1;%主用户的可容忍的最大功率干扰
Rate_m=[2 1 1];%各个小区的功率比值

%设基站半径为3km,归一化距离也为3km

%======所需变量=========
%flag=0;%循环进行的标志
%temp=0;%临时存储某些值
n=1;%第n个子载波
m=1;%第m个小区
k=1;%第k个抗体
i=1;%循环变量
j=1;%循环变量
o=1;%循环变量
antibody=zeros(M,N,K);%载波分配方案(第k页是第k个抗体,第m行是第m个小区,第n列是第n个子载波的取值是功率)
memorycell=zeros(M,N,L);%记忆细胞分配方案(第k页是第k个抗体,第m行是第m个小区,第n列是第n个子载波)
temp_antibody=zeros(M,N,K);%初始选择保留抗体
temp_memorycell=zeros(M,N,L);%初始记忆细胞
%rate=zeros(M,N,K);%速度方案(第k页是第k个抗体,第m行是第m个小区,第n列是第n个子载波)
%ratio=zeros(K);%第k个抗体的速率功率比
itfere_pu=zeros(M,N,K);%各个子载波对主用户的干扰
%antibody_flag=zeros(1,K);%每个抗体的标志



%========有关干扰的计算========
%认知用户的位置
loc_cu=zeros(M,2); %第m个认知用户的位置(以主用户为坐标原点的),并假设小区半径为3km
p1_cu_cbs=zeros(1,3); %认知用户和认知基站之间的路径损耗


flag=1;
while flag==1
    Theta=rand*2*pi;
    r=rand*3;
    if r>=1
        flag=0;
    end
end
loc_cu(2,1)=-1.5*3^0.5+r*cos(Theta);%第2个用户的x坐标
loc_cu(2,2)=-1.5+r*cos(Theta);  %第2个用户的y坐标
pl_cu_cbs(1,2)=r;  %第2个用户与基站的距离
flag=1;
while flag==1
    Theta=rand*2*pi;
    r=rand*3;
    if r>=1
        flag=0;
    end
end
loc_cu(1,1)=r*cos(Theta);  %第1个用户的x坐标
loc_cu(1,2)=3+r*cos(Theta);  %第1个用户的y坐标
pl_cu_cbs(1,1)=r; %第1个用户与基站的距离


flag=1;
while flag==1
    Theta=rand*2*pi;
    r=rand*3;
    if r>=1
        flag=0;
    end
end
loc_cu(3,1)=1.5*3^0.5+r*cos(Theta);  %第3个用户的x坐标
loc_cu(3,2)=-1.5+r*cos(Theta);  %第3个用户的y坐标
pl_cu_cbs(1,3)=r;  %第3个用户与基站的距离



%——主用户的位置
loc_pu=zeros(1,2);  %主用户的位置
%switch(randi([1,3],1))
switch(2)
    case 1                    %主用户在第2个小区
        flag=1;
        while flag==1
            Theta=rand*2*pi;
            r=rand*3;
            if r>=1
                flag=0;
            end
        end
        loc_pu(1,1)=-1.5*3^0.5+r*cos(Theta);
        loc_pu(1,2)=-1.5+r*cos(Theta);
    case 2                   %主用户在第1个小区
        flag=1;
        while flag==1
            Theta=rand*2*pi;
            r=rand*3;
            if r>=1
                flag=0;
            end
        end
        loc_pu(1,1)=r*cos(Theta);
        loc_pu(1,2)=3+r*cos(Theta);
    case 3                            %主用户在第3个小区
        flag=1;
        while flag==1
            Theta=rand*2*pi;
            r=rand*3;
            if r>=1
                flag=0;
            end
        end
        loc_pu(1,1)=1.5*3^0.5+r*cos(Theta);
        loc_pu(1,2)=-1.5+r*cos(Theta);
end


%路径损耗的计算
pl_cu_pu=zeros(1,3); %认知用户和主用户之间的路径损耗
pl_cu_cu=zeros(3); %认知用户之间的路径损耗


for m=1:M
    
    pl_cu_pu(1,m)=((loc_cu(m,1)-loc_pu(1,1))^2+(loc_cu(m,2)-loc_pu(1,2))^2)^0.5;
end
pl_cu_pu=10^(0.1*randn*Sigma)./((pl_cu_pu/3).^Eta);  %产生主用户和认知用户的路径损耗
pl_cu_cbs=10^(0.1*randn*Sigma)./((pl_cu_cbs/3).^Eta);  %产生用户和认知基站的路径损耗
for m=1:M
    for i=1:M
        pl_cu_cu(m,i)=((loc_cu(m,1)-loc_cu(i,1))^2+(loc_cu(m,2)-loc_cu(i,2))^2)^0.5;
    end
end
pl_cu_cu=10^(0.1*randn*Sigma)./((pl_cu_cu/3).^Eta);   %产生认知用户和认知用户之间的路径损耗


%对主用户干扰
to_pu_g=raylrnd(1,[M,N]);   %对主用户的信道干扰增益(第m行是第m个小f中各个子载波的增益)
lamda=zeros(1,N);  %对主用户距离干扰增益
Distance=zeros(1,N);   %第n个子载波和主用户的频带距离
for n=1:N
    Distance(1,n)=((N-(2*n-1)/2)*Delta_f+W/2);
end
F=@(f)((sin(pi*Ts*f)./(pi*Ts*f)).^2);      %积分函数
for n=1:N      %Lamda计算
    lamda(1,n)=Ts*quad(F,(Distance(1,n)-W/2),(Distance(1,n)+W/2));
end

for m=1:M
    for n=1:N
        to_pu_g(m,n)=to_pu_g(m,n)*lamda(1,n);   %对主用户的总的干扰增益
    end
end

for m=1:M
    to_pu_g(m,:)=to_pu_g(m,:)*pl_cu_pu(1,m);
end


%同频相互干扰
co_ch_g=zeros(M,M,N);  %同频干扰矩阵,第n页是第n个子载波的同频干扰

for n=1:N
    for i=1:M
        for j=i:M              %若要不同的同频干扰,则这里改为1:M
            co_ch_g(i,j,n)=raylrnd(1);
            co_ch_g(j,i,n)=co_ch_g(i,j,n);
        end
    end
end
for n=1:N
    for m=1:M
        co_ch_g(m,m,n)=0;
    end
end
for n=1:N
    co_ch_g(:,:,n)=(co_ch_g(:,:,n).^2).*pl_cu_cu;
end
for n=1:N
    for i=1:M
        co_ch_g(i,i,n)=0;
    end
end

%—有关各个子载波的信道增益——
ch_g=raylrnd(1,[M,N]);   %每个子载波的信道增益
for m=1:M
    ch_g(m,:)=(ch_g(m,:).^2)*pl_cu_cbs(1,m);
end
%===—有关运算结果显示=====二=
rate_gen1=zeros(1,genMax);   %每代的最优速率
rate_gen2=zeros(1,genMax);      %每代的最优速率
%rate_gen3=zeros(1,generaMax);   %每代的最优小速率
ratio_gen1=zeros(1,genMax);     %每代的最优速率功率比
ratio_gen2=zeros(1,genMax);     %每代的最优速率功率比
%ratio_gen3=zeros(1,genMax);     %每代的最优速率功率比
Pth=10;
for Ith=[0.001 0.005 0.01]
    for qq=1:10
        %=========程序初始化========
        temp_antibody(:)=Pth/N;       %初始抗体功率是平均分配
        temp_memorycell(:)=Pth/N;      %初始记忆细胞功率也是平均分配
        antibody(:)=temp_antibody(:);      %抗体变量装入初始抗体
        memorycell(:)=temp_memorycell(:);      %记忆细胞变量装入记忆细胞
        
        
        %=========主函数=========
        for gen=1:genMax
            gen
            
            %记忆细胞添加            
            antibody(:,:,(K-L+1):K)=memorycell;
            %antibody_falg((K-L+1):K)=1;                       %记录成型抗体
            
            
            
            %——抗体合格检测
            exceed_Ith=0;   %超过干扰门限的量
            exceed_Pth=0;      %超过功率门限的量
            decr_var_I=zeros(M,N);      %有关干扰的归一化的减少量
            decr_val_P=zeros(M,N);     %有关功率的归一化的减少量
            ratio_P=zeros(1,3);      %计算当前功率与公平性的比值
            standerd_site=0;      %作为基准的用户
            
            for k=1:K
                decr_val_P=antibody(:,:,k)/sum(sum(antibody(:,:,k)));   %根据现有功率计算归一化功率减少量
                if(sum(sum(antibody(:,:,k)))-Pth>eps)
                    exceed_Pth=sum(sum(antibody(:,:,k)))-Pth;   %计算超出多少
                    antibody(:,:,k)=antibody(:,:,k)-exceed_Pth*decr_val_P(:,:);
                end
                
                itfere_pu(:,:,k)=to_pu_g.*antibody(:,:,k);
                decr_val_I=itfere_pu(:,:,k)/sum(sum(itfere_pu(:,:,k)));      %根据现有干扰计算归一化功率减少量
                if(sum(sum(itfere_pu(:,:,k)))-Ith>eps)
                    exceed_Ith=sum(sum(itfere_pu(:,:,k)))-Ith;         %计算超出多少
                    
                    antibody(:,:,k)=antibody(:,:,k)-(exceed_Ith*decr_val_I)./(to_pu_g);
                end
                itfere_pu(:,:,k)=to_pu_g.*antibody(:,:,k);      %更新对主用户的干扰
            end
            
            
            
            
            
            
            %---速率计算
            h=zeros(M,N,K);   %各个子载波的信噪比
            i_ss=zeros(M,N,K);   %各个子载波受到的同频干扰
            for k=1:K
                for n=1:N
                    for m=1:M
                        for i=1:M
                            i_ss(m,n,k)=i_ss(m,n,k)+co_ch_g(i,m,n)*antibody(i,n,k);   %计算各个子载波所受到的同频干扰
                        end
                    end
                end
            end
            
            temp=sum(i_ss);
            
            for k=1:K
                for n=1:N
                    for m=1:M
                        i_ss(m,n,k)=temp(1,n,k)-i_ss(m,n,k);      %计算每个子载波所受到的同频干扰
                    end
                end
            end
            for k=1:K
                h(:,:,k)=ch_g./(N0*Delta_f+i_ss(:,:,k));           %计算信噪比
            end
            
            %rate=Delta_f*log2(1+antibody.*h/Tau);          %计算每个抗体每个小区的速率
            rate=log2(1+antibody.*h/Tau);         %计算每个抗体每个小区的速率
            
            
            %总的公平性调整
            for o=1:O
                %rate_m=zeros(1,3,K);      %各个小区的总速率
                %ratio_r=zeros(1,3);             %计算当前速率与公平性的比值
                standard_site=0;      %作为基准的用户
                decr_val_r=zeros(M,N);        %有关功率的归一化的减少量
                exceed_r=0;            %超过干扰门限的量
                rate_m=sum(rate,2);
                for k=1:K
                    ratio_r=rate_m(:,:,k)./Rate_m';
                    [~,standard_site]=min(ratio_r);     %选取基准功率
                    switch(standard_site)      %进行功率公平性调整
                        case 1   %第一个为基准
                            for m=[2 3]
                                exceed_r=rate_m(1,:,k)/2-rate_m(m,:,k);
                                decr_val_r(m,:)=(rate(m,:,k)/sum(rate(m,:,k)))*exceed_r;
                                if(exceed_r<0)
                                    for n=1:N
                                        antibody(m,n,k)=(2^decr_val_r(m,n)*(Tau+antibody(m,n,k)*h(m,n,k))-Tau)/h(m,n,k);
                                    end
                                end
                            end
                            
                        case 2            %第二个为基准
                            exceed_r=rate_m(2,:,k)*2-rate_m(1,:,k);
                            decr_val_r(1,:)=(rate(1,:,k)/sum(rate(1,:,k)))*exceed_r;
                            if(exceed_r<0)
                                for n=1:N
                                    antibody(1,n,k)=(2^decr_val_r(1,n)*(Tau+antibody(1,n,k)*h(1,n,k))-Tau)/h(1,n,k);
                                end
                            end
                            exceed_r=rate_m(2,:,k)-rate_m(3,:,k);
                            decr_cal_r(3,:)=(rate(3,:,k)/sum(rate(3,:,k)))*exceed_r;
                            if(exceed_r<0)
                                for n=1:N
                                    antibody(3,n,k)=(2^decr_cal_r(3,n)*(Tau+antibody(3,n,k)*h(3,n,k))-Tau)/h(3,n,k);
                                end
                            end
                            
                             
                        case 3              %第三个为基准
                            exceed_r=rate_m(3,:,k)*2-rate_m(1,:,k);
                            decr_val_r(1,:)=(rate(1,:,k)/sum(rate(1,:,k)))*exceed_r;
                            if(exceed_r<0)
                                for n=1:N
                                    antibody(1,n,k)=(2^decr_val_r(1,n)*(Tau+antibody(1,n,k)*h(1,n,k))-Tau)/h(1,n,k);
                                end
                            end
                            exceed_r=rate_m(3,:,k)-rate_m(2,:,k);
                            decr_val_r(2,:)=(rate(2,:,k)/sum(rate(2,:,k)))*exceed_r;
                            if(exceed_r<0)
                                for n=1:N
                                    antibody(2,n,k)=(2^decr_val_r(2,n)*(Tau+antibody(2,n,k)*h(2,n,k))-Tau)/h(2,n,k);
                                end
                            end
                    end
                end
                temp=antibody<=eps;
                antibody(temp)=eps;
                h=zeros(M,N,K);      %各个子载波的信噪比
                i_ss=zeros(M,N,K);          %各个子载波受到的同频干扰
                for k=1:K
                    for n=1:N
                        for m=1:M
                            for i=1:M
                                i_ss(m,n,k)=i_ss(m,n,k)+co_ch_g(i,m,n)*antibody(i,n,k);      %计算各个子载波所受到的同频干扰
                            end
                        end
                    end
                end
                temp=sum(i_ss);
               
                for k=1:K
                    for n=1:N
                        for m=1:M
                            i_ss(m,n,k)=temp(1,n,k)-i_ss(m,n,k);      %计算每个子载波所受到的同频干扰
                        end
                    end
                end
                
                for k=1:K
                    h(:,:,k)=ch_g./(N0*Delta_f+i_ss(:,:,k));             %计算信噪比
                end
                %rate=Delta_f*log2(1+antibody.*h/Tau);   %计算每个抗体每个小区的速率
                rate=log2(1+antibody.*h/Tau);   %计算每个抗体每个小区的速率
            end
            
            %速率功率比计算
            %if gen==genMax
            %rate=floor(rate);
            %end
            rate_antibody=sum(sum(rate));               %计算每个抗体速率
            ratio=rate_antibody./sum(sum(antibody));           %计算每个抗体的速率功率比
            Objective=ratio*Alpha+rate_antibody*(1-Alpha);               %计算优化目标的值
            
            
            
            %亲和力排序
            for i=1:K-1
                for j=i+1:K
                    if(Objective(i)<Objective(j))
                        temp=rate_antibody(i);         %每代速度交换
                        rate_antibody(i)=rate_antibody(j);
                        rate_antibody(j)=temp;
                        
                        temp=rate(:,:,i);               %速率交换
                        rate(:,:,i)=rate(:,:,j);
                        rate(:,:,j)=temp;
                        
                        
                        temp=antibody(:,:,i);            %功率交换
                        antibody(:,:,i)=antibody(:,:,j);
                        antibody(:,:,j)=temp;
                        
                        
                        temp=itfere_pu(:,:,i);            %对主用户干扰交换
                        itfere_pu(:,:,i)=itfere_pu(:,:,j);
                        itfere_pu(:,:,j)=temp;
                        
                        
                        temp=Objective(i);           %每代速度交换
                        Objective(i)=Objective(j);
                        Objective(j)=temp;
                        
                        
                        temp=ratio(i);                 %每代速度交换
                        ratio(i)=ratio(j);
                        ratio(j)=temp;
                        
%                         temp=antibody_flag(i);
%                         antibody_flag(i)=antibody_flag(j);
%                         antibody_flag(j)=temp;
                        
                    end
                end
            end
            
            
            
            %提取记忆细胞
            memorycell=antibody(:,:,1:L);                %前L个个体作为记忆细胞提取
            
            
            %算法结果等待
            rate_gen1(gen)=rate_antibody(1);   %记录每代最优的最小速度
            ratio_gen1(gen)=Objective(1);      %每代最优速率功率比
            
            %抗体选择
            %pd=zeros(1,K);             %浓度概率
            pf=zeros(1,K);                 %适应度概率
            %p=zeros(1,K);                %选择概率
            resemble=zeros(1,K);         %抗体的相似度
            res=zeros(M,N,K);              %各个子载波的距离
            index=zeros(1,K);               %轮盘赌抗体索引
            
            for k=1:K
                for i=1:K
                    res(:,:,i)=abs(antibody(:,:,k)-antibody(:,:,i));               %计算各个子载波的距离
                end
                temp=(res<=Gama*Pth);             %距离过近的子载波个数
                temp=sum(sum(temp));                %计算与每个抗体的距离
                for i=1:K
                    resemble(k)=resemble(k)+temp(i);
                end
            end
            pd=1-resemble/(M*N*K);
            
            for k=1:K
                pf(k)=(Objective(k)-Objective(K)+eps)/(Objective(1)-Objective(K)+eps);
            end
            p=Rho*pf+(1-Rho)*pd;
            
            for i=1:K-1                   %抗体按照选择概率排序
                for j=i+1:K
                    if(p(i)<p(j))
                        temp=p(i);
                        p(i)=p(j);
                        p(j)=temp;
                        temp=antibody(i);
                        antibody(i)=antibody(j);
                        antibody(j)=temp;
                    end
                end
            end
            
            
            for k=1:K                        %选出K个抗体
                temp=rand*sum(p);
                for i=1:K
                    temp=temp-p(i);
                    if(temp<=0)
                        index(k)=i;             %赌出第k个索引值
                        break;
                    end
                end
            end
            temp=antibody;
            antibody=temp(:,:,index);
            
            
            %两种交叉
            [antibody]=dou_atb_excha(N,K,Pc,antibody);               %调用交叉互换函数i现i叉互换
            %两种突变
            [antibody]=dou_atb_mutat(K,N,M,Pm,antibody);            %调用突变函数实现抗体突变
            
        end
        obj(qq,:)=ratio_gen1;
        obj11(qq,:)=2*rate_gen1;
    end
    hold on;
    oobj=mean(obj);
    oobj11=mean(obj11);
    plot(oobj11);
    xlabel('代数');ylabel('亲和力');title('收敛性能');
    legend('Ith=0.001','Ith=0.005','Ith=0.01','Location','NorthEast');
    
%     figure(1);plot(1:genMax,oobj,'-',1:genMax,oobj,'-x',1:genMax,oobj,'--');
%     xlabel('代数');ylabel('亲和力');title('收敛性能');
%     legend('Ith=0.001','Ith=0.005','Ith=0.01','Location','NorthEast');
    
%     figure(2);plot(1:genMax,oobj11,'-',1:genMax,oobj11,'-x',1:genMax,oobj11,'--');
%     xlabel('代数');ylabel('亲和力');title('收敛性能');
%     legend('Ith=0.001','Ith=0.005','Ith=0.01','Location','NorthEast');
end



% figure(1);semilogy(1:genMax,OutagePC(1,:),'-',1:genMax,OutagePC(2,:),'-x',1:genMax,OutagePC(3,:),'--');
% xlabel('代数');ylabel('亲和力');title('收敛性能');
% legend('Ith=0.001','Ith=0.005','Ith=0.01','Location','NorthEast');


% figure(1);semilogy(1:genMax,OutagePC(1,:),'-',1:genMax,OutagePC(2,:),'-x',1:genMax,OutagePC(3,:),'--');
% xlabel('代数');ylabel('亲和力');title('收敛性能');
% legend('Ith=0.001','Ith=0.005','Ith=0.01','Location','NorthEast');

4.操作步骤与仿真结论

 

 5.参考文献

  1. 李晓宇.认知无线电系统中资源分配策略研究[D].郑州大学,2010
  2. 孔小丽.认知无线电系统的频谱资源分配研究[D].南京邮电大学,2013

3.徐超.认知无线电网络中的安全中继选择与功率分配研究[D].北京邮电大

D207

6.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
用matlab编写的人工免疫算法 clc clear all close all tic; global n ww m=100;% m--抗体规模 n=22;% n--每个抗体二进制字符串长度 ww=1;%参数个数 mn=100;%从抗体集合里选择n个具有较高亲和度的最佳个体进行克隆操作 xmin=[0 0]; xmax=[9 9]; tnum=100;% tnum--迭代代数 pMutate=0.1;% pMutate--高频变异概率 cfactor=0.2;% cfactor--克隆(复制)因子 A=InitializeFun(m,n); %生成抗体集合A,抗体数目为m,每个抗体基因长度为n F='X+10*sin(X.*5)+7*cos(X.*4)'; %目标函数 %F='sin(10*X)' FM=[]; %存放各代最优值的集合 FMN=[]; %存放各代平均值的集合 t=0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% while t<tnum t=t+1; X=DecodeFun(A(:,1:22),xmin,xmax); %将二进制数转换成十进制数 Fit=eval(F); %以X为自变量求函数值并存放到集合Fit中 if t==1 figure(1) fplot(F,[xmin(1),xmax(1)]); grid on hold on plot(X,Fit,'k*') title('抗体的初始位置分布图') xlabel('x') ylabel('f(x)') end if t==tnum figure(2) fplot(F,[xmin(1),xmax(1)]); grid on hold on plot(X,Fit,'r*') title('抗体的最终位置分布图') xlabel('x') ylabel('f(x)') end T=[]; %把零时存放抗体的集合清空 [FS,Affinity]=sort(Fit,'descend'); %把第t代的函数值Fit按从小到大的顺序排列并存放到FS中 XT=X(Affinity(end-mn+1:end)); %把第t代的函数值的坐标按从小到大的顺序排列并存放到XT中 FT=FS(end-mn+1:end); %从FS集合中取后mn个第t代的函数值按原顺序排列并存放到FT中 FM=[FM FT(end)]; %把第t代的最优函数值加到集合FM中 %克隆(复制)操作,选择mn个候选抗体进行克隆,克隆数与亲和度成正比,AAS是每个候选抗体克隆后在T中的开始坐标 [T,AAS]=ReproduceFun(mn,cfactor,m,Affinity,A,T); %高频变异操作,变异概率反比于抗体的亲和度 T=Hypermutation(T,n,pMutate,xmax,xmin); %把以前的抗体保存到临时克隆群体T里 AF1=fliplr(Affinity(end-mn+1:end)); %从大到小重新排列要克隆的mn个原始抗体 T(AAS,:)=A(AF1,:); %把以前的抗体保存到临时克隆群体T里%从临时抗体集合T中根据亲和度的值选择mn个(多峰函数的解决) X=DecodeFun(T(:,1:22),xmin,xmax); Fit=eval(F); AAS=[0 AAS]; FMN=[FMN mean(Fit)]; for i=1:mn [OUT(i),BBS(i)]=min(Fit(AAS(i)+1:AAS(i+1))); %克隆子群中的亲和度最大的抗体被选中 BBS(i)=BBS(i)+AAS(i); end AF2=fliplr(Affinity(end-mn+1:end)); %从大到小重新排列要克隆的mn个原始抗体 A(AF2,:)=T(BBS,:); %选择克隆变异后mn个子群中的最好个体保存到A里,其余丢失 end disp(sprintf('\n The optimal point is:')); disp(sprintf('\n x: %2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值