资源简介

针对解形式为二进制编码形式的问题的粒子群优化算法matlab源码

资源截图

代码片段和文件信息

function [ Besfi Besi Bfi DIVS ] = BPSO( SizeGc1c2wdeviceprice )
% 基本粒子群优化算法(Particle Swarm Optimization)
% 输入参数
%   c1                学习因子1
%   c2                学习因子2
%   w                 惯性权重
%   G                 最大迭代次数
%   Size              初始化群体个体数目
% 输出参数
%   输出参数
%   Besfi        优化后最优个体适应度
%   pg           最优个体
%   Bfi          每次迭代中最优个体的适应度,1*n向量
%   DIVS         种群多样性

%创建一个进度条以监视优化进度
% hWaitbar=waitbar(0‘开始优化计算...‘‘Name‘[num2str(Size) ‘-‘ num2str(G) ‘-‘ num2str(c1) ‘-‘ num2str(c2) ‘-‘ num2str(w)]);
% set(hWaitbar‘Windowstyle‘‘modal‘);  %窗口锁定最前
% btnCancel = findall(hWaitbar‘style‘‘pushbutton‘); %查找“取消“按钮
% set(btnCancel‘string‘‘取消‘‘fontsize‘10);     %设置“取消“按钮显示字符

%优化对象参数提取
[concodedevicenumcodesizes] = Getcontrolcode( device );   %提取未优化时的运行编码
% D:搜索空间维数(未知数个数)
D=size(concode2);
%搜索范围和个体移动速度限制

Maxx=ones(1D);
Minx=zeros(1D);
Maxv=ones(1D);
Minv=zeros(1D);
% Maxv=(Maxx-Minx)/4;
% Minv=-Maxv;

%------初始化种群的个体 (可以在这里限定位置和速度的范围)------------

for i=1:Size
    for j=1:D
%         x(ij)=rand*(Maxx(j)-Minx(j)+Minx(j));  %随机初始化位置
        v(ij)=rand*(Maxv(j)-Minv(j))+Minv(j);  %随机初始化速度
        x(ij)=round(v(ij));
    end
end

%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
for i=1:Size
    ps(i)=fun(deviceround(x(i:))devicenumcodesizesprice);
    y(i:)=x(i:);
end

pg=round(x(1:));             %Pg为全局最优
Besfi=ps(1);
for i=2:Size
    if ps(i)        pg=round(x(i:));
        Besfi=ps(i);
    end
end
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
for k=1:G
    time(k)=k;
   % bf(t)=fitness(pgp);

  %计算多样性
 S=max(Maxx-Minx)/2;
 for xj=1:1:D
    avgxj(xj)=mean(x(:xj));
 end
 DIVS(k)=0;
 for xi=1:1:Size
     tmpd=0;
     for xj=1:1:D
         tmpd=tmpd+(x(xixj)-avgxj(xj))^2;
     end
     DIVS(k)=DI

评论

共有 条评论