非線性規划



author: lunar
date: Tue 01 Sep 2020 04:31:18 PM CST

非線性規划

如果目標函數中包含非線性函數, 就稱這種規划問題為非線性規划問題.

目前解決非線性規划還沒有一種通用方法.

線性規划和非線性規划的區別

如果線性規划的最優解存在, 其最優解只能在其可行域的邊界上達到(特別是可行域的頂點上達到); 而非線性規划的最優解可能在可行域的任意一點達到.

非線性規划的MATLAB解法

首先可以將非線性規划表示為如下形式:

\[\min f(x)\\ \begin{cases} Ax\le B\\ Aeq\dot x = Beq\\ C(x) \le 0\\ Ceq(x) = 0 \end{cases} \]

C(x), Ceq(x)是非線性向量函數.

MATLAB計算非線性規划的函數為
x = fmincon(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON, OPTIONS)

fun是用.m文件定義的目標函數; x0表示決策變量的初始值; NONLCON是用.m文件定義的非線性向量函數; OPTIONS定義了優化參數; 其余參數與線性規划一致.

示例

求解下列非線性規划問題

\[\min f(x) = x_1^2 + x_2^2 + x_3^2 + 8\\ \begin{aligned} s.t.\quad &x_1^2 - x_2 + x_3^2 \ge 0\\ &x_1 + x_2^2 + x_3^2 \le 20\\ &-x_1 - x_2^2 + 2 = 0\\ &x_2 + 2x_3^2 = 3\\ &x_1, x_2, x_3 \ge 0 \end{aligned} \]

用MATLAB代碼求解為

編寫目標函數的.m文件target.m

function f = target(x);
f = sum(x.^2) + 8;

編寫非線性約束條件的.m文件nonlinear.m

function [g,h] = nonlinear(x);
g = [-x(1)^2 + x(2) - x(3)^2 
     x(1) + x(2)^2 + x(3)^3 - 20
    ]; %非線性不等式約束
f = [
     -x(1) - x(2)^2 + 2 
     x(2) + 2x(3)^2 - 3
    ]; %非線性等式約束

主程序文件main.m

options = optimset('largescale', 'off');
[x, y] = fmincon('target', rand(3,1), [], [], [], [], zeros(3,1),[], 'nonlinear', options)

求解非線性規划的基本迭代格式(難點)

由於線性規划的目標函數為線性函數, 可行域為凸集, 所以求出的最優解就是整個可行域上的最優解. 非線性規划則不然, 有時求出的解雖然是一部分可行域上的極值點, 但不一定是整個可行域上的全局最優解.

對於非線性規划模型(NP), 可以采用迭代方法求最優解. 基本思想為: 從一個選定的初始點出發, 按照一個特定的迭代規則產生一個點列{xk}; 使得當{xk}是有窮點列時, 其最后一個點是(NP)的最優解; 為無窮點列時, 它有極限點, 並且極限點是(NP)的最優解;

\(x^k\in R^n\)是某迭代方法的第k輪迭代點, \(x^{k+1}\in R^n\)是第n+1輪迭代點, 記

\[x^{k+1} = x^k + t_kp^k\\ t_k\in R^1, p^k\in R^n, \lvert p^k\rvert = 1 \]

通常將基本迭代格式中的\(p^k\)稱為第k輪搜索方向, \(t_k\)為沿\(p^k\)方向的步長. 有機器學習那味兒了.

對於向量p, 如果存在\(t\in (0, +\infty)\)使得

\[f(\overline x + tp) < f(\overline x)\\ \overline x + tp \in K \]

K即為可行域, 則稱p為\(\overline x\)關於K的可行方向.

凸函數, 凸規划

凸函數的定義為: 若對區間(0,1)內的任何實數\(\alpha\), 恆有

\[f(\alpha x_1 + (1-\alpha)x_2) \le \alpha f(x_1) + (1-\alpha)f(x_2) \]

的函數為定義在R上的嚴格凸函數.

目標函數為凸函數, 約束函數也為凸函數的非線性規划為凸規划.

可以證明, 凸規划的可行域為凸集, 其局部最優解即為全局最優解, 而且其最優解的集合形成一個凸集. 當凸規划的目標函數f(x)為嚴格凸函數時, 其最優解必定唯一.

