goss_w.m

来自「本人编辑的标准PSO算法」· M 代码 · 共 42 行

M
42
字号
% 高斯分布的累积分部函数,及其演化而来的 w调整函数

%%%%%%%% w高斯分布累积函数调节 %%%%%%%%%%
% function y = Goss_w(iter,iter_max)
clear;clc;
iter_max = 1000;

r = iter_max/10; 
% k=1; u = 0.25; %高斯分布参数调节;
k1 = 0.4; k2 = 0.4; u1 = 0.6; u2 = 0.2; %分段高斯分布参数调节;
myfun = @(t)exp( -(t-iter_max/4).^2/(2*r^2) );

%%%%%%% 测试高斯分布 %%%%%%%% 
% for iter = 1:iter_max 
%     y(iter) = k*( 1/( r*sqrt(2*pi) ) * quad( myfun,iter,10000 ) )+ u;
% end
% plot(y); grid on; title('高斯分布');
%%%%%%% 测试包含高斯分布的分段曲线 %%%%%%%%
for iter = 1:iter_max
    if iter < iter_max*0.5
        y(iter) = k1*( 1/( r*sqrt(2*pi) ) * quad( myfun,iter,10000 ) )+ u1;
    end
    if  iter_max*0.5 <= iter 
        y(iter) = k2*( 1/( r*sqrt(2*pi) ) * quad( myfun,(iter-iter_max*0.5),10000 ) )+ u2;
    end
end
plot(y); grid on; title('分段高斯分布'); 
%%%%%%%%%% 线性分段曲线测试 %%%%%%%%%%%
% k1 = 0.1;k2=0.8;
%  for iter = 1:iter_max
%     if iter < iter_max*k1
%         y(iter) = 1 - (1-0.7)*iter /(iter_max*k1);
%     end
%     if  iter_max*k1<= iter & iter <= iter_max*k2
%         y(iter) = 0.7 - (0.7-0.5)*(iter-iter_max*k1) /(iter_max*(k2-k1));
%     end
%     if  iter_max*k2 < iter
%         y(iter) = 0.5 - (0.5-0.2)*(iter-iter_max*k2) /(iter_max*(1-k2));
%     end
% end
% plot(y); grid on;;xlabel('迭代次数');ylabel('惯性权重 ω'); title('线性分段分布');

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?