Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 广告与招聘
广告与招聘 这里是发招聘信息和广告的地方
回复
 
主题工具 显示模式
旧 2010-03-06, 17:50   #1
greensim
普通会员
 
注册日期: 2008-10-06
年龄: 25
帖子: 53
声望力: 18
greensim 正向着好的方向发展
默认 【原创】基于遗传算法的OFDM自适应资源分配算法

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
greensim 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 00:01


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.