1. 程式人生 > >粒子群演算法(6)-----幾個適應度評價函式

粒子群演算法(6)-----幾個適應度評價函式

下面給出幾個適應度評價函式,並給出圖形表示

     頭幾天機子種了病毒,重新安裝了系統,不小心把程式全部格式化了,痛哭!!!沒辦法,好多程式不見了,現在把這幾個典型的函式重新編寫了,把他們給出來,就算粒子群演算法的一個結束吧!痛恨病毒!!!!

第一個函式:Griewank函式,圖形如下所示:

適應度函式如下:(為了求最大值,我去了所有函式值的相反數)  

function y = Griewank(x)
% Griewan函式
% 輸入x,給出相應的y值,在x = ( 0 , 0 ,…, 0 )處有全域性極小點0.
% 編制人:
% 編制日期:
[row,col]
= size(x);
if  row > 1
    error(
' 輸入的引數錯誤 ' );
end
y1
= 1 / 4000 * sum(x. ^ 2 );
y2
= 1 ;
for  h = 1 :col
    y2
= y2 * cos(x(h) / sqrt(h));
end
y
= y1 - y2 + 1 ;
y
=- y;

繪製函式影象的程式碼如下:

function DrawGriewank()
% 繪製Griewank函式圖形
x
= [ - 8
: 0.1 : 8 ];
y
= x;
[X,Y]
= meshgrid(x,y);
[row,col]
= size(X);
for  l = 1 :col
    
for  h = 1 :row
        z(h,l)
= Griewank([X(h,l),Y(h,l)]);
    end
end
surf(X,Y,z);
shading interp

第二個函式:Rastrigin函式,圖形如下所示:

適應度函式如下:(為了求最大值,我去了所有函式值的相反數)  

function y = Rastrigin(x)
% Rastrigin函式
% 輸入x,給出相應的y值,在x = ( 0 , 0 ,…, 0 )處有全域性極小點0.
% 編制人:
% 編制日期:
[row,col]
= size(x);
if  row > 1
    error(
' 輸入的引數錯誤 ' );
end
y
= sum(x. ^ 2 - 10 * cos( 2 * pi * x) + 10 );
y
=- y;

繪製函式影象的程式碼如下:

function DrawRastrigin()
% 繪製Rastrigin函式圖形
x
= [ - 5 : 0.05 : 5 ];
y
= x;
[X,Y]
= meshgrid(x,y);
[row,col]
= size(X);
for  l = 1 :col
    
for  h = 1 :row
        z(h,l)
= Rastrigin([X(h,l),Y(h,l)]);
    end
end
surf(X,Y,z);
shading interp

第三個函式Schaffer函式,圖形如下所示:

函式的程式碼如下,因為該函式在(0,...,0)處有最大值1,因此不需要取相反數。


繪製函式程式碼圖形的程式碼如下:


第四個函式:Ackley函式,函式圖形如下:

函式的程式碼如下,因為 該函式在(0,...,0)處有最小值0,因此需要取相反數


繪製函式程式碼圖形的代 碼如下:


第五個函式是:Rosenbrock函式,該函式在(1,...,1)處有最小值0,為了得到最大值,取函式值的相反數。

函式圖形如下所示

函式的程式碼:

繪製函式圖形的程式碼如下:


這樣粒子群演算法不得不草草收場。