天天看點

【PSO】多模态測試函數Griewank函數Rastrigrin函數Schaffer函數Ackley函數Rosenbrock函數參考資料

導航

  • Griewank函數
  • Rastrigrin函數
  • Schaffer函數
  • Ackley函數
  • Rosenbrock函數
  • 參考資料

Griewank函數

min ⁡ f ( x i ) = ∑ i = 1 N x i 2 4000 − ∏ i = 1 N cos ⁡ ( x i i ) + 1 \min f(x_i)=\sum_{i=1}^N\frac{x_i^2}{4000}-\prod_{i=1}^N\cos(\frac{x_i}{\sqrt{i}})+1 minf(xi​)=i=1∑N​4000xi2​​−i=1∏N​cos(i

​xi​​)+1

其中, x i ∈ [ − 600 , 600 ] x_i\in[-600, 600] xi​∈[−600,600],函數存在很多局部極小點,全局最小值在 x = ( 0 , 0 , … , 0 ) x=(0, 0, \dots, 0) x=(0,0,…,0)處得到,是典型的非線性多模态函數,該函數可以用來檢測算法是局部收斂還是全局收斂.

function y=Griewank(x)
[row, col]=size(x);
if row>1
    error('parameter error')
end
y1=1/4000*sum(x.^2);
y2=1;

for i=1:col
    y2=y2*cos(x(i)/sqrt(i));
end
y=y1-y2+1;
y=-y;
end

function y=DrawGrieWank()
x=[-8: 0.1: 8];
y=x;
[X, Y]=meshgrid(x, y);
[row, col]=size(X);
for i =1:col
    for j = 1:row
        z(j, i)=Griewank([X(j, i), Y(j, i)]);
    end
end

surf(X, Y, z);
view([-15.5 30]);
shading interp
end
           
【PSO】多模态測試函數Griewank函數Rastrigrin函數Schaffer函數Ackley函數Rosenbrock函數參考資料

Rastrigrin函數

min ⁡ f ( x i ) = ∑ i = 1 D [ x i 2 − 10 cos ⁡ ( 2 π x i ) + 10 ] \min f(x_i)=\sum_{i=1}^D[x_i^2-10\cos(2\pi x_i)+10] minf(xi​)=i=1∑D​[xi2​−10cos(2πxi​)+10]

其中 x i ∈ [ − 5.12 , 5.12 ] x_i\in[-5.12, 5.12] xi​∈[−5.12,5.12],該函數是多峰值函數,在 ( x 1 , x 2 , … , x n ) = ( 0 , 0 , … , 0 ) (x_1, x_2, \dots, x_n)=(0, 0, \dots, 0) (x1​,x2​,…,xn​)=(0,0,…,0)處獲得全局最小值0,函數大約有 10 n 10n 10n個局部極小點,也是一種非線性多模态函數.

function DrawRastrigin()
clc;
clear all;
close all;
x=[-5: 0.5: 5];
y=x;
[X, Y]=meshgrid(x, y);
[row, col]=size(X);
for i=1:col
	for j=1:row
		z(j, i)=Rastrigin([X(j, i), Y(j, i)])
	end
end
surf(X, Y, z);
shading interp
end

function y=Rastrigin(x)
	[row, col]=size(x)
	if row>1
		error('輸入參數錯誤')
	end
	y=sum(x.^2-10*cos(2*pi*x)+10);
	y=y;
end
           
【PSO】多模态測試函數Griewank函數Rastrigrin函數Schaffer函數Ackley函數Rosenbrock函數參考資料

Schaffer函數

min ⁡ f ( x 1 , x 2 ) = 0.5 + ( sin ⁡ x 1 2 + x 2 2 ) 2 − 0.5 ( 1 + 0.001 ( x 1 2 + x 2 2 ) ) 2 \min f(x_1, x_2)=0.5+\frac{(\sin\sqrt{x_1^2+x_2^2})^2-0.5}{(1+0.001(x_1^2+x_2^2))^2} minf(x1​,x2​)=0.5+(1+0.001(x12​+x22​))2(sinx12​+x22​

​)2−0.5​

其中 − 10.0 ≤ x 1 , x 2 ≤ 10.0 -10.0\leq x_1, x_2\leq 10.0 −10.0≤x1​,x2​≤10.0