無約束問題

無約束問題即沒有約束條件的問題, 即求解函數極小值的問題

一維搜索方法

當用迭代法求函數的極小點時, 常常用到一維搜索, 即沿一已知方向求目標函數的極小點.

一種比較一個區間上兩端函數值的方法, 原理非常簡單, 不講了.

但是這種方法一般只能用於單極值區間, 對於一個多極值的函數. 可以嘗試先畫出函數圖, 然后找出所有只有單個極值的區間分別求解.

斐波那契法

上面那種方法本是隨機選取區間的兩個點, 斐波那契法能夠保證區間按照按照斐波那契數進行縮小.

\[t_1 = a + \frac{F_{n-1}}{F_n}(b-a),t_2 = a + \frac{F_{n-2}}{F_n}(b-a) \]

根據需要求解的精度\(\delta\), 確定迭代次數的方式

\[\frac{b-a}{F_n} \le \delta \]

也可以用黃金比例數代替斐波那契數列.

二次插值法

對極小化問題, 當f(t)在[a,b]上連續時, 可以考慮用多項式插值來進行一維搜索. 基本思想為: 在搜索區間內, 不斷用低次(不超過三次)多項式來近似目標函數, 並逐步用插值多項式的極小點來逼近極小化問題的最優解.

無約束問題的解法

梯度下降法

總是朝着梯度下降最快的方向前進

牛頓法

首先需要了解一下什么是黑塞矩陣

考慮目標函數f在\(x^k\)處的二次逼近式

\[f(x)\approx Q(x) = f(x^k) + \nabla f(x^k)^T(x-x^k) + \frac12(x-x^k)^T\nabla^2f(x^k)(x-x^k) \]

假設黑塞矩陣

\[\nabla^2 f(x^k) = \begin{bmatrix} \frac{\partial^2 f(x^k)}{\partial x_1^2} & \cdots & \frac{\partial^2 f(x^k)}{\partial x_1\partial x_n}\\ \vdots & \cdots & \vdots \\ \frac{\partial f(x^k)}{\partial x_n\partial x_1} & \cdots & \frac{\partial^2 f(x^k)}{\partial x_n^2} \end{bmatrix} \]

正定

由於\(\nabla^2 f(x^k)\)正定, 函數Q的駐點\(x^{k+1}\)是Q(x)的極小點. 令

\[\nabla Q(x^{k+1}) = \nabla f(x^k) + \nabla^2 f(x^k)(x^{k+1} - x^k) = 0 \]

解得

\[x^{k+1} = x^k - [\nabla^2 f(x^k)]^{-1}\nabla f(x^k) \]

所以從\(x^k\)出發的搜索方向為

\[p^k = -[\nabla^2 f(x^k)]^{-1}\nabla f(x^k) \]

牛頓法的優點是收斂速度快; 缺點是有時不好用而需采取改進措施, 當維度很高時, 計算矩陣的逆矩陣計算量將會很大.

變尺度法

變尺度法由於能夠避免計算二階導數矩陣及其逆矩陣, 對於高緯度問題具有顯著的優越性.

為了不計算二階導數矩陣\([\nabla^2 f(x^k)]\)及其逆矩陣, 我們設法構造另一個矩陣, 來逼近二階導數矩陣, 這一類也稱為擬牛頓法(Quasi-Newton Method).

當f(x)是二次函數時, 任兩點\(x^k\)\(x^{k+1}\)的梯度之差為

\[\nabla f(x^{k+1}) - \nabla f(x^k) = A(x^{k+1} - x^k) \]

因此, 我們構造黑塞矩陣的第k+1次近似\(\overline H^{k+1}\)滿足關系式

\[x^{k+1} - x^k = \overline H^{(k+1)}[\nabla f(x^{(k+1)}) - \nabla f(x^k)] \]

這就是擬牛頓條件.

\[\begin{cases} \Delta G^{(k)} = \nabla f(x^{k+1}) - \nabla f(x^k)\\ \Delta x^k = x^{k+1} - x^k \end{cases} \]

\[\Delta \overline H^{(k)} = \overline H^{(k+1)} - \overline H^{(k)} \]

