基于遗传算法的OFDM自适应资源分配算法MATLAB源码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于遗传算法的OFDM自适应资源分配算法MATLAB源码

OFDM自适应资源分配问题(载波、功率等),是一个既含有离散决策变量,又含有连续决策变量的非线性优化模型,且含有较为复杂的非线性约束,因此适合采用智能优化算法进行求解。

function [BESTX1,BESTX2,BESTY,ALLX1,ALLX2,ALL Y]=GA2(K,N,Pm,H,BBB,P,N0)

%% 本源码实现遗传算法,用于RA准则下的多用户OFDM自适应资源分配

%% 输入参数列表

% K 迭代次数

% N 种群规模,要求是偶数

% Pm 变异概率

% H 信道增益矩阵,K*N的矩阵,表示用户k在子信道n上的信道增益,无单位,取值范围0~1

% BBB 总带宽(Hz)

% P 总功率(W)

% N0 加性高斯白噪声功率谱密度(W/Hz)

%% 输出参数列表

% BESTX1 K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体的第一分量

% BESTX2 K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体的第二分量

% BESTY K×1矩阵,记录每一代的最优个体的评价函数值

% ALLX1 K×1细胞结构,每一个元素是M×N矩阵,记录全部个体的第一分量

% ALLX2 K×1细胞结构,每一个元素是M×N矩阵,记录全部个体的第二分量

% ALL Y K×N矩阵,记录全部个体的评价函数值

%% 第一步

[KK,NN]=size(H);

M=NN;%决策变量个数,子载波个数

farm1=zeros(M,N);%每一列是一个样本

for i=1:N

farm1(:,i)=unidrnd(KK,M,1);

end

farm2=zeros(M,N);%每一列是一个样本

for i=1:N

farm2(:,i)=RandSeq(M);

end

%输出变量初始化

ALLX1=cell(K,1);

ALLX2=cell(K,1);

ALL Y=zeros(K,N);

BESTX1=cell(K,1);

BESTX2=cell(K,1);

BESTY=zeros(K,1);

k=1;%迭代计数器初始化

%% 第二步:迭代过程

while k<=K

%% 以下是交叉过程

newfarm1=zeros(M,2*N);

Ser=randperm(N);%两两随机配对的配对表A=farm1(:,Ser(1));

B=farm1(:,Ser(2));

P0=unidrnd(M-1);

a=[A(1:P0,:);B((P0+1):end,:)];%产生子代a

b=[B(1:P0,:);A((P0+1):end,:)];%产生子代b newfarm1(:,2*N-1)=a;%加入子代种群

newfarm1(:,2*N)=b;

for i=1:(N-1)

A=farm1(:,Ser(i));

B=farm1(:,Ser(i+1));

P0=unidrnd(M-1);

a=[A(1:P0,:);B((P0+1):end,:)];

b=[B(1:P0,:);A((P0+1):end,:)];

newfarm1(:,2*i-1)=a;

newfarm1(:,2*i)=b;

end

FARM1=[farm1,newfarm1];

newfarm2=zeros(M,2*N);

Ser=randperm(N);%两两随机配对的配对表A=farm2(:,Ser(1));

B=farm2(:,Ser(2));

P0=unidrnd(M-1);

a=[A(1:P0,:);B((P0+1):end,:)];%产生子代a

b=[B(1:P0,:);A((P0+1):end,:)];%产生子代b newfarm2(:,2*N-1)=a;%加入子代种群

newfarm2(:,2*N)=b;

for i=1:(N-1)

A=farm2(:,Ser(i));

B=farm2(:,Ser(i+1));

P0=unidrnd(M-1);

a=[A(1:P0,:);B((P0+1):end,:)];

b=[B(1:P0,:);A((P0+1):end,:)];

newfarm2(:,2*i-1)=a;

newfarm2(:,2*i)=b;

end

FARM2=[farm2,newfarm2];

%% 选择复制

SER=randperm(3*N);

FITNESS=zeros(1,3*N);

fitness=zeros(1,N);

for i=1:(3*N)

X1=FARM1(:,i);

X2=FARM2(:,i);

FITNESS(i)=-ObjFun(X1',X2',H,BBB,P,N0);

end

for i=1:N

f1=FITNESS(SER(3*i-2));

f2=FITNESS(SER(3*i-1));

f3=FITNESS(SER(3*i));

if f1<=f2&&f1<=f3

farm1(:,i)=FARM1(:,SER(3*i-2));

farm2(:,i)=FARM2(:,SER(3*i-2));

fitness(:,i)=FITNESS(:,SER(3*i-2));

elseif f2<=f1&&f2<=f3

farm1(:,i)=FARM1(:,SER(3*i-1));

farm2(:,i)=FARM2(:,SER(3*i-1));

fitness(:,i)=FITNESS(:,SER(3*i-1));

else

farm1(:,i)=FARM1(:,SER(3*i));

farm2(:,i)=FARM2(:,SER(3*i));

fitness(:,i)=FITNESS(:,SER(3*i));

end

end

%% 记录最佳个体和收敛曲线

ALLX1{k}=farm1;

ALLX2{k}=farm2;

ALL Y(k,:)=fitness;

minY=min(fitness);

pos=find(fitness==minY);

BESTX1{k}=farm1(:,pos(1));

BESTX2{k}=farm2(:,pos(1));

BESTY(k)=minY;

%% 变异

for i=1:N

相关文档
最新文档