Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
普通会员
注册日期: 2008-10-06
年龄: 25
帖子: 53
声望力: 18 ![]() |
![]()
OFDM自适应资源分配问题(载波、功率等),是一个既含有离散决策变量,又含有连续决策变量的非线性优化模型,且含有较为复杂的非线性约束,因此适合采用智能优化算法进行求解。本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页http://blog.sina.com.cn/greensim)。
function [BESTX1,BESTX2,BESTY,ALLX1,ALLX2,ALLY]=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) % GreenSim团队原创作品,转载请注明 % 欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim %% 输出参数列表 % BESTX1 K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体的第一分量 % BESTX2 K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体的第二分量 % BESTY K×1矩阵,记录每一代的最优个体的评价函数值 % ALLX1 K×1细胞结构,每一个元素是M×N矩阵,记录全部个体的第一分量 % ALLX2 K×1细胞结构,每一个元素是M×N矩阵,记录全部个体的第二分量 % ALLY 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); ALLY=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; ALLY(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 if Pm>rand&&pos(1)~=i farm1(:,i)=unidrnd(KK,M,1); farm2(:,i)=RandSeq(M); end end %disp(k); k=k+1; end
__________________
算法设计、代写程序,欢迎访问GreenSim团队主页→ http://blog.sina.com.cn/greensim |
![]() |
![]() |