无约束优化方法-直接方法(坐标轮换法)

无约束最优化方法的一般步骤可以总结如下:

  1. 选择初始点\boldsymbol{x}_0,这一点越靠近局部极小点\boldsymbol{x}^*越好;
  2. 已取得某设计点\boldsymbol{x}_k,选择一个设计方向\boldsymbol{d}_k,沿此方向搜索,函数值需是下降的,\boldsymbol{d}_k是下降方向;
  3. \boldsymbol{x}_k出发,沿\boldsymbol{d}_k方向进行搜索,确定步长因子\lambda_k,得到新的设计点\boldsymbol{x}_{k+1}\boldsymbol{x}_{k+1}=\boldsymbol{x}_k+\lambda_k\boldsymbol{d}_k并满足f(\boldsymbol{x}_{k+1})<f(\boldsymbol{x}_k),具有这种性质的算法,称为下降算法。\lambda_k可以由一维搜索方法来确定最优步长因子;
  4. 若新点\boldsymbol{x}_{k+1}满足迭代计算终止条件,则停止迭代,\boldsymbol{x}_{k+1}作为\boldsymbol{x}^*,否则返回2步继续迭代搜索。

可以看出无约束优化算法的关键几点:初始值,方向设计,步长因子,终止条件。其中搜索方向是各种无约束方法的主要特征。

无约束优化法可以通过有无使用梯度信息分为直接法和间接方法。其中,直接法,即只需要计算,比较函数值来确定迭代方向和步长的方法。其优点是不需要函数有较好的解析性质。适用范围广,可靠性较高。而在工程实际中,函数形式往往比较复杂,不易求导数,直接法比较适合采用。缺点相对利用导数信息的间接法收敛速度慢。

坐标轮换法

坐标(变量)轮换法是最简单最易理解的直接方法。其由D‘esopo于1959年提出,其基本思想是把含有n个变量的优化问题轮换转为单变量的优化问题,即每次沿某一个坐标轴进行一维搜索的问题。算法步骤:

已知目标函数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. 按照下式求最优步长并进行迭代计算:
    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,如满足迭代终止条件,停止迭代,输出最优解\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

坐标轮换法逻辑简单,易于掌握,但计算效率低,对维数较高的优化问题更为突出,通常用于低维优化问题;此外,这种方法的收敛效果很大程度上取决于目标函数的等值线的形状:

\bullet 等值线为椭圆族,其长短轴与坐标轴平行时,收敛很快,即\boldsymbol{x}的维度步数即可收敛;
\bullet 当椭圆族的长短轴与坐标轴斜交时,迭代次数将大大增加,收敛速度慢;
\bullet 当目标函数等值线出现“脊线”时,沿坐标轴方向搜索不能使得函数值有所下降,坐标轮换法在求优过程中将失败,这类函数对于坐标轮换法就是病态函数。

图1 坐标轮换法与优化问题等值线的关系
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容