您现在的位置:首页 >> ★免费资源 >> 源码下载 >> 内容

MATLAB代做-python代做-FPGA代做- PSO算法

时间:2019-6-1 3:47:11 点击:

  核心提示:MATLAB代做-python代做-FPGA代做- PSO算法...
%标准PSO,2个目标函数f1和f2
%调用子函数ParetoC.m计算当前非劣解集 ,c1,c2为常数,w线性递减
 
clear all;
clc;
tic
%---------初始化基本参数----------%    
format long; %long 输出结果是长型,short是短型
a=0;  %搜索空间左界限
b=1;   %搜索空间右界限
vmax=0.25*(b-a);       
N=100;               %群体规模
c1=2;%1.2;             %学习因子c1 
c2=2;%1.2;             %学习因子c2 
wmax=0.9;           %最大权重
wmin=0.4;           %最小权重
D=30;                 %待优化问题的维数   
Tmax=100;            %最大迭代次数
Py=zeros(N,2);    
A=zeros(N,2);      
Xa=[];

%---------初始化粒子速度和位置----------%
for i=1:N                   
    for j=1:D
        x(i,j)=rand(1);  
        v(i,j)=0; 
    end
end


%---------计算两个目标函数的适应值,初始化个体极值Py(i)=(f1,f2)----------%
for i=1:N                           %初始化个体极值
    Py(i,1)=f1(x(i,1:D));           %计算目标f1的适应值      
    Py(i,2)=f2(x(i,1:D));           %计算目标f2的适应值
    Xy(i,1:D)=x(i,1:D);             %记录个体极值的坐标位置
    A(i,1)=Py(i,1);                 
    A(i,2)=Py(i,2);
    Xa=[Xa;x(i,1:D)];               
end
    disp('Xa=')
    Xa
%----------A集合成员的支配关系比较,得到当前的非支配解集C----------%
[C,Xc]=ParetoC(A,Xa);      
    disp('Xc=')
    Xc
%----------从C中随机取一个值,将其位置值赋给Pg----------%
B=C;Xb=Xc;          %存放最终非劣解
%n0=randint(1,1,[1,size(B,1)]);     
%Pg=Xb(n0,2:D);        

Pg=leader(B,Xb);

clear('A');  
%----------主循环,迭代过程----------%
for t=1:Tmax                           
    Xa=[];C=[];Xc=[];
    if ~mod(t,10)
        fprintf('current iter:%d\n',t)
    end
    w=wmax-(wmax-wmin)*t/Tmax; 
    for i=1:N                             
        v(i,2:D)=w*v(i,2:D)+c1*rand*(Xy(i,2:D)-x(i,2:D))+c2*rand*(Pg-x(i,2:D)); 
        for j=2:D
                if v(i,j)>vmax
                   v(i,j)=vmax;
                elseif v(i,j)<-vmax
                       v(i,j)=-vmax;
                end
        end
        x(i,2:D)=x(i,2:D)+v(i,2:D); 
        for j=1:D
            if(x(i,j)>b)   x(i,j)=b;   end   
            if(x(i,j)<a)   x(i,j)=a;   end    
        end
        
        %----------计算得到新的目标向量集A----------%
        A(i,1)=f1(x(i,1:D));
        A(i,2)=f2(x(i,1:D));
        Xa=[Xa;x(i,1:D)]; 
        
        %----------更新个体极值Py(i)----------%
        if ((A(i,1)<Py(i,1))&&(A(i,2)<=Py(i,2)))        
            Py(i,1)=A(i,1); Py(i,2)=A(i,2);
            Xy(i,1:D)=x(i,1:D);   
        elseif ((A(i,1)<=Py(i,1))&&(A(i,2)<Py(i,2)))    
               Py(i,1)=A(i,1); Py(i,2)=A(i,2);
               Xy(i,1:D)=x(i,1:D); 
        elseif ((Py(i,1)<A(i,1))&&(Py(i,2)<=A(i,2)))       
                Py(i,1)=Py(i,1);Py(i,2)=Py(i,2);Xy(i,1:D)=Xy(i,1:D);
        elseif ((Py(i,1)<=A(i,1))&&(Py(i,2)<A(i,2)))         
                 Py(i,1)=Py(i,1);Py(i,2)=Py(i,2);Xy(i,1:D)=Xy(i,1:D);
        else                    
            m=randint(1,1,[1,2]);
            if m==1
               Py(i,1)=A(i,1); Py(i,2)=A(i,2);
               Xy(i,1:D)=x(i,1:D);
            end
        end
    end

    %----------判断A中成员的支配关系得到新的当前非劣解集C----------%
    [C,Xc]=ParetoC(A,Xa);
            
    %----------更新B----------%
    for i=1:size(B,1)
        C=[C;B(i,:)];    
        Xc=[Xc;Xb(i,:)];
    end
    [B,Xb]=ParetoC(C,Xc);
    if size(B,1)>100  %%要修改
    n1=randint(100,1,[1,size(B,1)]);
    B=B(n1(:),:);   %%
    Xb=Xb(n1(:),:);
    end
    disp('Xb=')
    Xb
    %----------更新Pg----------%
    %n=randint(1,1,[1,size(B,1)]);      
    %Pg=Xb(n,2:D);                     
    Pg=leader(B,Xb);
    %disp('Pg')
    %size(Pg)
    clear('A');
    %---------出图,每个1代显示一次----------%
    if mod(t,20)==0
           plot(B(:,1),B(:,2),'ro','linewidth',1.5) 
           xlabel('f1(x)');ylabel('f2(x)');
           grid on
        %else
            %plot(B(:,1),B(:,2),'ro','linewidth',1.5) 
            %xlabel('f1(x)');ylabel('f2(x)');
            %grid on
            title(strcat('迭代',num2str(t),'次后的Pareto非劣解'));
        end
        %title(strcat('迭代',num2str(t),'次后的Pareto非劣解'));
        %pause(0.2)
end
toc
save solutionWW-ZDT1-MOPSOceshi.txt Xb -ASCII
save solution-ZDT1-MOPSOceshi.txt B -ASCII
%----------最终非劣解集的结果以图形方式输出---------%
%plot(B(:,1),B(:,2),'ro','linewidth',1.5); 
%xlabel('f1(x)');
%ylabel('f2(x)');
%title(strcat('迭代',num2str(t),'次后的Pareto非劣解'));
%grid on

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:



   
  

Tags:PSO算法 
作者:PSO算法 来源:PSO算法
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment