非线性优化的基本概念

定义:如果目标函数或约束条件中至少有一个是非线性函数时的最优化问题就叫做非线性规划问题。

一般形式

min f ( X )

gi( X ) ≥ 0 , i = 1,2,…,m;

hj( X ) ≥ 0 , j = 1,2,…,m;

其中 X = ( X1 , X2 ,…, Xn )T ∈ En ,f ,gi,hj 是定义在 En 上的实值函数。

其他情况:求目标函数的最大值或约束条件为小于等于零的情况,都可通过取其相反数化为上述一般形式。

解的定义

  1. 把满足问题一般形式中条件的解 X 称为可行解(或可行点),所有可行点的集合称为可行集(或可行域)记为 D ,即 D = { X | gi( X ) ≥ 0 , hj( X ) ≥ 0 , X ∈ En }
  2. 设 X* ∈ D ,若存在 σ>0 ,使得对一切 X∈ D 且 || X - X* ||<σ,都有 f ( X* ) < f ( X ),则 X* 是 f ( X ) 在D上的局部极小值点(局部最优解)。特别地当 X ≠ X* 时,若 f ( X* ) < f ( X ) ,则称X*是 f ( X ) 在D上的严格局部极小值点(严格局部最优解)。
  3. 设 X* ∈ D ,对任意的 X ∈ D ,都有 f ( X* ) < f ( X ) ,则称X是f(X)在D上的全局极小值点(全局最优解)。特别地当 X ≠ X* 时,若 f ( X* ) < f ( X ) ,则称X是 f ( X ) 在D上的严格全局极小值点(严格全局最优解)。

非线性优化的基本解法

罚函数法

罚函数法基本思想是通过构造罚函数把约束问题转化为一系列无约束最优化问题,进而用无约束最优化方法去求解.这类方法称为序列无约束最小化方法.简称为SUMT法.

  1. SUMT外点法

对于一般的非线性规划,可设:T ( X , M ) = f ( X ) + M ∑ [ min ( 0 , gi ( X ) ) ]2 + M ∑ [ hj ( X ) ]2,即将非线性优化问题转化为无约束问题 min T ( X , M )。

其中 T ( X , M ) 称为罚函数,M 称为罚因子,带 M 的项称为罚项,这里的罚函数只对不满足约束条件的点实行惩罚:当 X ∈ D 时,满足各 gi( X ) ≥ 0 , hj( X ) ≥ 0 ,故罚项 = 0,不受惩罚。当 X ∉ D 时,必有 的约束条件,故罚项 > 0,要受惩罚。

罚函数法的缺点是:每个近似最优解 Xk 往往不是容许解,而只能近似满足约束,在实际问题中这种结果可能不能使用;在解一系列无约束问题中,计算量太大,特别是随着 Mk 的增大,可能导致错误.

  1. SUMT内点法

设集合D0 = { X | gi ( X ) >0 , i = 1,2,…,m } ≠ 空集,D0 是可行域内所有严格内点的集合。

构造障碍函数 I ( X , r ) = f ( X ) + r∑ lngi ( X ) ,其中 r∑ lngi ( X ) 为障碍项,r 为障碍因子,这样问题就转化成一系列求极值问题。

近似规划法

近似规划法的基本思想:将目标函数和约束条件近似为线性函数,并对变量的取值范围加以限制,从而得到一个近似线性规划问题,再用单纯形法求解之,把其符合原始条件的最优解作为解的近似.每得到一个近似解后,都从这点出发,重复以上步骤,这样,通过求解一系列线性规划问题,产生一个由线性规划最优解组成的序列,经验表明,这样的序列往往收敛于非线性规划问题的解。

算法步骤

  1. 给定初始可行点 X1 = { x11,x21,…,xn1},步长限制 σj1 ( j = 1,…,n ),步长缩小系数 β ∈ ( 0 , 1 ),允许误差 ε ,令k=1;
  2. 在点 Xk 处,将 f ( X ),gi( X ),hj( X ) 按泰勒级数展开并取一阶近似,得到近似线性规划问题:
    min f ( X ) ≈ f ( Xk ) + ▽ f ( Xk )T ( X - Xk )
    gi( X ) ≈ gi ( Xk ) + ▽ gi ( Xk )T ( X - Xk ) ≥ 0
    hj( X ) ≈ hj ( Xk ) + ▽ hj ( Xk )T ( X - Xk ) = 0
  3. 在上述近似线性规划问题的基础上增加一组限制步长的线性约束条件。因为线性近似通常只在展开点附近近似程度较高,故需要对变量的取值范围加以限制,所增加的约束条件是:| xj - xjk | ≤ σjk
    求解该线性规划问题,得到最优解 ;
  4. 检验 Xk+1 点对原约束是否可行。若对原约束可行,则转步骤5;否则,缩小步长限制,令 σjk = β σjk ,返回步骤3,重解当前的线性规划问题。
  5. 判断精度:若 | σjk | < ε,则点 Xk+1 为近似最优解;否则,令 σjk+1 = σjk ,k=k+1,返回步骤2。

MATLAB解非线性优化问题

二次规划

标准型为:
min Z = 1/2XTHX + CT X
AX ≤ b,Aeq * X = beq,VLB ≤ X ≤VUB

常用格式如下:

1.	x = quadprog ( H, C, A, b);
   2.	x = quadprog ( H, C, A, b, Aeq, beq);
   3.	x = quadprog ( H, C, A, b, Aeq, beq, VLB, VUB);
   4.	x = quadprog ( H, C, A, b, Aeq, beq, VLB, VUB, X0);
   5.	x = quadprog ( H, C, A, b, Aeq, beq, VLB, VUB, X0, options);
   6.	[x, fval] = quadprog (...) ;
   7.	[x, fval, exitflag] = quadprog (...);
   8.	[x, fval, exitflag, output] = quadprog (...);
一般非线性规划

标准型为:
min F ( X )
AX ≤ b,Aeq * X = beq,G (X) ≤ 0,Ceq ( X )= 0,VLB ≤ X ≤VUB

首先建立M文件fun.m,定义目标函数 F (X) ,若约束条件中有非线性约束:G(X) 或 Ceq ( X ) = 0,则建立M文件nonlcon.m定义函数 G (X ) 与 Ceq ( X )。

常用格式如下:

1.  x = fmincon ( ‘fun’, X0, A, b)
   2.  x = fmincon ( ‘fun’, X0, A, b, Aeq, beq)
   3.  x = fmincon ( ‘fun’, X0, A, b, Aeq, beq, VLB, VUB)
   4.  x = fmincon ( ‘fun’, X0, A, b, Aeq, beq, VLB, VUB, ’nonlcon’)
   5.  x = fmincon ( ‘fun’, X0, A, b, Aeq, beq, VLB, VUB, ’nonlcon’, options)   
   6.  [x, fval] = fmincon(...)
   7.  [x, fval, exitflag] = fmincon(...)
   8.  [x, fval, exitflag, output] = fmincon(...)
  1. fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。
  2. fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。
  3. fmincon函数可能会给出局部最优解,这与初值X0的选取有关。