粒子群算法(6)-----几个适应度评价函数

转载自: niuyongjie http://blog.csdn.net/niuyongjie/article/details/1619496


第一个函数:Griewank函数,图形如下所示:

粒子群算法(6)-----几个适应度评价函数_第1张图片

适应度函数如下:(为了求最大值,我去了所有函数值的相反数) 

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函数,图形如下所示:

粒子群算法(6)-----几个适应度评价函数_第2张图片

适应度函数如下:(为了求最大值,我去了所有函数值的相反数) 

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,因此不需要取相反数。

[c-sharp] view plain copy
  1. function result=Schaffer(x1)  
  2. %Schaffer 函数  
  3. %输入x,给出相应的y值,在x=(0,0,…,0) 处有全局极大点1.  
  4. %编制人:  
  5. %编制日期:  
  6. [row,col]=size(x1);  
  7. if row>1  
  8.     error('输入的参数错误');  
  9. end  
  10. x=x1(1,1);  
  11. y=x1(1,2);  
  12. temp=x^2+y^2;  
  13. result=0.5-(sin(sqrt(temp))^2-0.5)/(1+0.001*temp)^2;  

  

绘制函数代码图形的代码如下:

[c-sharp] view plain copy
  1. function DrawSchaffer()  
  2. x=[-5:0.05:5];  
  3. y=x;  
  4. [X,Y]=meshgrid(x,y);  
  5. [row,col]=size(X);  
  6. for l=1:col  
  7. for h=1:row  
  8. z(h,l)=Schaffer([X(h,l),Y(h,l)]);  
  9. end  
  10. end  
  11. surf(X,Y,z);  
  12. shading interp  

  

第四个函数:Ackley函数,函数图形如下:

函数的代码如下,因为该函数在(0,...,0)处有最小值0,因此需要取相反数

[c-sharp] view plain copy
  1. function result=Ackley(x)  
  2. %Ackley 函数  
  3. %输入x,给出相应的y值,在x=(0,0,…,0) 处有全局极小点0,为得到最大值,返回值取相反数  
  4. %编制人:  
  5. %编制日期:  
  6. [row,col]=size(x);  
  7. if row>1  
  8.     error('输入的参数错误');  
  9. end  
  10. result=-20*exp(-0.2*sqrt((1/col)*(sum(x.^2))))-exp((1/col)*sum(cos(2*pi.*x)))+exp(1)+20;  
  11. result=-result;  

 

绘制函数代码图形的代码如下:

[c-sharp] view plain copy
  1. function DrawAckley()  
  2. %绘制Ackley函数图形  
  3. x=[-8:0.1:8];  
  4. y=x;  
  5. [X,Y]=meshgrid(x,y);  
  6. [row,col]=size(X);  
  7. for l=1:col  
  8.     for h=1:row  
  9.         z(h,l)=Ackley([X(h,l),Y(h,l)]);  
  10.     end  
  11. end  
  12. surf(X,Y,z);  
  13. shading interp  

第五个函数是:Rosenbrock函数,该函数在(1,...,1)处有最小值0,为了得到最大值,取函数值的相反数。

函数图形如下所示

 

函数的代码:

 

[c-sharp] view plain copy
  1. function result=Rosenbrock(x)  
  2. %Rosenbrock 函数  
  3. %输入x,给出相应的y值,在x=(1,1,…,1) 处有全局极小点0,为得到最大值,返回值取相反数  
  4. %编制人:  
  5. %编制日期:  
  6. [row,col]=size(x);  
  7. if row>1  
  8.     error('输入的参数错误');  
  9. end  
  10. result=100*(x(1,2)-x(1,1)^2)^2+(x(1,1)-1)^2;  
  11. result=-result;  

绘制函数图形的代码如下:

[c-sharp] view plain copy
  1. function DrawRosenbrock()  
  2. %绘制Rosenbrock函数图形,大铁锅函数,哈哈  
  3. x=[-8:0.1:8];  
  4. y=x;  
  5. [X,Y]=meshgrid(x,y);  
  6. [row,col]=size(X);  
  7. for l=1:col  
  8.     for h=1:row  
  9.         z(h,l)=Rosenbrock([X(h,l),Y(h,l)]);  
  10.     end  
  11. end  
  12. surf(X,Y,z);  
  13. shading interp  

这样粒子群算法不得不草草收场。


你可能感兴趣的:(图像处理)