author: lunar
date: Tue 01 Sep 2020 04:31:18 PM CST
非線性規划
如果目標函數中包含非線性函數, 就稱這種規划問題為非線性規划問題.
目前解決非線性規划還沒有一種通用方法.
線性規划和非線性規划的區別
如果線性規划的最優解存在, 其最優解只能在其可行域的邊界上達到(特別是可行域的頂點上達到); 而非線性規划的最優解可能在可行域的任意一點達到.
非線性規划的MATLAB解法
首先可以將非線性規划表示為如下形式:
C(x), Ceq(x)是非線性向量函數.
MATLAB計算非線性規划的函數為
x = fmincon(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON, OPTIONS)
fun
是用.m文件定義的目標函數; x0表示決策變量的初始值; NONLCON是用.m文件定義的非線性向量函數; OPTIONS定義了優化參數; 其余參數與線性規划一致.
示例
求解下列非線性規划問題
用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輪迭代點, 記
通常將基本迭代格式中的\(p^k\)稱為第k輪搜索方向, \(t_k\)為沿\(p^k\)方向的步長. 有機器學習那味兒了.
對於向量p, 如果存在\(t\in (0, +\infty)\)使得
K即為可行域, 則稱p為\(\overline x\)關於K的可行方向.
凸函數, 凸規划
凸函數的定義為: 若對區間(0,1)內的任何實數\(\alpha\), 恆有
的函數為定義在R上的嚴格凸函數.
目標函數為凸函數, 約束函數也為凸函數的非線性規划為凸規划.
可以證明, 凸規划的可行域為凸集, 其局部最優解即為全局最優解, 而且其最優解的集合形成一個凸集. 當凸規划的目標函數f(x)為嚴格凸函數時, 其最優解必定唯一.
無約束問題
無約束問題即沒有約束條件的問題, 即求解函數極小值的問題
一維搜索方法
當用迭代法求函數的極小點時, 常常用到一維搜索, 即沿一已知方向求目標函數的極小點.
一種比較一個區間上兩端函數值的方法, 原理非常簡單, 不講了.
但是這種方法一般只能用於單極值區間, 對於一個多極值的函數. 可以嘗試先畫出函數圖, 然后找出所有只有單個極值的區間分別求解.
斐波那契法
上面那種方法本是隨機選取區間的兩個點, 斐波那契法能夠保證區間按照按照斐波那契數進行縮小.
即
根據需要求解的精度\(\delta\), 確定迭代次數的方式
也可以用黃金比例數代替斐波那契數列.
二次插值法
對極小化問題, 當f(t)在[a,b]上連續時, 可以考慮用多項式插值來進行一維搜索. 基本思想為: 在搜索區間內, 不斷用低次(不超過三次)多項式來近似目標函數, 並逐步用插值多項式的極小點來逼近極小化問題的最優解.
無約束問題的解法
梯度下降法
總是朝着梯度下降最快的方向前進
牛頓法
首先需要了解一下什么是黑塞矩陣
考慮目標函數f在\(x^k\)處的二次逼近式
假設黑塞矩陣
正定
由於\(\nabla^2 f(x^k)\)正定, 函數Q的駐點\(x^{k+1}\)是Q(x)的極小點. 令
解得
所以從\(x^k\)出發的搜索方向為
牛頓法的優點是收斂速度快; 缺點是有時不好用而需采取改進措施, 當維度很高時, 計算矩陣的逆矩陣計算量將會很大.
變尺度法
變尺度法由於能夠避免計算二階導數矩陣及其逆矩陣, 對於高緯度問題具有顯著的優越性.
為了不計算二階導數矩陣\([\nabla^2 f(x^k)]\)及其逆矩陣, 我們設法構造另一個矩陣, 來逼近二階導數矩陣, 這一類也稱為擬牛頓法(Quasi-Newton Method).
當f(x)是二次函數時, 任兩點\(x^k\)和\(x^{k+1}\)的梯度之差為
因此, 我們構造黑塞矩陣的第k+1次近似\(\overline H^{k+1}\)滿足關系式
這就是擬牛頓條件.
令
記
稱為校正矩陣.
省略中間過程, 可求得校正矩陣
從而有
以上矩陣稱為尺度矩陣, 取第一個尺度矩陣\(\overline H^{(0)}\)為單位矩陣.
由此可得DFP變尺度法的計算步驟為:
- 給定初始點\(x_0\)以及梯度允許誤差\(\varepsilon > 0\)
- 若\(\lvert\nabla f(x^{(0)})\rvert \le\varepsilon\), 則\(x_0\)為近似點, 停止迭代.否則轉下一步.
- 令
在\(p^0\)方向進行一維搜索, 確定最佳步長\(\lambda_0\)
於是可以得到下一個近似點
- 對於近似點\(x^k\), 計算其梯度, 若有
則停止迭代, 最終解為\(x^k\); 否則根據式(18)計算\(\overline H^{(k)}\), 令\(p^k = -\overline H^{(k)}\nabla f(x^k)\). 在\(p^k\)方向進行一維搜索, 得到\(\lambda_k\), 從而得到下一個近似點
- 不斷重復第4步直到滿足允許誤差.
約束極值問題
帶有約束條件的極值問題稱為約束極值問題, 也叫規划問題.
二次規划問題
目標函數為自變量的二次函數的問題稱為二次規划問題.
二次規划的模型可以表述為
MATLAB中求解二次規划的函數為
[x, f] = quadprog(H, f, A, b, Aeq, beq, LB, UB, X0, OPTIONS)
罰函數法
利用罰函數法, 可將非線性規划問題轉化為一系列無約束機制問題. 因此也稱這種方法為序列無約束最小化技術, SUMT(Sequential Unconstrained Minization Technique).
罰函數法的基本思想是利用問題中的約束函數作出適當的罰函數, 由此構造出帶參數的增廣目標函數, 把問題轉化為無約束線性規划問題.
罰函數法分為外罰函數法和內罰函數法. 現在介紹外罰函數法.
對於問題:
取一個充分大的正數M, 構造函數
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)