24小时热门版块排行榜    

查看: 457  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0703化学求调剂 +4 奶油草莓. 2026-03-22 5/250 2026-03-23 19:37 by pswait
[考研] 333求调剂 +3 ALULU4408 2026-03-23 3/150 2026-03-23 19:04 by macy2011
[考研] 北科281学硕材料求调剂 +8 tcxiaoxx 2026-03-20 9/450 2026-03-23 12:16 by tcxiaoxx
[考研] 298求调剂 +8 上岸6666@ 2026-03-20 8/400 2026-03-23 11:02 by laoshidan
[考研] 333求调剂 +6 87639 2026-03-21 10/500 2026-03-23 10:41 by Iveryant
[考研] 307求调剂 +3 余意卿 2026-03-21 3/150 2026-03-23 10:32 by Iveryant
[考研] 求调剂材料学硕080500,总分289分 5+3 @taotao 2026-03-19 21/1050 2026-03-23 10:17 by 冠c哥
[考研] 材料与化工085600,总分304,本科有两篇sci参与,求调剂 +4 幸运的酱酱 2026-03-22 5/250 2026-03-22 20:15 by edmund7
[考研] 306求调剂 +5 来好运来来来 2026-03-22 5/250 2026-03-22 16:17 by BruceLiu320
[考研] 289求调剂 +7 怀瑾握瑜l 2026-03-20 7/350 2026-03-22 15:57 by ColorlessPI
[考研] 275求调剂 +6 shansx 2026-03-22 8/400 2026-03-22 15:27 by barlinike
[考研] 0856材料专硕353求调剂 +4 NIFFFfff 2026-03-20 4/200 2026-03-22 09:49 by 2026paper
[基金申请] 学校已经提交到NSFC,还能修改吗? 40+4 babangida 2026-03-19 9/450 2026-03-21 16:12 by babangida
[考研] 085700资源与环境308求调剂 +12 墨墨漠 2026-03-18 13/650 2026-03-21 01:42 by JourneyLucky
[考研] 一志愿华南师大 070300(化学)304分求调剂 +3 0703武芊慧雪304 2026-03-18 3/150 2026-03-21 00:48 by JourneyLucky
[考研] 294求调剂材料与化工专硕 +15 陌の森林 2026-03-18 15/750 2026-03-20 23:28 by JourneyLucky
[考研] 一志愿 西北大学 ,070300化学学硕,总分287,双非一本,求调剂。 +4 晨昏线与星海 2026-03-19 4/200 2026-03-20 22:15 by JourneyLucky
[考研] 一志愿 南京航空航天大学大学 ,080500材料科学与工程学硕 +5 @taotao 2026-03-20 5/250 2026-03-20 20:16 by JourneyLucky
[考研] 085410人工智能专硕317求调剂(0854都可以) +4 xbxudjdn 2026-03-18 4/200 2026-03-20 09:07 by 不168
[考研] 材料考研调剂 +3 xwt。 2026-03-19 3/150 2026-03-19 11:22 by w沐阳w
信息提示
请填处理意见