• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2023-12-18
  • 语言: Matlab
  • 标签: MATLAB  

资源简介

有约束的基于适应度和连续世代策略的混沌自适应粒子群算法,利用混沌系统产生混沌粒子群,利用混合自适应策略调节每个粒子的惯性因子和种群规模,利用惩罚函数法去处理约束条件,融合多种改进方案,实现了收敛速度和收敛精度的良好均衡。

资源截图

代码片段和文件信息

function [gbestxmfvMWn]=yueshu_APSO_FCG_norm(testNc1c2MwmaxwminxmaxxminymaxyminNmaxNmin)
%有约束的基于适应度和连续世代策略的自适应粒子群算法:调节w、N初始化为范围内随机
%test函数为增广目标函数
%停止条件为:最大迭代次数和连续9次最优适应度没有更新
%全局最优增广适应度:gbest
%目标函数的最小值的自变量值:xm
%目标函数的最小值:fv
%最大迭代次数:M
%粒子数目动态轨迹:n
%test增广适应度函数
%粒子数目初始值:N
%学习因子1:c1
%学习因子2:c2
%最大权重:wmax
%最小权重:wmin
%优化变量范围:wmax、wmin、ymaxymin

format long;
%% 在粒子范围内随机初始化
x1=10*rand(N1);
x2=10*rand(N1);
x=[x1x2];
v=rand(N2);
W=zeros(MN);%存放惯性因子,方便绘图
n=zeros(M1);%存放种群规模
gbest=zeros(1M);%预定义全局最优适应度
%% 求解有约束的初始化粒子的历史最优适应度和位置
for i=1:N
    f(i)=test(x(i:)0xmaxxminymaxymin);%求解增广适应度
    p(i:)=x(i:);%历史最优
end
%比较适应度
pg=x(N:);     %pg为全局最优
a=N;
for i=1:(N-1)
    if f(i)        pg=x(i:);
        v1=v(i:);%存放历史最优位置的速度
        a=i;
    end
end

%% 粒子群算法更新
for t=1:M 
    n(t)=N;
    for j=1:N 
        fv(j)=test(x(j:)txmaxxminymaxymin);  %计算增广目标函数
    end              
%% 自适应惯性因子           
    fvag=sum(fv)/N;         %适应度平均值
    fmin=min(fv);           %适应度最小值
    for i=1:N
        if fv(i)            w=wmin+(fv(i)-fmin)*(wmax-wmin)/(fvag-fmin);%减少w
        else
            w=wmax;%适应度差,增强全局
        end
        W(ti)=w;%惯性因子
%% 更新位置和速度                 
        v(i:)=w*v(i:)+c1*rand*(p(i:)-x(i:))+c2*rand*(pg-x(i:));
        x(i:)=x(i:)+v(i:);  
%% 更新有约束的历史最优和全局最优        
        if test(x(i:)txmaxxminymaxymin)            f(i)=test(x(i:)txmaxxminymaxymin);%历史最优适应度
            p(i:)=x(i:);%历史最优位置
            a=i;
        end
        if f(i)            pg=p(i:);
            v1=v(i:);%全局最优位置的速度
        end         
    end
    gbest(t)=test(pgtxmaxxminymaxymin);%全局最优适应度
%% 连续世代调整种群规模
    if t>=4     %更新4代及其以上时候使用连续世代策略(因为设定连续三代,所以从第四代开始统计
        if gbest(t)==gbest(t-1)&&gbest(t)

评论

共有 条评论