www.gusucode.com > 粒子群算法来求16个经典函数的最小最大值matlab源码程序 > code/testfunctions/f6_bubbles_dyn.m
% f6_bubbles_dyn.m % 2 separate Schaffer's F6 functions, one with min at [-8,-8] and the % other with min at [8,8] % as time goes on, each bubbles magnitude cycles up and down, % they are 180 deg out of phase with each other % % commonly used to test optimization/global minimization problems function [out]=f6_bubbles_dyn(in) persistent tnot % find starting time if ~exist('tnot') | length(tnot)==0 tnot = cputime; end time = cputime/10 - tnot; % calculate offset for whole function %[xc,yc]=spiral_dyn(1,.1); xc = 0; yc = xc; % parse input x = in(:,1) +xc; y = in(:,2) +yc; % bubble centers x1 = -8; y1 = x1; x2 = 8; y2 = x2; % f6 #1 (bubble #1) num = sin(sqrt((x-x1).^2+(y-y1).^2)).^2 - 0.5; den = (1.0+0.01*((x-x1).^2+(y-y1).^2)).^2; f6_1 = (0.5 + num./den).*abs(sin(time+pi/2)); % bubble #1 offset num_ofs = sin(sqrt((10000-x1).^2+(10000-y1).^2)).^2 - 0.5; den_ofs = (1.0+0.01*((10000-x1).^2+(10000-y1).^2)).^2; f6_1_ofs = (0.5 + num_ofs./den_ofs).*abs(sin(time+pi/2)); % f6 #2 (bubble #2) num = sin(sqrt((x-x2).^2+(y-y2).^2)).^2 - 0.5; den = (1.0+0.01*((x-x2).^2+(y-y2).^2)).^2; f6_2 = (0.5 + num./den).*abs(sin(time)); % bubble #2 offset num_ofs = sin(sqrt((10000-x2).^2+(10000-y2).^2)).^2 - 0.5; den_ofs = (1.0+0.01*((10000-x2).^2+(10000-y2).^2)).^2; f6_2_ofs = (0.5 + num_ofs./den_ofs).*abs(sin(time)); % output & return out = 2*((f6_1 + f6_2) - (f6_1_ofs + f6_2_ofs)); return