稱為校正矩陣.

省略中間過程, 可求得校正矩陣

\[\Delta \overline H^{(k)} = \frac{\Delta x^k(\Delta x^k)^T}{(\Delta G^{(k)})^T\Delta x^k} - \frac{\overline H^{(k)}\Delta G^{(k)}(G^{(k)})^T\Delta H^{(k)}}{(\Delta G^{(k)})^T\overline H^{(k)}\Delta G^{(k)}} \tag{17} \]

從而有

\[\overline H^{(k+1)} = \overline H^{(k)} + \frac{\Delta x^k(\Delta x^k)^T}{(\Delta G^{(k)})^T\Delta x^k} - \frac{\overline H^{(k)}\Delta G^{(k)}(G^{(k)})^T\Delta H^{(k)}}{(\Delta G^{(k)})^T\overline H^{(k)}\Delta G^{(k)}} \tag{18} \]

以上矩陣稱為尺度矩陣, 取第一個尺度矩陣\(\overline H^{(0)}\)為單位矩陣.

由此可得DFP變尺度法的計算步驟為:

  1. 給定初始點\(x_0\)以及梯度允許誤差\(\varepsilon > 0\)
  2. \(\lvert\nabla f(x^{(0)})\rvert \le\varepsilon\), 則\(x_0\)為近似點, 停止迭代.否則轉下一步.

\[\overline H^{(0)} = I (單位矩陣)\\ p^0 = -\overline H^{(0)}\nabla f(x^0) \]

\(p^0\)方向進行一維搜索, 確定最佳步長\(\lambda_0\)

\[\min_\lambda f(x^0+\lambda p^0) = f(x^0 + \lambda_0p^0) \]

於是可以得到下一個近似點

\[x^1 = x^0 + \lambda_0p^0 \]

  1. 對於近似點\(x^k\), 計算其梯度, 若有

\[\lvert\nabla f(x^k)\rvert\le \varepsilon \]

則停止迭代, 最終解為\(x^k\); 否則根據式(18)計算\(\overline H^{(k)}\), 令\(p^k = -\overline H^{(k)}\nabla f(x^k)\). 在\(p^k\)方向進行一維搜索, 得到\(\lambda_k\), 從而得到下一個近似點

\[x^{k+1} = x^k + \lambda_kp^k \]

  1. 不斷重復第4步直到滿足允許誤差.

約束極值問題

帶有約束條件的極值問題稱為約束極值問題, 也叫規划問題.

二次規划問題

目標函數為自變量的二次函數的問題稱為二次規划問題.

二次規划的模型可以表述為

\[\min \frac12x^THx + f^Tx,\\ s.t.\quad \begin{cases} Ax\le b\\Aeq\dot x = beq\\ \end{cases} \]

MATLAB中求解二次規划的函數為
[x, f] = quadprog(H, f, A, b, Aeq, beq, LB, UB, X0, OPTIONS)

罰函數法

利用罰函數法, 可將非線性規划問題轉化為一系列無約束機制問題. 因此也稱這種方法為序列無約束最小化技術, SUMT(Sequential Unconstrained Minization Technique).

罰函數法的基本思想是利用問題中的約束函數作出適當的罰函數, 由此構造出帶參數的增廣目標函數, 把問題轉化為無約束線性規划問題.

罰函數法分為外罰函數法和內罰函數法. 現在介紹外罰函數法.

對於問題:

\[\min f(x)\\ s.t.\quad \begin{cases} g_i(x)\le 0, i = 1,\dots,r,\\ h_j(x)\ge 0, j = 1,\dots,s,\\ k_m(x) = 0, m = 1,\dots,t \end{cases} \]

取一個充分大的正數M, 構造函數

\[P(x, M) = f(x) + M\sum_{i=1}^r\max(g_i(x), 0) - M\sum_{i=1}^s\min(h_i(x), 0) + M\sum_{i=1}^t|k_i(x)| \]

MATLAB 求約束極值問題

fminbnd 函數

求單變量非線性函數在區間\([x_1, x_2]\)上的最小值

語法格式
[x, f] = fminbnd(fun, x1, x2, options)

fminimax 函數

可以用來求解帶有非線性約束條件的問題

x = fminimax(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM