無約束優(yōu)化方法-直接方法(坐標輪換法)

無約束最優(yōu)化方法的一般步驟可以總結如下:

  1. 選擇初始點\boldsymbol{x}_0,這一點越靠近局部極小點\boldsymbol{x}^*越好;
  2. 已取得某設計點\boldsymbol{x}_k,選擇一個設計方向\boldsymbolu0z1t8os_k,沿此方向搜索,函數(shù)值需是下降的,\boldsymbolu0z1t8os_k是下降方向;
  3. \boldsymbol{x}_k出發(fā),沿\boldsymbolu0z1t8os_k方向進行搜索,確定步長因子\lambda_k,得到新的設計點\boldsymbol{x}_{k+1},\boldsymbol{x}_{k+1}=\boldsymbol{x}_k+\lambda_k\boldsymbolu0z1t8os_k并滿足f(\boldsymbol{x}_{k+1})<f(\boldsymbol{x}_k),具有這種性質的算法,稱為下降算法。\lambda_k可以由一維搜索方法來確定最優(yōu)步長因子;
  4. 若新點\boldsymbol{x}_{k+1}滿足迭代計算終止條件,則停止迭代,\boldsymbol{x}_{k+1}作為\boldsymbol{x}^*,否則返回2步繼續(xù)迭代搜索。

可以看出無約束優(yōu)化算法的關鍵幾點:初始值,方向設計,步長因子,終止條件。其中搜索方向是各種無約束方法的主要特征。

無約束優(yōu)化法可以通過有無使用梯度信息分為直接法和間接方法。其中,直接法,即只需要計算,比較函數(shù)值來確定迭代方向和步長的方法。其優(yōu)點是不需要函數(shù)有較好的解析性質。適用范圍廣,可靠性較高。而在工程實際中,函數(shù)形式往往比較復雜,不易求導數(shù),直接法比較適合采用。缺點相對利用導數(shù)信息的間接法收斂速度慢。

坐標輪換法

坐標(變量)輪換法是最簡單最易理解的直接方法。其由D‘esopo于1959年提出,其基本思想是把含有n個變量的優(yōu)化問題輪換轉為單變量的優(yōu)化問題,即每次沿某一個坐標軸進行一維搜索的問題。算法步驟:

已知目標函數(shù)f(\boldsymbol{x}),終止限\varepsilon>0.

  1. 任選取初始點\boldsymbol{x}_0作為第一輪迭代的初始點,\varepsilon>0;
  2. 置搜索方向依次為:
    \boldsymbol{e}_1 = [1,0,0,...,0]^T
    \boldsymbol{e}_2 = [0,1,0,...,0]^T
    ......
    \boldsymbol{e}_n = [0,0,0,...,1]^T
  3. 按照下式求最優(yōu)步長并進行迭代計算:
    f(\boldsymbol{x}_k^{i-1}+t_k^i\boldsymbol{e}_i)=\min_tf(\boldsymbol{x}_k^{i-1}+t\boldsymbol{e}_i),\boldsymbol{x}_k^i=\boldsymbol{x}_k^{i-1}+t_k^i\boldsymbol{e}_i
  4. 如果i=n,即轉第5步,如果i<n,則轉第3步;
  5. 收斂性準則為||\boldsymbol{x}_k^n-\boldsymbol x_{k-1}^n || \leq \varepsilon,如滿足迭代終止條件,停止迭代,輸出最優(yōu)解\boldsymbol{x}^*=\boldsymbol{x}_k^n;若不滿足,則令k=k+1轉到第3步。

Algorithm 1 坐標輪換法

function [x_min,f_min] = CoordinateRotationMethod(func,x0,options)

if nargin<3
    options.tol = 1e-12;
    options.iterNum = 1000;
    options.bracketMethod = '';
    options.linearSrcMethod = '';
    options.plot2.Flag = 0;
    options.plot2.x = [];
    options.plot2.y = [];
    options.plot2.z = [];  
end
tol = options.tol;
iterNum = options.iterNum;

plot2 = options.plot2;
if length(x0)~=2
    plot2.Flag = 0;
end

x_min = x0;
f_min = func(x0);

E = eye(length(x0));
xk = x0; 

f_pre = func(xk);
f = f_pre+1e10;

if plot2.Flag == 1 
    figure,subplot(1,2,1),axis equal, hold on;
    contourf(plot2.x,plot2.y,plot2.z,30,'linestyle','-')
    colormap('jet');
    tempf =f_pre;
end

while(iterNum)
    for i=1:1:length(x0) 
        d = E(:,i);
        lamdaFuncH = @(lamda)(func(xk+lamda.*d));
        [a,b,c] = bracketAdvanceBack(lamdaFuncH,0,0.01);
        lamda = GoldSection(lamdaFuncH,a,c,1e-12);
        xk1 = xk + lamda.*d;
        f =func(xk1);
        if plot2.Flag == 1 
            tempf = [tempf,f];
            subplot(1,2,1),plot([xk(1),xk1(1)],[xk(2),xk1(2)],'-ro','LineWidth',2);
            subplot(1,2,2),plot(tempf,'-b.','LineWidth',2); grid on;
            axis([0,60,0,func(x0)]);
            xlabel('Step');
            ylabel('Objective Function Value');
            pause(0.1)
        end
        xk = xk1;
        iterNum = iterNum - 1;
    end
    if abs(f-f_pre)<tol||iterNum == 0
            x_min = xk;
            f_min = f;
            break;
    else
        f_pre = f;
    end        
end

坐標輪換法邏輯簡單,易于掌握,但計算效率低,對維數(shù)較高的優(yōu)化問題更為突出,通常用于低維優(yōu)化問題;此外,這種方法的收斂效果很大程度上取決于目標函數(shù)的等值線的形狀:

\bullet 等值線為橢圓族,其長短軸與坐標軸平行時,收斂很快,即\boldsymbol{x}的維度步數(shù)即可收斂;
\bullet 當橢圓族的長短軸與坐標軸斜交時,迭代次數(shù)將大大增加,收斂速度慢;
\bullet 當目標函數(shù)等值線出現(xiàn)“脊線”時,沿坐標軸方向搜索不能使得函數(shù)值有所下降,坐標輪換法在求優(yōu)過程中將失敗,這類函數(shù)對于坐標輪換法就是病態(tài)函數(shù)。

圖1 坐標輪換法與優(yōu)化問題等值線的關系
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容