「学科总结」 《运筹学基础》

前言:

         运筹学在小白看来就是处理规划问题——优化。是参加数学建模竞赛的必备基础,达到人生巅峰的必学课程。但是从考试的角度讲,它真的好难啊!!!Very difficult ! 下面小白将梳理一下非线性规划、一位搜索和无约束问题的最优方法等知识点。参考教材是:《运筹学基础》何坚勇。下面所述可以作为检索知识点复习查阅使用。


一.非线性规划的基本概念与基本原理

1.非线性规划的数学模型

  • 非线性规划问题举例

选址、构件表面积、木梁设计等

  • 非线性规划问题的一般数学模型

min f(x);

s.t. g_{i}(x)\geq 0(i=0,1,2,...,m)

     h_{j}(x)= 0(j=0,1,2,...,l)

  • 局部最优解与全局最优解

2.无约束问题的最优性条件

学习本节的预备知识:

  1. 导数;
  2. 微分;
  3. 梯度.(二维的法向量,三维的法平面)

3.凸函数与凸规划

  • 凸函数与凹函数
  • 凸函数的判别标准

一阶判别条件:具有连续偏导数,f(x^{(2)})\geq f(x^{(1)})+\bigtriangledown f(x^{(1)})\cdot (x^{(2)}-x^{(1)}).

二阶判别条件:具有二阶连续偏导数...,f(x) 的黑塞矩阵 \bigtriangledown ^{2}f(x)在 S 上处处半正定.

  • 凸规划

在上面给出的数学模型中

min f(x);

s.t. g_{i}(x)\geq 0(i=0,1,2,...,m)

     h_{j}(x)= 0(j=0,1,2,...,l)

如果发 f(x)是凸函数,g_{i}(x)是凸函数,h_{j}(x)是线性函数时,上述就是一个凸规划问题。

4.解非线性规划的基本思路

  • 基本迭代格式

x^{(k+1)}=x^{(k)}+\lambda _{k}p^{(k)}.

其中,\lambda _{k} 是步长,p^{(k)} 是方向。我们所要做的就是寻找合适的 \lambda _{k} ,p^{(k)}.

  • 下降方向与可行下降方向

搜索方向 p^{(k)},应指向目标函数值减小的方向。所以,如何在点 X 选择使函数值下降最快的方向,是一个重要的问题。

对于有约束的线性规划问题,算法不仅要保证搜索方向为下降方向,而且要保证x^{(k+1)}(=x^{(k)}+\lambda _{k}p^{(k)}) 仍在可行域内。

  • 非线性规划迭代算法的一般步骤
  1. 选取初始点x^{(0)}, 令k:=0.
  2. 构造搜索方向.(对于无约束问题 p^{(k)} 应是下降方向;对于有约束问题 p^{(k)} )
  3. 确定步长因子 \lambda _{k} .
  4. 求出下一个迭代点 x^{(k+1)},令:
            x^{(k+1)}=x^{(k)}+\lambda _{k}p^{(k)}
    若 x^{(k+1)} 满足事先规定的终止条件,停止迭代,输出近似最优解 x^{(k+1)},否则,令 k:=k+1,跳转到第二步.
  • 计算的终止条件

常用:相继两次迭代的绝对误差  \parallel x^{(k+1)-x^{(k)}}\parallel < \varepsilon _{1}.

二.一维搜索

这里我们更关心的是:\lambda 的最小值问题。

f(x^{(k+1)}+\lambda _{(k)}p^{(k)}) = \underset{\lambda }{min}f(x^{(k+1)}+\lambda _{(k)}p^{(k)} )

1.黄金分割法

  • 单谷函数
  • 0.618法基本原理与步骤

原理

黄金分割点: x_{(1)}=a_{0} + 0.618(b_{0}-a_{0})

       对称点:{x_{(1)}}'=a_{0} + 0.362(b_{0}-a_{0})

