24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3737  |  回复: 1

xiashaoyan

新虫 (正式写手)

[交流] 粒子群算法中的惯性权重的设置地方--w=ws-(ws-we)*i/maxgen;已有1人参与

以下是粒子群算法寻优的程序(程序来自于MATLAB智能算法30个案例分析),惯性权重w=ws-(ws-we)*i/maxgen;是体现粒子继承先前速度的能力,所以感觉下面程序中的一条有点小问题,我觉的V(j,:)=V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:))丢掉w,应该改为V(j,:)=w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:)),但不知道我想的对不对,请前辈们多多指教!



%% 清空环境
clc
clear

%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;

maxgen=300;    %进化次数  
sizepop=20;   %种群规模
Vmax=0.5;
Vmin=-0.5;
popmax=2;
popmin=-2;
ws=0.9;
we=0.4;

for k=1:100
    %% 产生初始粒子和速度
    k
    for i=1:sizepop
        %随机产生一个种群
        pop(i,:)=2*rands(1,2);    %初始种群
        V(i,:)=0.5*rands(1,2);  %初始化速度
        %计算适应度
        fitness(i)=fun(pop(i,:));   %染色体的适应度
    end

    %% 个体极值和群体极值
    [bestfitness bestindex]=max(fitness);
    zbest=pop(bestindex,:);   %全局最佳
    gbest=pop;    %个体最佳
    fitnessgbest=fitness;   %个体最佳适应度值
    fitnesszbest=bestfitness;   %全局最佳适应度值

    %% 迭代寻优
    for i=1:maxgen
   
        w=ws-(ws-we)*i/maxgen;
        
        for j=1:sizepop
        
            %速度更新
            V(j,:)=V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
            V(j,find(V(j,:)>Vmax))=Vmax;
            V(j,find(V(j,:)<Vmin))=Vmin;

            %种群更新
            pop(j,:)=pop(j,:)+V(j,:);
            pop(j,find(pop(j,:)>popmax))=popmax;
            pop(j,find(pop(j,:)<popmin))=popmin;
        
            %适应度值
            fitness(j)=fun(pop(j,:));

        end

        for j=1:sizepop

            %个体最优更新
            if fitness(j) > fitnessgbest(j)
                gbest(j,:) = pop(j,:);
                fitnessgbest(j) = fitness(j);
            end

            %群体最优更新
            if fitness(j) > fitnesszbest
                zbest = pop(j,:);
                fitnesszbest = fitness(j);
            end
        end
        yy(i)=fitnesszbest;   

    end
    s(k,:)=yy;
end
%% 结果分析
for m=1:300
    s(101,m)=sum( s(:,m) )/100;
end
plot(s(101,:),'b-')
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (职业作家)

Matlab专家


小木虫: 金币+0.5, 给个红包,谢谢回帖
本帖仅楼主可见
2楼2019-01-24 01:57:54
已阅   申请计算强帖   回复此楼   编辑   查看我的主页
相关版块跳转 我要订阅楼主 xiashaoyan 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见