1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWVmpdu
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。
4.部分源码
...........................................................................
%初始参数设置
M = 5;
N = 3;
%表示子任务Ti的任务量
Ci = floor(1*rand(1,M)+10);
%表示通信任务Eij的任务量
Cij = floor(1*rand(M,M)+10);
%节点完成任务的平均速度
v = 25;
%节点间单位通信量所需要的时间
fai = 0.1;
%节点PEi上的最大任务吞吐量
ECTLj = floor(5*ones(N,1)+35);
%客户允许完成任务的最长时间
L0 = 100;
lemda1 = 0.2;
lemda2 = 0.1;
%下面的变量是通过优化得到的
%为0-1变量,取1时,表示任务Ti分到了节点PEj上
%初始设置,通过随机方式产生
xij = zeros(M,N);
for i = 1:M
tmps = rand(1,N);
[V,I] = max(tmps);
xij(i,I) = 1;
end
%为0-1变量,取1时,表示任务Ti和Tj分到了同一个节点上
rij = zeros(M,M);
for i = 1:M
t1 = xij(i,:);
ind1 = find(t1 == 1);
for j = 1:M
t2 = xij(j,:);
ind2 = find(t2 == 1);
if ind1 == ind2
rij(i,j) = 1;
end
end
end
%在系统节点吞吐量方面,节点wij分配的权重,按历史交易信誉度确定
wj = 1/N*ones(1,N);
%**************************************************************************
%**************************************************************************
ind1 = 0;
for a=1:NIND/3
ind1 = ind1 + 1;
MINX = func_object1(Ci,v,fai,rij,Cij,M);
J1(ind1,1) = 1/(MINX+0.001);
end
ind2 = 0;
for a=1:NIND/3
ind2 = ind2 + 1;
MINY = func_object2(Ci,lemda1,lemda2,rij,Cij,M);
J2(ind2,1) = 1/(MINY+0.001);
end
ind3 = 0;
for a=1:NIND/3
ind3 = ind3 + 1;
MAXZ = func_object3(wj,ECTLj,Ci,lemda1,xij,lemda2,rij,Cij,M,N);
J3(ind3,1) = 1/(MAXZ+0.001);
end
%**************************************************************************
%**************************************************************************
Objv1 = J1;
Objv2 = J2;
Objv3 = J3;
Objv = [Objv1;Objv2;Objv3];
gen = 0;
while gen < MAXGEN;
gen
%目标1
FitnV1 = ranking(Objv1);
Selch1 = select('sus',Chrom(1:NIND/3,:),FitnV1);
%目标2
FitnV2 = ranking(Objv2);
Selch2 = select('sus',Chrom(NIND/3+1:2*NIND/3,:),FitnV2);
%目标3
FitnV3 = ranking(Objv3);
Selch3 = select('sus',Chrom(2*NIND/3+1:end,:),FitnV3);
Selch = [Selch1;Selch2;Selch3];
Selch = recombin('xovsp', Selch,0.9);
Selch = mut( Selch,0.1);
phen = bs2rv(Selch,FieldD);
ind1 = 0;
..............................................................................
xij = [w1_NIND(ind1), w2_NIND(ind1), w3_NIND(ind1);
w4_NIND(ind1), w5_NIND(ind1), w6_NIND(ind1);
w7_NIND(ind1), w8_NIND(ind1), w9_NIND(ind1);
w10_NIND(ind1), w11_NIND(ind1), w12_NIND(ind1);
w13_NIND(ind1), w14_NIND(ind1), w15_NIND(ind1)];
%为0-1变量,取1时,表示任务Ti和Tj分到了同一个节点上
rij = zeros(M,M);
for i = 1:M
t1 = xij(i,:);
ind1 = find(t1 == 1);
for j = 1:M
t2 = xij(j,:);
ind2 = find(t2 == 1);
if ind1 == ind2
rij(i,j) = 1;
end
end
end
%计算对应的目标值
MAXZ = func_object3(wj,ECTLj,Ci,lemda1,xij,lemda2,rij,Cij,M,N);
J3(ind3,1) = 1/MAXZ;
end
Objvsel1 = J1;
Objvsel2 = J2;
Objvsel3 = J3;
%多目标优化
Objvsel =[Objvsel1 ;Objvsel2 ;Objvsel3];
[Chrom,Objv] = reins(Chrom,Selch,1,1,Objv,Objvsel);
gen = gen+1;
%多目标收敛效果
fitness1(gen)= mean(Objv(1:NIND/3));
fitness2(gen)= mean(Objv(NIND/3+1:2*NIND/3));
fitness3(gen)= mean(Objv(2*NIND/3+1:end));
end
A368