步骤

  1. 选取初始数据,确定初始搜索空间[ a_{0} ,  b_{0} ],给出区间精度 \delta> 0;
  2. 计算初始的两个试点 x_{1} 和 {x_{1}}'
               计算 x_{(1)}=a_{0} + 0.618(b_{0}-a_{0})
                       {x_{(1)}}'=a_{0} + 0.362(b_{0}-a_{0})
               且计算 {\varphi (x_{1})}' 与 \varphi (x_{1}).并令k:=0.
  3. 比较目标函数值. 若 {\varphi (x_{k+1})}'\leq \varphi (x_{k+1})),则跳转到第4步;若 {\varphi (x_{k+1})}'\geq \varphi (x_{k+1}))跳转到第5步.
  4. 缩小搜索区间.令
                                    a_{k+1} = a_{k},b_{k+1} = x_{k+1}
               计算精度,若 \tfrac{b_{k+1}-a_{k+1}}{b_{0}-a_{0}}< \delta,则停止计算,可取 \lambda^{*} =\tfrac{1}{2}(a_{k+1}+b_{k+1}) 则为近似极小点,\varphi (\lambda^{*} ) 为近似极小值。否则计算一对新的试点。
               (1) 保留试点的计算,令
                                               x_{k+2} = {x_{k+1} }',\varphi (x_{k+2}) = \varphi ({x_{k+2}}'),
                    x_{k+2} 是搜索区间的黄金分割点.
               (2) 计算保留试点的对称点——新搜索区间黄金分割点的对称点:
                                               {x_{(k+2)}}'=a_{k+1} + 0.362(b_{k+1}-a_{k+1}),
                    及计算 \varphi ({x}'_{k+2}).令 k:=k+1,跳转到第3步.
  5. 缩小搜索区间.令
                                     a_{k+1} = {x}'_{k+1},b_{k+1} = b_{k}.
               计算精度:若\tfrac{b_{k+1}-a_{k+1}}{b_{0}-a_{0}}< \delta,则停止计算,可取 \lambda^{*} =\tfrac{1}{2}(a_{k+1}+b_{k+1}) 则为近似极小点,\varphi (\lambda^{*} ) 为近似极小值。否则计算一对新的试点。
                (1)保留试点的计算,令
                                               {x}'_{k+2} = x_{k+1} ,\varphi ({x}'_{k+2}) = \varphi (x_{k+1}).
                    {x}'_{k+2} 是新搜索区间 [a_{k+1},b_{k+1}] 的黄金分割点的对称点.
                (2)计算保留试点的对称点——即新搜索区间的黄金分割点:
                                           {x_{(k+2)}}'=a_{k+1} + 0.362(b_{k+1}-a_{k+1}).
                    计算 \varphi (x_{k+2}). 令 k:k+1,返回第 3 步.

2.加步探索法

加步探索法用于无约束的情况(有约束的一元变量也可).

  • 原理

加步搜索法无需给定初始区间,本身就是一种区间试探法.主要思路就是从一点出发,按照一定步长,试图确定出函数值呈现“高 - 低 - 高”的三点:首先从一个方向去找,若不成功,就退回来,再沿反相反方向寻找。

  • 步骤
  1. 给定初始点 x_{1},初始步长 h_{0} > 0.
  2. 用加倍步长的外推法寻找初始区间。得出 
                     x_{k}< x_{k-1}< x_{k-2},
                     f(x_{k})>f(x_{k-1}),f(x_{k-1})< f(x_{k-2}),
    即为函数值呈现“ 高 - 低 - 高 ” 的形式。
  3. 再进一步缩小搜索区间。上述 x_{k-2}, x_{k-1},x_{k} 之间,步长是逐倍增加的,若在 x_{k-1},x_{k} 之间再插入一点 x_{k+1},令
                      x_{k+1}=\tfrac{1}{2}(x_{k+1}+x_{k}),
    这样得到等间距的四个点:x_{k-2},x_{k-1},x_{k+1},x_{k}. 比较 f(x_{k-2}),f(x_{k-1}),f(x_{k+1}),f(x_{k}).令其中函数值最小的点为 x_{2}x_{2}的左右领点分别作为 x_{1} 与 x_{3},则得到了比 ‘2’中更小的区间。

3.牛顿法

  • 基本思想

牛顿法是一种近似逼近法,它的基本思想是:在极小点附近用二阶泰勒级数近似替代目标函数f(x),从而求出f(x)极小点的估计值.如

 min f(x), x\in \Re ^{1}.

现已有极小点的估计值 x^{(k)} ,在 x^{(k)} 点将 f(x) 作二阶泰勒展开:

        f(x)=f(x^{(k)})+f{}'(x^{(k)})(x-x^{(k)})+ \tfrac{1}{2}f{}''(x^{(k)})(x-x^{(k)})^{2}+o(\mid x-x^{(k)} \mid^{2} ).

记前三项为:

        \varphi (x)=f(x^{(k)})+f{}'(x^{(k)})(x-x^{(k)})+ \tfrac{1}{2}f{}''(x^{(k)})(x-x^{(k)})^{2}

