无约束多变量寻优方法——步长加速法

        本文简述多变量无约束最优化问题

min f(x)  x\in R^n

的步长加速法。步长加速法主要由交替进行的“探测搜索”和“模式移动”组成,前者是为了寻找当前迭代点的下降方向,后者是沿着这个有利方向寻求新地迭代点。

        给定初始点x_0(x_0\in R^n),以它作为“探测搜索”的参考点R,在其周围以某一步长寻找比它更好的点作为基点B,即f(B)<f(R),得到下降方向B-R(称该方向为模式),然后从B出发沿模式B-R做直线搜索(称为模式移动)获得新的参考点,即\tilde{R}=B+\alpha(B-R)\alpha>0,一般取为1。然后继续“探测搜索”、“模式移动”……

         下面对“探测搜索”和“模式移动”进行详细说明。

        “探测搜索”又叫做“坐标循环试探”,我们以二维来举例说明。对于二维平面的一点X,沿着坐标共有四个方向,如下图所示。

无约束多变量寻优方法——步长加速法_第1张图片

 

我们用这样的方法来“探索”:从X_0开始,对于x_1维度,先以某步长试探它的正方向,若是较优点,从这个点Y开始进行x_2维度的搜索,若不是,再试探负方向,若没有较优点,则仍从开始X_0进行x_2维度的搜索,两个维度搜索完之后,有两种结果:

X_0=Y \implies所有方向搜索都失败了

X_0 \neq Y \implies找到X_0附近的更好的点

对于第一种结果,缩短步长继续搜索,若步长缩短到预定的最小的步长了,则X_0就是最优点。对于第二种结果,开始接下来的“模式加速移动”。

        由于f(Y)<f(X_0),我们猜测Y-X_0是一个有利方向,从Y开始沿着这个方向移动得到一个点,如果是更优点,则加速成功,以这个点为参考点继续“探测搜索”,若不是,则直接以Y为参考点“探测搜索”。

下面附上matlab代码

function[X,fX,k]=StepLengthAccelerationMethod(f,X0,Delta,Dlimit,alpha)

%--------------------------------------------------------------------------
% 步长加速法
% 设问题为min f(x),x in En

% 输入参数
% f:目标函数;X0:初始值;Delta:探索步长;Dlimit:迭代终止条件;alpha:加速因子
% 输出参数
% 最终确定的最小值点X和它对应的最小值fX,以及迭代次数k 

% 从一个基点X0出发,依次沿着n个坐标轴方向用固定步长Delta[探测]目标值更小的点
% 基点记为Xi,动点记为Yi
%--------------------------------------------------------------------------

% 确定自变量的维数
En=length(X0);
% 构造单位向量
E=eye(En);
k=0;
if(nargin==4)
    alpha=2; % 如果不输入参数alpha,则默认为2
end
while Delta>Dlimit
    Y0=X0;
    for i=1:En
        Y=Y0+Delta*E(i,:);
        if(f(Y)

 对如下函数进行最小值求解

function [y] = camel3(xx)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% INPUTS:
%
% xx = [x1, x2]
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

x1 = xx(1);
x2 = xx(2);

term1 = 2*x1^2;
term2 = -1.05*x1^4;
term3 = x1^6 / 6;
term4 = x1*x2;
term5 = x2^2;

y = term1 + term2 + term3 + term4 + term5;

end

无约束多变量寻优方法——步长加速法_第2张图片 

 图中的小红圈即为所求得的最小值点。

你可能感兴趣的:(优化方法,matlab,算法)