非線性規(guī)劃

1. 非線性規(guī)劃

1.1 示例以及定義

如果目標函數(shù)或約束條件中包含非線性函數(shù)贬养,就稱這種規(guī)劃問題為非線性規(guī)劃問 題昼捍。一般說來识虚,解非線性規(guī)劃要比解線性規(guī)劃問題困難得多。而且妒茬,也不象線性規(guī)劃有單純形法這一通用方法担锤,非線性規(guī)劃目前還沒有適于各種問題的一般算法,各個方法都有自己特定的適用范圍乍钻。

1.2 線性規(guī)劃與非線性規(guī)劃的區(qū)別

如果線性規(guī)劃的優(yōu)解存在肛循,其優(yōu)解只能在其可行域的邊界上達到(特別是可行 域的頂點上達到);而非線性規(guī)劃的優(yōu)解(如果優(yōu)解存在)則可能在其可行域的任意一點達到团赁。

1.3非線性規(guī)劃的Matlab 解法

Matlab 中非線性規(guī)劃的數(shù)學模型寫成以下形式

minf(x) \left\{\begin{array}{l}{A x \leq B} \\ {A e q \cdot x=B e q} \\ {C(x) \leq 0} \\ {Ceq(x)=0}\end{array}\right.
其中C(x)和Ceq(x)是非線性函數(shù)
Matlab 中的命令是
X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)
NONLCON 是用 M 文件定義的非線性向量函數(shù)C(x)和Ceq(x)
給出例子如下
\min f(x)=x_{1}^{2}+x_{2}^{2}+x_{3}^{2}+8
\begin{array}{l}{x_{1}^{2}-x_{2}+x_{3}^{2} \geq 0} \\ {x_{1}+x_{2}^{2}+x_{3}^{3} \leq 20} \\ {-x_{1}-x_{2}^{2}+2=0}\\{x_{2}+2 x_{3}^{2}=3\\ x_{1}, x_{2}, x_{3} \geq 0}\end{array}

function f=fun1(x); %定義目標函數(shù)
f=sum(x.^2)+8;
function [g,h]=fun2(x);
g=[-x(1)^2+x(2)-x(3)^2
x(1)+x(2)^2+x(3)^3-20];  %非線性不等式約束
h=[-x(1)-x(2)^2+2
x(2)+2*x(3)^2-3]; %非線性等式約束

求解程序:

[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')
>>
x =

    0.5522
    1.2033
    0.9478


y =

   10.6511

2.無約束問題

2.1 一維搜索方法

當用迭代法求函數(shù)的極小點時育拨,常常用到一維搜索,即沿某一已知方向求目標函數(shù)的極小點欢摄。一維搜索的方法很多熬丧,常用的有:

  1. 試探法(“成功—失敗”,斐波那契法怀挠,0.618 法等)
  2. 插值法(拋物線插值法析蝴,三次插值法等)
  3. 微積分中的求根法(切線法,二分法等)

下面有兩個通過不斷地縮短區(qū)間[a,b]的長度绿淋,來搜索得到近似優(yōu)解的兩個方法闷畸。

2.1.1 斐波那契法
2.1.2 0.618法

2.2 無約束極值問題的解法

迭代法大體上分為兩點:一是用到函數(shù)的一階導數(shù)或二階導數(shù), 稱為解析法吞滞。另一是僅用到函數(shù)值佑菩,稱為直接法。

2.3.1 解析法
  1. 梯度法


    其中t^k為步長裁赠,通過求在這點去最小函數(shù)值時的t^k
    給出一個例子如下:
    【例】
    用最速下降法求解min f(x) = x_1^2+25x_2^2
    要求初始點為x^0 = [2,2]^T
function [f,df] = detaf(x);
f = x(1)^2+25*x(2)^2;
df = [2*x(1)
    50*x(2)];%函數(shù)的梯度
clc
x = [2,2];
[f0,g] = detaf(x);
while norm(g)>0.000001
    p = -g/norm(g);
    t = 1.0;
    f = detaf(x+t*p);
    while f>f0   %尋找讓函數(shù)值最小的t
        t = t/2;
        f = detaf(x+t*p);
    end
    x = x+t*p;
    [f0,g] = detaf(x);
end
x,f0
  1. 牛頓法
    考慮目標函數(shù)在點x^k的二次逼近
    f(x) \approx Q(x)=f\left(x^{k}\right)+\nabla f\left(x^{k}\right)^{T}\left(x-x^{k}\right)+\frac{1}{2}\left(x-x^{k}\right)^{T} \nabla^{2} f\left(x^{k}\right)\left(x-x^{k}\right)
    假定海塞矩陣正定:
    \nabla^{2} f\left(x^{k}\right)=\left[ \begin{array}{ccc}{\frac{\partial^{2} f\left(x^{k}\right)}{\partial x_{1}^{2}}} & {\cdots} & {\frac{\partial^{2} f\left(x^{k}\right)}{\partial x_{1} \partial x_{n}}} \\ {\vdots} & {\ldots} & {\vdots} \\ {\frac{\partial^{2} f\left(x^{k}\right)}{\partial x_{n} \partial x_{1}}} & {\cdots} & {\frac{\partial^{2} f\left(x^{k}\right)}{\partial x_{n}^{2}}}\end{array}\right]

2.4 matlab求解無約束極值

3. 約束極值問題

帶有約束條件的極值問題稱為約束極值問題殿漠,也叫規(guī)劃問題。 求解約束極值問題要比求解無約束極值問題困難得多佩捞。為了簡化其優(yōu)化工作绞幌,可采用以下方法:將約束問題化為無約束問題;將非線性規(guī)劃問題化為線性規(guī)劃問題一忱,以及能將復雜問題變換為較簡單問題的其它方法莲蜘。 庫恩—塔克條件是非線性規(guī)劃領(lǐng)域中重要的理論成果之一,是確定某點為優(yōu)點的必要條件帘营,但一般說它并不是充分條件(對于凸規(guī)劃票渠,它既是優(yōu)點存在的必要條件, 同時也是充分條件)芬迄。

3.1 二次規(guī)劃

若某非線性規(guī)劃的目標函數(shù)為自變量 x的二次函數(shù)庄新,約束條件又全是線性的,就稱 這種規(guī)劃為二次規(guī)劃薯鼠。
\min \frac{1}{2} x^{T} H x+f^{T} x
s.t.\left\{\begin{array}{l}{A x \leq b} \\ {A e q \cdot x=b e q}\end{array}\right.
【例】求解如下的例子

【注意】要提出\frac{1}{2}

h=[4,-4;-4,8]; 
f=[-6;-3]; 
a=[1,1;4,1]; 
b=[3;9]; 
[x,value]=quadprog(h,f,a,b,[],[],zeros(2,1)) 
>>
x =

    1.9500
    1.0500


value =

  -11.0250

3.2 罰函數(shù)法

利用罰函數(shù)法择诈,可將非線性規(guī)劃問題的求解,轉(zhuǎn)化為求解一系列無約束極值問題出皇, 因而也稱這種方法為序列無約束小化技術(shù)
罰函數(shù)法求解非線性規(guī)劃問題的思想是羞芍,利用問題中的約束函數(shù)作出適當?shù)牧P函數(shù),由此構(gòu)造出帶參數(shù)的增廣目標函數(shù)郊艘,把問題轉(zhuǎn)化為無約束非線性規(guī)劃問題荷科。主要有 兩種形式,一種叫外罰函數(shù)法纱注,另一種叫內(nèi)罰函數(shù)法畏浆,下面介紹外罰函數(shù)法。
min f(x) \left\{\begin{array}{l}{g_{i}(x) \leq 0, i=1, \cdots, r} \\ {h_{j}(x) \geq 0, j=1, \cdots, \mathrm{s}} \\ {k_{m}(x)=0, m=1, \cdots, t}\end{array}\right.
取一個充分大的數(shù)M>0狞贱,構(gòu)造函數(shù)如下:
P(x, M)=f(x)+M \sum_{i=1}^{r} \max \left(g_{i}(x), 0\right)-M \sum_{i=1}^{s} \min \left(h_{i}(x), 0\right)+M \sum_{i=1}^{T}\left|k_{i}(x)\right|
直觀上可以理解為若g(x)>0則給這個目標函數(shù)一個很大的懲罰刻获,而如果g(x)>0則對該目標函數(shù)無影響.
或者寫成:


在matlab中可以直接使用min,max瞎嬉,sum函數(shù)蝎毡。問題轉(zhuǎn)化為增廣目標函數(shù)的無約束優(yōu)化問題,然后用fminunc()函數(shù)解決

【例】
\left\{\begin{array}{c}{\min f(x)=x_{1}^{2}+x_{2}^{2}+8} \\ {x_{1}^{2}-x_{2} \geq 0} \\ {-x_{1}-x_{2}^{2}+2=0} \\ {x_{1}, x_{2} \geq 0}\end{array}\right.

function g=test1(x);
M=50000;
f=x(1)^2+x(2)^2+8;
g=f-M*min(x(1),0)-M*min(x(2),0)-M*min(x(1)^2-x(2),0)+M*abs(-x(1)-x(2)^2+2);

或者寫成矩陣形式:

function g=test2(x);
M=50000;
f=x(1)^2+x(2)^2+8;
g=f-M*sum(min([x';zeros(1,2)]))-M*min(x(1)^2-x(2),0)+M*abs(-x(1)-x(2)^2+2);

其中的min([x';zeros(1,2)])表示x_1,x_2都大于0
再在命令行中輸入

[x,y]=fminunc('test1',rand(2,1)) 
>>
x =

    1.3118
    0.8296


y =

   10.4090

[x,y] = fminunc('test2',rand(2,1))
>>
x =

    1.1810
    0.9050


y =

   10.2140

可以看出兩次的效果略有偏差氧枣。但是我們不滿足于此沐兵,由于問題的規(guī)模較小,嘗試使用fmincon求得精確得最優(yōu)解

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

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

[x,y] = fmincon('fun1',rand(2,1),[],[],[],[],zeros(3,1),[],'fun2',options)
>>
x =

    0.5000
    1.2247


y =

    9.7500

可以看出罰函數(shù)法雖然收斂速度快便监,但是精確度不是很高扎谎。當問題規(guī)模較大,不好求解時烧董,可以考慮使用毁靶。

3.3 使用梯度法求解約束線性規(guī)劃

f(x)=e^{x_{1}}\left(4 x_{1}^{2}+2 x_{2}^{2}+4 x_{1} x_{2}+2 x_{2}+1\right)
其中約束條件為:
\left\{\begin{array}{l}{x_{1} x_{2}-x_{1}-x_{2} \leq-1.5} \\ {x_{1} x_{2} \geq-10}\end{array}\right.
當使用梯度求解上述問題時,效率更高并且結(jié)果更準確解藻。 題目中目標函數(shù)的梯度為(對x_1,x_2分別求偏導數(shù)):
\left[ \begin{array}{l}{e^{x_{1}}\left(4 x_{1}^{2}+2 x_{2}^{2}+4 x_{1} x_{2}+8 x_{1}+6 x_{2}+1\right)} \\ {e^{x_{1}}\left(4 x_{1}+4 x_{2}+2\right)}\end{array}\right]

  1. 編寫fun10定義目標函數(shù)和梯度函數(shù):
function [f,df]=fun10(x);
f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
df=[exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+8*x(1)+6*x(2)+1);exp(x(1))*(4*x(2)+4*x(1)+2)];
  1. 編寫fun11定義約束條件老充,以及約束條件的梯度函數(shù)
function [c,ceq,dc,dceq]=fun11(x);
c=[x(1)*x(2)-x(1)-x(2)+1.5;-x(1)*x(2)-10];
dc=[x(2)-1,-x(2);x(1)-1,-x(1)];
ceq=[];dceq=[];
  1. 調(diào)用fincon()
options=optimset('GradObj','on','GradConstr','on');%采用梯度
[x,y]=fmincon(@fun10,rand(2,1),[],[],[],[],[],[],@fun11,options)
>>
x =

   -9.5473
    1.0474


y =

    0.0236

3.5 optimtool工具箱的使用

在命令行中輸入optimtool可以打開圖形界面



對于上一個問題,只要選擇方法(solver)后螟左,在相應位置輸入@fun10啡浊,@fun11,點擊start就可以

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胶背,一起剝皮案震驚了整個濱河市巷嚣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钳吟,老刑警劉巖廷粒,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡坝茎,警方通過查閱死者的電腦和手機涤姊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗤放,“玉大人思喊,你說我怎么就攤上這事〈巫茫” “怎么了恨课?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岳服。 經(jīng)常有香客問我剂公,道長,這世上最難降的妖魔是什么吊宋? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任纲辽,我火速辦了婚禮,結(jié)果婚禮上贫母,老公的妹妹穿的比我還像新娘文兑。我一直安慰自己,他們只是感情好腺劣,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布绿贞。 她就那樣靜靜地躺著,像睡著了一般橘原。 火紅的嫁衣襯著肌膚如雪籍铁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天趾断,我揣著相機與錄音拒名,去河邊找鬼。 笑死芋酌,一個胖子當著我的面吹牛增显,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脐帝,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼同云,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了堵腹?” 一聲冷哼從身側(cè)響起炸站,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疚顷,沒想到半個月后旱易,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禁偎,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年阀坏,在試婚紗的時候發(fā)現(xiàn)自己被綠了如暖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡全释,死狀恐怖装处,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浸船,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布寝蹈,位于F島的核電站李命,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏箫老。R本人自食惡果不足惜封字,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耍鬓。 院中可真熱鬧阔籽,春花似錦、人聲如沸牲蜀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涣达。三九已至在辆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間度苔,已是汗流浹背匆篓。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寇窑,地道東北人鸦概。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像甩骏,于是被迫代替她去往敵國和親窗市。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容