MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   广告与招聘 (https://www.labfans.com/bbs/forumdisplay.php?f=64)
-   -   【原创】基于粒子群优化的无线MESH网信道分配算法通用MATLAB函数 (https://www.labfans.com/bbs/showthread.php?t=10926)

greensim 2010-03-06 17:44

【原创】基于粒子群优化的无线MESH网信道分配算法通用MATLAB函数
 
本无线MESH网络中,在分配信道的时候,信道数不可超过接口数,这是造成此问题求解困难的关键,下面的源码是基于冲突图的粒子群优化算法。源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页[url]http://blog.sina.com.cn/greensim)[/url]

function [BESTX,BESTY,ALLX,ALLY]=MNCAPSO(N,M,Alpha1,Alpha2,Alpha3,G,Gc,VA,VB,K,R)
%% 基于粒子群优化的无线MESH网信道分配算法通用MATLAB函数
%% 输入参数列表
% N 粒子群规模
% M 迭代次数
% Alpha1 向历史最优个体学习的控制系数
% Alpha2 向上一代最优个体学习的控制系数
% Alpha3 随机游动控制系数
% G 网络邻接矩阵
% Gc 冲突图邻接矩阵
% VA 对偶图各边的起点在原图中对应的节点标号
% VB 对偶图各边的终点在原图中对应的节点标号
% K 总的信道数目
% R 网络节点的接口数目,NodeNum×1列向量
% GreenSim团队原创作品,转载请注明
% Email:[email protected]
% GreenSim团队主页:[url]http://blog.sina.com.cn/greensim[/url]
% [color=red]欢迎访问GreenSim——算法仿真团队→[url=http://blog.sina.com.cn/greensim]http://blog.sina.com.cn/greensim[/url][/color]
%% 输出参数列表
% BESTX M×1细胞结构,每一个元素是EdgeNum×1向量,记录每一代的最优个体
% BESTY M×1向量,记录每一代的最优个体的评价函数值
% ALLX M×1细胞结构,每一个元素是EdgeNum×N向量,记录全部个体
% ALLY M×N矩阵,记录全部个体的评价函数值

%% 第一步:初始化
NodeNum=size(G,1);%网络节点的个数
Degree=zeros(NodeNum,1);%网络节点的度数向量
%计算节点度数
for i=1:NodeNum
Gi=G(i,:);
p1=find(Gi==1);
Degree(i)=length(p1);
end
EdgeNum=size(Gc,1);%网络边的个数
%输出变量初始化
ALLX=cell(M,1);
ALLY=zeros(M,N);
BESTX=cell(M,1);
BESTY=zeros(M,1);
%粒子群初始化
farm=zeros(EdgeNum,N);
for i=1:N
farm(:,i)=unidrnd(K,EdgeNum,1);
end
%历史最优个体和当代最优个体初始化
DY=zeros(1,N);%适应度函数
for i=1:N
DY(i)=ObjFun(farm(:,i),Gc);
end
minDY=min(DY);
posminDY=find(DY==minDY);
DDZY=farm(:,posminDY(1));
LSZY=DDZY;
FDD=minDY;
FLS=minDY;

%% 第二步:迭代过程
k=1;
while k<=M
newfarm=farm;
disp(k)
for i=1:N
x1=farm(:,i);
x2=SpeciAdd(x1,LSZY,Alpha1);%向历史最优个体学习
x3=SpeciAdd(x2,DDZY,Alpha2);%向当代最优个体学习
x4=SpeciAdd(x3,unidrnd(K,EdgeNum,1),Alpha3);%随机扰动
x5=ReCorrect(x4,G,Gc,VA,VB,K,R);%校正个体以满足约束
newfarm(:,i)=x5;
end
%更新当代最优和历史最优
for i=1:N
DY(i)=ObjFun(newfarm(:,i),Gc);
end
minDY=min(DY);
posminDY=find(DY==minDY);
newDDZY=farm(:,posminDY(1));
newFDD=minDY;
if newFDD<FLS
LSZY=newDDZY;
FLS=newFDD;
end
DDZY=newDDZY;
FDD=newFDD;
farm=newfarm;
%更新记录
BESTX{k}=LSZY;
BESTY(k)=FLS;
ALLX{k}=farm;
ALLY(k,:)=DY;
k=k+1;
end


所有时间均为北京时间。现在的时间是 19:48

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