• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: Matlab
  • 标签: matlab  

资源简介

本代码基于matlab开发,是完全自主研发的粒子群算法来求解约束多目标优化万能code,希望对学习的同学有帮助

资源截图

代码片段和文件信息

function PSOfirst()
%% 清空环境
clear;
clc;

%% 参数设置
w=0.9;%权值 将影响PSO 的全局与局部搜优能力, 值较大,全局搜优能力强,局部搜优能力弱;反之,则局部搜优能力增强,而全局搜优能力减弱。
c1=0.1;%加速度,影响收敛速度
c2=0.1;
dim=6;%6维,表示企业数量
swarmsize=100;%粒子群规模,表示有100个解的空间
maxiter=200;%最大循环次数,影响时间
minfit=0.001;%最小适应值
vmax=0.01;
vmin=-0.01;
ub=[0.20.20.20.20.20.2];%解向量的最大限制
lb=[0.010.010.010.010.010.01];%解向量的最小限制

%% 种群初始化
range=ones(swarmsize1)*(ub-lb);
swarm=rand(swarmsizedim).*range+ones(swarmsize1)*lb;%粒子群位置矩阵
Y1=[33.08;
   21.85; 
   6.19; 
   11.77; 
   9.96; 
   17.15;]; 
Y=Y1./100;%将百分数化为小数
[ymyn]=size(Y);
for i=1:swarmsize  %% YX的约束
    s=swarm(i:);
    ss=s‘;
    while sum(Y.*ss)<0.1*sum(Y)
        ss=rand(dim1).*((ub-lb)‘)+ones(dim1).*((lb)‘);
    end
    swarm(i:)=ss‘;
end
vstep=rand(swarmsizedim)*(vmax-vmin)+vmin;%粒子群速度矩阵
fswarm=zeros(swarmsize1);%预设空矩阵,存放适应值
for i=1:swarmsize
    X=swarm(i:);
    [SUMGG]=jn(X);
    fswarm(i:)=SUMG;
    %fswarm(i:)=feval(jnswarm(i:));%以粒子群位置的第i行为输入,求函数值,对应输出给适应值
end

%% 个体极值和群体极值
[bestfbestindex]=min(fswarm);%求得适应值中的最小适应值,和,其所在的序列
gbest=swarm;%暂时的个体最优解为自己
fgbest=fswarm;%暂时的个体最优适应值
zbest=swarm(bestindex:);%所在序列的对应的解矩阵序列,全局最佳解
fzbest=bestf;%全局最优适应值


%% 迭代寻优
iter=0;
yfitness=zeros(1maxiter);%1行100列矩阵,存放100个最优值的空间矩阵
x1=zeros(1maxiter);%存放x的空间
x2=zeros(1maxiter);
x3=zeros(1maxiter);
x4=zeros(1maxiter);
x5=zeros(1maxiter);
x6=zeros(1maxiter);
while((iterminfit))
    for j=1:swarmsize
        % 速度更新
        vstep(j:)=w*vstep(j:)+c1*rand*(gbest(j:)-swarm(j:))+c2*rand*(zbest-swarm(j:));
        if vstep(j:)>vmax  
            vstep(j:)=vmax;%速度限制
        end
        if vstep(j:)            vstep(j:)=vmin;
        end
        % 位置更新
        swarm(j:)=swarm(j:)+vstep(j:);
        for k=1:dim
            if swarm(jk)>ub(k)
                swarm(jk)=ub(k);%位置限制
            end
            if swarm(jk)                swarm(jk)=lb(k);
            end
        end
       
        % 适应值        
         X=swarm(j:);
         [SUMGG]=jn(X);
         fswarm(j:)=SUMG;
        % 可在此处增加约束条件,若满足约束条件,则进行适应值计算
        
        %
        % 个体最优更新
        if fswarm(j)            gbest(j:)=swarm(j:);%个体最优解更新
            fgbest(j)=fswarm(j);%个体最优值更新
        end
        % 群体最优更新
        if fswarm(j)            zbest=swarm(j:);%群体最优解更新
            fzbest=fswarm(j);%群体最优值更新
        end
    end
    iter=iter+1;
    yfitness(1iter)=fzbest;
    x1(1iter)=zbest(1);%将全局最优解的第1个元素,依次存储,共有MAXITER个
    x2(1iter)=zbest(2);
    x3(1iter)=zbest(3);
    x4(1iter)=zbest(4);
    x5(1iter)=zbest(5);
    x6(1iter)=zbest(6);
end

fzbest
zbest
X=zbest;
[SUMGG]=jn(X);
GGbest=G;GGbest
%% 画图
figure(1)
plot(yfitness‘linewidth‘2)
title(‘最优基尼系数优化曲线‘‘fontsize‘14);
xlabel(‘迭代次数‘‘fontsize‘14);
ylabel(‘基尼系数‘‘fontsize‘14);

figure(2)
plot(x1‘b‘)
hold on
pl

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5099  2013-06-23 17:02  PSO_byself.m
     目录           0  2018-12-02 20:26  __MACOSX\
     文件         212  2013-06-23 17:02  __MACOSX\._PSO_byself.m

评论

共有 条评论