您现在的位置:首页 >> 智能优化 >> 内容

基于遗传优化GA的三目标优化仿真

时间:2023/2/16 23:02:05 点击:

  核心提示:A368,包括程序操作录像...

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

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168