24小时热门版块排行榜    

查看: 453  |  回复: 0

neos_leung

新虫 (初入文坛)

[求助] 期刊文章《基于空间缩放和吸引子的粒子群优化算法》的算法实现问题

文章来源  《计算机学报》 第34卷 第1期 2011年1月
《基于空间缩放和吸引子的粒子群优化算法》

具体问题是这样的。
我按照文章的算法用matlab编程语言实现了SzAPSO算法,但是在使用CEC2005的测试函数的时候算法的性能很低,收敛速度过快无法有效地进行全局搜索,在2维以上算法可以说是已经很难找到最优解了。
然后我自己实现了CEC2005的第一个sphere和第二个schwefel函数,实现的算法马上就体现出来比经典粒子群算法高效很多的性能。
所以我想问CEC2005提供的测试函数的实现代码是不是有什么特别,因为我之前实现的经典PSO算法在调用benchmark_func函数的时候并没有这样的问题,但是在我自己写的测试函数上测试的时候SzAPSO明显比经典的PSO算法有优越很多的性能。

SzAPSO_FR.m文件是算法的主程序
SzAPSO.m是算法的实现函数,在这个函数里面再再调用benchmark_func测试函数和我自己写的函数
schwefel_PSO.m是我自己写的函数,直接替换SzAPSO.m调用的测试函数名就可以使用了。
matlab-files.zip是CEC2005附的测试函数matlab实现代码

期刊文章《基于空间缩放和吸引子的粒子群优化算法》的算法实现问题

算法主程序
SzAPSO_FR.m
CODE:
clear all;
clc;
format short;

D=30;
P=15;
iter_max=5000;
Xmin=-100;
Xmax=100;
func_num=2;     
pop=rand(P,D)*200-100;
pop_val=ones(1,P);
global initial_flag
initial_flag=0;

SzAPSO(pop,pop_val,D,P,iter_max,Xmin,Xmax,func_num);

算法实现函数
SzAPSO.m
CODE:
function [Pg_val,Pg,fitcount] = SzAPSO(pop,  pop_val, D, P,     iter_max, Xmin,  Xmax,  func_num)
                                       %粒子 适应值   维 粒子数 最大迭代  最小值 最大值 函数代号

popbest = pop;  %记录局部最优解
Pg = pop(1,:);
Pg_val = benchmark_func(pop(1,:), func_num);

for i = 1:P                         %初始化粒子最优和全局最优
    pop_val(i) = benchmark_func(pop(i,:), func_num);
    if pop_val(i) < Pg_val
        Pg_val = pop_val(i);
        Pg = pop(i,:);
        end
end

fitcount = 0;
k = 100;

while fitcount<iter_max
    z = k * rand;
    for i = 1:P
        if abs(pop_val(i)-Pg_val) < 1e-6               %判断粒子是不是最优,计算吸引子Pa
            Pa = Pg * (rand+0.5) + (rand*2-1);          %围绕全局最优抖动
        else
            Pa = popbest(i)+(Pg-popbest(i)) * rand;     %局部最优和全局最优加权平均
        end
        
        for j = 1:D
            if Pa(j) > Xmax
                Pa(j) = Xmax;
                if pop(i,j) > Pa(j)
                    pop(i,j) = Xmax;
                else
                    pop(i,j) = update(pop(i,j),Pa(j),z);
                end
            elseif Pa(j) < Xmin
                Pa(j) = Xmin;
                if pop(i,j) < Pa(j)
                    pop(i,j) = Xmin;
                else
                    pop(i,j) = update(pop(i,j),Pa(j),z);
                end
            else
                pop(i,j) = update(pop(i,j),Pa(j),z);
            end
        end
        
        pop_val(i) = benchmark_func(pop(i,:), func_num);        %更新全局最优
        
        if pop_val(i) < benchmark_func(popbest(i), func_num)  %更新局部最优
            popbest(i) = pop(i);
        end
        
        if pop_val(i) < Pg_val      %更新全局最优
            Pg_val = pop_val(i);
            Pg = pop(i,:);
        end
        
    end

    fprintf('%f ,  %d\n\n',Pg_val,fitcount);
    if Pg_val<1e-6      %满足精度结束
        break;
    end
    fitcount = fitcount + 1;