则在 x^{(k)} 附近可用 \varphi (x) 来近似 f(x). 故求 \varphi (x) 的驻点 x^{(k+1)},有:

        \varphi{}' (x)=f{}'(x^{(k)})+f{}''(x^{(k)})(x-x^{(k)}).

令 \varphi{}' (x)=0,得 \varphi (x) 的驻点为

        x^{(k+1)}=x^{(k)}-\tfrac{f{}'(x^{(k)})}{f{}''(k)}

以 \varphi (x) 的驻点 x^{(k+1)} 作为 f(x) 在 x^{(k)} 附近的极小点的新估计值.

同理,如果在 x^{(k+1)} 点讲 f(x) 作为二阶泰勒展开.在 x^{(k+1)} 点附近用二阶泰勒多项式 \varphi_{1} (x),近似 f(x),作同样的推导可得到

       x^{(k+2)}=x^{(k+1)}-\tfrac{f{}'(x^{(k+1)})}{f{}''(k+1)}

x^{(k+2)} 是 \varphi_{1} (x) 的驻点,用它作为 f(x) 极小点的新的估计值.利用这个迭代公式可得到一个点列{x}.

三.无约束问题的最优化方法

这里我们将讨论构造无约束问题搜索方向的方法。大致分成两类:一类在计算过程中只用到目标函数值,不用计算函数,通常称为直接搜索法(变量轮换法);另一类要用到目标函数的导数计算,称为解析法(最速下降法、牛顿法、共轭方向法).

1.变量轮换法

变量轮换法是把多变量函数的优化问题转化为一系列单变量函数的优化问题来解.它的基本思路是:认为有利的搜索方向是各个坐标轴的方向,因此它轮流按各个坐标轴的方向搜索最优点.

变量轮换法的算法步骤和基本原理如下:

设问题为:

                min f(x), x\varepsilon \Re ^{n},f(x)\varepsilon \Re ^{1}

记 e_{i}=(0 , ... , 1 , ... , 0)^{T}(i=1,2,3,...,n), 即 e_{i} 为第 i 个分量为1其余分量为0的单位向量.

  1. 给定初始点 x^{1}=(c_{1},c_{2}, ... ,c_{n})^{T},其中 c_{1},c_{2}, ... ,c_{n} 为常数。
  2. 从 x^{(1)} 出发,先沿第1个坐标轴方向 e_{1} 进行一维搜索,记求得的最优步长为 \lambda _{1},则可得到新点 x^{2} :
                                  f(x^{(2)})=f(x^{(1)}+\lambda _{1}e_{1})=\underset{\lambda }{min}f(x^{(1)}+\lambda e_{1})
                                  x^{(2)} = x^{(1)}+\lambda _{1}e_{1}.
               再以 x^{(2)} 为起点,沿着第2个坐标轴方向 e_{2} 进行一维搜索,求得最优步长为 \lambda _{2},可求得 x^{3} :
                                  f(x^{(3)})=f(x^{(2)}+\lambda _{2}e_{2})=\underset{\lambda }{min}f(x^{(2)}+\lambda e_{2})     
                                  x^{(3)} = x^{(2)}+\lambda _{2}e_{2}.
               就这样依次按照坐标轴方向进行一维搜索,直到 n 个坐标轴方向全部搜索一遍,最后可得到点 x^{(n+1)} :
                                 f(x^{(n+1)})=f(x^{(n)}+\lambda _{n}e_{n})=\underset{\lambda }{min}f(x^{(n)}+\lambda e_{n})
                                 x^{(n+1)} = x^{(n)}+\lambda _{n}e_{n}.
                上述就完成了一次变量轮换的一次迭代.
  3. 令 x^{(1)} := x^{(n+1)},返回第2步,以 x^{(n+1)} 为起点,再沿着各坐标轴方向依次进行一维搜索.一直到所得最新点
               x^{(n+1)}满足给定的精度为止,输出 x^{(n+1)} 作为 f(x) 极小点的近似值。

2.最速下降法

算法步骤:

  1. 给定初始数据:起始点 x^{(0)}, 给定终止误差 \varepsilon > 0,令 k:=0.
  2. 求梯度向量模的值:\parallel \bigtriangledown f(x^{(k)})\parallel.

.

.

.

(发布库存,待到用时再续写)

猜你喜欢

转载自blog.csdn.net/Robot_Starscream/article/details/85051181