函數是複雜的二維函數,具有無數個極小值點,在 ( 0 , 0 ) (0, 0) (0,0)處取得最小值0,由于該函數處于強烈的震動狀态,很難找到全局最優值.

clc;
clear all;
close all;


function DrawSchaffer()
    x=[-5:0.05:5];
    y=x;
    [X, Y]=meshgrid(x, y);
    [row, col]=size(X);
    for i=1:col
        for j=1:row
            z(j, i)=Schaffer([X(j, i), Y(j, i)]);
        end
    end
    mesh(X, Y, z);
    shading interp
end

function y=Schaffer(X)
    [row, col]=size(X);
    if row>1
        error('parameter error');
    end
    xx=X(1, 1);
    yy=X(1, 2);
    z=xx^2+yy^2;
    y=0.5-(sin(sqrt(z))^2-0.5)/(1+0.001*z)^2;
end

DrawSchaffer()
           
【PSO】多模态測試函數Griewank函數Rastrigrin函數Schaffer函數Ackley函數Rosenbrock函數參考資料

Ackley函數

f ( x ) = − c 1 exp ⁡ ( − 0.2 1 n ∑ j = 1 n x j 2 − exp ⁡ ( 1 n ∑ j = 1 n cos ⁡ ( 2 π x j ) ) ) + c 1 + e f(x)=-c_1\exp\bigg(-0.2\sqrt{\frac{1}{n}\sum_{j=1}^n x_j^2}-\exp(\frac{1}{n}\sum_{j=1}^n\cos(2\pi x_j))\bigg)+c_1+e f(x)=−c1​exp(−0.2n1​j=1∑n​xj2​

​−exp(n1​j=1∑n​cos(2πxj​)))+c1​+e

該函數是一個 n n n維函數,在 ( 0 , 0 ) (0, 0) (0,0)處得到最小值,該函數很難辨識搜尋的最優方向,求解全局最優困難.

function DrawAckley()
	x=[-8:0.1:8];
	y=x;
	[X, Y]=meshgrid(x, y);
	[row, col]=size(X);
	for i=1:col
		for j=1:row
			z(j, i)=Ackley([X(j, i), Y(j, i)]);
		end
	end
	mesh(X, Y, z);
	shading interp
end

function y=Ackley(x)
	[row, col]=size(x);
	if row>1
		error('輸入參數錯誤');
	end
	y=-20*exp(-0.2*sqrt((1/col)*sum(x.^2))))-exp((1/col)*sum(cos(2*pi.*x)))+exp(1)+20;
end
           
【PSO】多模态測試函數Griewank函數Rastrigrin函數Schaffer函數Ackley函數Rosenbrock函數參考資料

Rosenbrock函數

min ⁡ f ( x i ) = ∑ i = 1 D − 1 [ 100 ( x i 2 − x i + 1 ) 2 − ( x i − 1 ) 2 ] \min f(x_i)=\sum_{i=1}^{D-1}[100(x_i^2-x_{i+1})^2-(x_i-1)^2] minf(xi​)=i=1∑D−1​[100(xi2​−xi+1​)2−(xi​−1)2]

其中, x i ∈ [ − 2.048 , 2.048 ] x_i\in[-2.048, 2.048] xi​∈[−2.048,2.048].

clc;
clear all;
close all;
function DrawRosenbrock()
	x=[-8:0.1:8];
	y=x;
	[X, Y]=meshgrid(x, y);
	[row, col]=size(X);
	for i=1:col
		for j=1:row
			z(j, i)=Rosenbrock([X(j, i), Y(j, i)]);
		end
	end
	mesh(X, Y, z);
	shading interp
end
function y=Rosenbrock(x)
	[row, col]=size(x);
	if row>1
		error('輸入參數錯誤');
	end
	y=100*(x(1, 2)-x(1, 1)^2)^2+(x(1, 1)-1)^2;
	y=-y;
end
           
【PSO】多模态測試函數Griewank函數Rastrigrin函數Schaffer函數Ackley函數Rosenbrock函數參考資料

參考資料

Matlab優化算法案例分析與應用 清華大學出版社 餘勝威

文中圖檔來源

繼續閱讀