無約束最優(yōu)化方法的一般步驟可以總結(jié)如下:
- 選擇初始點(diǎn),這一點(diǎn)越靠近局部極小點(diǎn)越好飘诗;
- 已取得某設(shè)計點(diǎn)与倡,選擇一個設(shè)計方向,沿此方向搜索昆稿,函數(shù)值需是下降的纺座,是下降方向;
- 從出發(fā)溉潭,沿方向進(jìn)行搜索净响,確定步長因子,得到新的設(shè)計點(diǎn)喳瓣,并滿足馋贤,具有這種性質(zhì)的算法,稱為下降算法畏陕。可以由一維搜索方法來確定最優(yōu)步長因子配乓;
- 若新點(diǎn)滿足迭代計算終止條件,則停止迭代惠毁,作為犹芹,否則返回2步繼續(xù)迭代搜索。
可以看出無約束優(yōu)化算法的關(guān)鍵幾點(diǎn):初始值鞠绰,方向設(shè)計腰埂,步長因子,終止條件洞豁。其中搜索方向是各種無約束方法的主要特征盐固。
無約束優(yōu)化法可以通過有無使用梯度信息分為直接法和間接方法。其中丈挟,直接法刁卜,即只需要計算,比較函數(shù)值來確定迭代方向和步長的方法曙咽。其優(yōu)點(diǎn)是不需要函數(shù)有較好的解析性質(zhì)蛔趴。適用范圍廣,可靠性較高例朱。而在工程實際中孝情,函數(shù)形式往往比較復(fù)雜,不易求導(dǎo)數(shù)洒嗤,直接法比較適合采用箫荡。缺點(diǎn)相對利用導(dǎo)數(shù)信息的間接法收斂速度慢。
坐標(biāo)輪換法
坐標(biāo)(變量)輪換法是最簡單最易理解的直接方法渔隶。其由D‘esopo于1959年提出羔挡,其基本思想是把含有n個變量的優(yōu)化問題輪換轉(zhuǎn)為單變量的優(yōu)化問題洁奈,即每次沿某一個坐標(biāo)軸進(jìn)行一維搜索的問題。算法步驟:
已知目標(biāo)函數(shù)绞灼,終止限.
- 任選取初始點(diǎn)作為第一輪迭代的初始點(diǎn)利术,;
- 置搜索方向依次為:
- 按照下式求最優(yōu)步長并進(jìn)行迭代計算:
- 如果,即轉(zhuǎn)第5步低矮,如果印叁,則轉(zhuǎn)第3步;
- 收斂性準(zhǔn)則為军掂,如滿足迭代終止條件轮蜕,停止迭代,輸出最優(yōu)解蝗锥;若不滿足爵赵,則令轉(zhuǎn)到第3步颠锉。
Algorithm 1 坐標(biāo)輪換法
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
坐標(biāo)輪換法邏輯簡單,易于掌握,但計算效率低箭窜,對維數(shù)較高的優(yōu)化問題更為突出整袁,通常用于低維優(yōu)化問題呈队;此外枪蘑,這種方法的收斂效果很大程度上取決于目標(biāo)函數(shù)的等值線的形狀:
等值線為橢圓族,其長短軸與坐標(biāo)軸平行時,收斂很快陆馁,即的維度步數(shù)即可收斂;
當(dāng)橢圓族的長短軸與坐標(biāo)軸斜交時找颓,迭代次數(shù)將大大增加,收斂速度慢;
當(dāng)目標(biāo)函數(shù)等值線出現(xiàn)“脊線”時,沿坐標(biāo)軸方向搜索不能使得函數(shù)值有所下降,坐標(biāo)輪換法在求優(yōu)過程中將失敗,這類函數(shù)對于坐標(biāo)輪換法就是病態(tài)函數(shù)叮贩。