微信:HuangL1121
QQ号:1224848052
团队:MATLAB代做|MATLAB专业代做|FPGA代做|FPGA专业代做
地址:北京市-朝阳区-双柳北街18号院
当前位置:首页 > 技术资讯 > PSO的全局最优值计算

PSO的全局最优值计算

clear
warning off;
data=textread('dat.txt');   
n=data(1,1);
SB=data(1,2);
SBV=data(1,3);
t=find(data(:,1)==0);
PQn=data([2:t(1)-1],:);
PGmin=PQn(:,6)./SB;
PGmax=PQn(:,7)./SB;
PLmax=3*PQn(:,9)./SB;
PLmin=zeros(n,1);
L=data([t(1)+1:t(2)-1],:);
br=size(L,1);
L_i=L(:,1);
L_j=L(:,2);
r=L(:,3);
x=L(:,4);
b=1./x;
b0=L(:,5);
Flmax=L(:,6)./SB;
Y=sparse(L_i,L_j,-b,n,n)+sparse(L_j,L_i,-b,n,n)+sparse(L_i,L_i,b+b0/2,n,n)+sparse(L_j,L_j,b+b0/2,n,n);  
%--------------------------------------------------------------------------
kbr=2;
if kbr<br+1
kge=L(kbr,2);
PGmin(kge,1)=10^(-11);
PGmax(kge,1)=PGmin(kge,1);
Flmax(kbr,:)=0;
kai_i=L(kbr,1);
kai_j=L(kbr,2);
kai_y=Y(kai_i,kai_j)+10^(-10);
deltY=sparse(kai_i,kai_j,-kai_y,n,n)+sparse(kai_i,kai_i,kai_y,n,n)+sparse(kai_j,kai_j,kai_y,n,n)+sparse(kai_j,kai_i,-kai_y,n,n);
Y=Y+deltY;
end
%------------------------------------------------------------
lb=[PGmin;PLmin];
ub=[PGmax;PLmax];
speedmax=1;
speedmin=-1;
D=2*n;          %搜索空间维数
N=30;          %粒子群规模
MaxDT=500;    %最大迭代次数
wini=0.9;      %惯性权重w
wend=0.4;
c1=1.49618;    %学习因子c1
c2=1.49618;    %学习因子c2
%--------------------------------------------
M=1;
Pcut=zeros(1,M);
for m=1:M
for i=1:1:N
  for j=1:1:D
    x(i,j)=unifrnd(lb(j),ub(j),1,1);
    v(i,j)=rand;
  end
end
Pbest=x;%每个粒子当前最好的位置
%----------找全局最优----------------
for i=1:N
    result=fi(PQn,SB,L,Y,kbr,Flmax,x(i,:));
    fPbest(i)=result(1,1);
end
fGbest=fPbest(N);%先定义全局最优为第N个粒子
for i=1:(N-1)
   if fPbest(i)<fGbest
       Gbest=x(i,:);   %Gbest为全局最优
       fGbest=fPbest(i);%全局最优粒子的适应度函数值
   end
end
%----------------------------------
%粒子速度和位置跟新
k=0;
while k<MaxDT
    w=(wini-wend)*(MaxDT-k)/MaxDT+wend;
for i=1:N
    for j=1:D
        v(i,j)=w*v(i,j)+c1*rand*(Pbest(i,j)-x(i,j))+c2*rand*(Gbest(j)-x(i,j));
        x(i,j)=x(i,j)+v(i,j);  %中间代mid
       if v(i,j)>speedmax
        v(i,j)=speedmax;
       elseif v(i,j)<speedmin
        v(i,j)=speedmin;
      end
      if x(i,j)>ub(j) %ub,Ib
          x(i,j)=ub(j);
      elseif x(i,j)<lb(j)
          x(i,j)=lb(j);
      end
    end
    result=fi(PQn,SB,L,Y,kbr,Flmax,x(i,:));
    newfPbest(i)=result(1,1);
    if newfPbest(i)<fPbest(i)
        Pbest(i,:)=x(i,:);
        fPbest(i)=newfPbest(i);
    end
  if fPbest(i)<fGbest
      fGbest=fPbest(i);
      Gbest=x(i,:);
  end
end
k=k+1;
end
PL0=2*PQn(:,3)./SB;
PG=Gbest(1,1:n);
PL=2*Gbest(1,n+1:2*n);
for p=1:n  
Pcut(m)=Pcut(m)+PL0(p)-PL(p);
end
end










上一篇:串口的verilog程序

版权所有: MATLAB代做|MATLAB专业代做|FPGA代做|FPGA专业代做 Copyright © 2018 All rights reserved.
微信:HuangL1121 QQ:1224848052
地址:北京市-朝阳区-双柳北街18号院

扫一扫,关注我们