智能算法经典测试函数

下面总结一下本人在学习智能算法的过程中所了解到的经典测试函数,参考书籍(matlab优化算法案例分析与应用)

特征

这些函数都是有许多局部最优值,所以可以用来测试智能算法寻找全局最优值的性能。

Griewank函数

全局最小值是在变量均为零时
在这里插入图片描述

下图为二维Griewank函数图像
在这里插入图片描述

function DrawGriewank()
    x = [-20 : 0.3 : 20];
    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
    mesh(X,Y,z);
    view([-15.5 30]);
    shading interp
end


function y=Griewank(x)
[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;

end

Rastrigin函数

全局最小值是在变量均为零时
在这里插入图片描述

下图为二维Rastrigin函数图像
在这里插入图片描述

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
    mesh(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

Schaffer函数

全局最大值是在变量均为零时
0.5 + ( ( s i n ( x 1 2 + x 2 2 ) 0.5 ) − 0.5 ) / ( 1 + 0.001 ∗ ( x 1 2 + x 2 2 ) ) 2 0.5+((sin(x1^2+x2^2)^{0.5})-0.5)/(1+0.001*(x1^2+x2^2))^2 0.5+((sin(x12+x22)0.5)0.5)/(1+0.001(x12+x22))2

下面为Schaffer函数图像
在这里插入图片描述

function DrawSchaffer()
    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)=Schaffer([X(h,l),Y(h,l)]);
    end
    end
    mesh(X,Y,z);
    shading interp
end


function result=Schaffer(x1)
    [row,col]=size(x1);
    if row>1
        error('输入的参数错误');
    end
    x=x1(1,1);
    y=x1(1,2);
    temp=x^2+y^2;
    result=0.5-(sin(sqrt(temp))^2-0.5)/(1+0.001*temp)^2;
end

Ackley函数

最小值是在变量均为0时

img

下面是二维Ackley函数图像
在这里插入图片描述

function DrawAckley()
    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)=Ackley([X(h,l),Y(h,l)]);
        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

Rosenbrock函数

当变量全为1的时候,取得最小值0
在这里插入图片描述

下面为二维RosenBrock函数图像:
在这里插入图片描述

function DrawRosenbrock()  
    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)=Rosenbrock([X(h,l),Y(h,l)]);  
        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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值