www.gusucode.com > 运用粒子群和改进粒子群算法求解典型函数 > 运用粒子群和改进粒子群算法求解典型函数/pso优化算法/testfunctions/Foxhole.m

    % Foxhole.m
% Foxhole function, 2D multi-minima function
% 
% from: http://www.cs.rpi.edu/~hornda/pres/node10.html
%
% f(x) = 0.002 + sum([1/(j + sum( [x(i) - a(i,j)].^6 ) )])
% 
% x = 2 element row vector containing [ x, y ]
% each row is processed independently,
% you can feed in matrices of timeX2 no prob
%
% example: cost = Foxhole([1,2;3,4])
% note: known minimum =0 @ (-32,-32) unless you change 'a' in the function

% Brian Birge
% Rev 1.0
% 9/12/04
function [out]=Foxhole(in)
 x=in(:,1);
 y=in(:,2);
 
% location of foxholes, you can change this, these are what DeJong used
% if you change 'em, a{1} and a{2} must each have same # of elements
 a{1} = [... 
         -32 -16   0  16  32 ;...
         -32 -16   0  16  32 ;...
         -32 -16   0  16  32 ;...
         -32 -16   0  16  32 ;...
         -32 -16   0  16  32 ;...
        ];

 a{2} = [...
         -32 -32 -32 -32 -32 ;...
         -16 -16 -16 -16 -16 ;...
           0   0   0   0   0 ;...
          16  16  16  16  16 ;...
          32  32  32  32  32 ;...
        ];

 term_sum=0;   
 for j=1:prod(size((a{1})))
    ax=a{1} (j);
    ay=a{2} (j);
    term_num = (x - ax).^6 + (y - ay).^6;
    term_sum=term_sum+ 1./(j+term_num);
 end
 out = .002 + term_sum;