粒子群演算法(6)-----幾個適應度評價函式
阿新 • • 發佈:2019-01-28
下面給出幾個適應度評價函式,並給出圖形表示
頭幾天機子種了病毒,重新安裝了系統,不小心把程式全部格式化了,痛哭!!!沒辦法,好多程式不見了,現在把這幾個典型的函式重新編寫了,把他們給出來,就算粒子群演算法的一個結束吧!痛恨病毒!!!!
第一個函式:Griewank函式,圖形如下所示:
適應度函式如下:(為了求最大值,我去了所有函式值的相反數)
function y = Griewank(x)% Griewan函式
% 輸入x,給出相應的y值,在x = ( 0 , 0 ,…, 0 )處有全域性極小點0.
% 編制人:
% 編制日期:
[row,col]
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
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)% 輸入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,為了得到最大值,取函式值的相反數。
函式圖形如下所示
函式的程式碼:
繪製函式圖形的程式碼如下:
這樣粒子群演算法不得不草草收場。