%       if fitcount == 1000
%          keyboard;
%       end
end

disp('************************function*****************************');
disp(func_num);
disp('The best result is:')
disp(Pg_val);
disp(fitcount);
disp('*************************************************************');
keyboard;
clear all;
end

function num = update(Xid,Pa,z)     %更新后会有超界的情况(但是取模后在加上Pa应该是一定在取值空间内才对)

if Xid < Pa
    num = mod((Xid-Pa),((Pa - -100)*z))/z+Pa;
else
    num = mod((Xid-Pa),((Pa * -1 +100)*z))/z+Pa;
end

end

我自己另外写的测试函数,就是matlab里面的schwefel函数,功能一样(把算法实现函数里的benchmark_func替换成schwefel_PSO就可以调用)
schwefel_PSO.m
CODE:
function num = schwefel_PSO(pop,b)

num = 0;
a = length(pop);
temp(a) = 0;
for i = 1:a
    for j = 1:i
        temp(i) = temp(i) + pop(j);
    end
    num = num + temp(i)^2;
end

end

回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 基于空间缩放和吸引子的粒子群优化算法.pdf
  • 2014-10-12 16:36:10, 4.93 M
  • 附件 2 : matlab-files.zip
  • 2014-10-12 17:07:36, 1.58 M

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 neos_leung 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 欢迎采矿、地质、岩土、计算机、人工智能等专业的同学报考 +3 pin8023 2026-02-28 5/250 2026-03-02 00:24 by 花YOU重开日
[考研] 284求调剂 +8 天下熯 2026-02-28 8/400 2026-03-02 00:15 by 暮雨星晴
[考研] 求调剂 +5 yunziaaaaa 2026-03-01 6/300 2026-03-01 23:57 by ccp273206157
[考研] 292求调剂 +6 yhk_819 2026-02-28 6/300 2026-03-01 23:23 by 向上的胖东
[考研] 江苏省农科院招调剂1名 +3 Qwertyuop 2026-03-01 3/150 2026-03-01 23:18 by aaadim
[基金申请] 成果系统访问量大,请一小时后再尝试。---NSFC啥时候好哦,已经两天这样了 +4 NSFC2026我来了 2026-02-28 4/200 2026-03-01 22:37 by 铁门栓
[硕博家园] 博士自荐 +7 科研狗111 2026-02-26 11/550 2026-03-01 22:24 by 哲平L
[考研] 298求调剂 +6 axyz3 2026-02-28 6/300 2026-03-01 19:00 by 18137688336
[考研] 272求调剂 +6 材紫有化 2026-02-28 6/300 2026-03-01 18:58 by 18137688336
[考博] 26申博 +4 想申博! 2026-02-26 6/300 2026-03-01 17:32 by 想申博!
[考研] 化工专硕348,一志愿985求调剂 +5 弗格个 2026-02-28 8/400 2026-03-01 17:25 by sunny81
[考研] 285求调剂 +8 满头大汗的学生 2026-02-28 8/400 2026-03-01 16:47 by caszguilin
[考研] 311求调剂 +6 亭亭亭01 2026-03-01 6/300 2026-03-01 15:41 by 324616
[考研] 307求调剂 +5 wyyyqx 2026-03-01 5/250 2026-03-01 15:21 by Fff-1
[考研] 材料工程274求调剂 +3 Lilithan 2026-03-01 3/150 2026-03-01 14:58 by ms629
[考研] 302材料工程求调剂 +4 Doleres 2026-03-01 5/250 2026-03-01 11:52 by liqiongjy
[论文投稿] Optics letters投稿被拒求助 30+3 luckyry 2026-02-26 4/200 2026-03-01 09:06 by babero
[基金申请] 面上模板改不了页边距吧? +5 ieewxg 2026-02-25 6/300 2026-03-01 00:10 by addressing
[考研] 304求调剂 +3 52hz~~ 2026-02-28 5/250 2026-03-01 00:00 by 52hz~~
[硕博家园] 【博士招生】太原理工大学2026化工博士 +4 N1ce_try 2026-02-24 8/400 2026-02-26 08:40 by N1ce_try
信息提示
请填处理意见