(三)非線性規劃_數學

來源:互聯網
上載者:User
第三章——非線性規劃 非線性規劃 背景

非線性規劃目前還沒有適於各種問題的一般演算法,各個方法都有自己特定的適用範圍 注意事項

確定供選方案:首先要收集同問題有關的資料和資料,在全面熟悉問題的基礎上,確認什麼是問題的可供選擇的方案

提出追求目標,並且,運用各種科學和技術原理,把它表示成數學關係式。

給出價值標準:在提出要追求的目標之後,要確立所考慮目標的“好”或“壞”的價值標準,並用某種數量形式來描述它

具體量化

尋求限制條件,這些條件通常用變數之間的一些不等式或等式來表示。

與線性規劃的區別:非線性規劃的最優解(如果最優解存在)則可能在其可行域的任意一點達到。而線性最佳化只能在邊界達到。 具體案例

%編寫M 檔案fun1.m 定義目標函數function f=fun1(x);f=sum(x.^2)+8;%編寫M檔案fun2.m定義非線性約束條件function [g,h]=fun2(x);g=[-x(1)^2+x(2)-x(3)^2x(1)+x(2)^2+x(3)^3-20]; %非線性不等式約束h=[-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %非線性等式約束%編寫主程式檔案example2.m 如下:options=optimset('largescale','off');[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2', options)

對於非線性規劃模型 (NP——Non-deterministic polynomial^非定常多項式^)可以採用迭代方法求它的最優解。

迭代方法的基本思想是:從一個選定的初始點 x0∈Rn 出發,按照某一特定的迭代規則產生一個點列 xk ,使得當 xk 是有窮點列時,其最後一個點是(NP)的最優解;當 xk 是無窮點列時,它有極限點,並且其極限點是(NP)的最優解。

使用迭代方法求解(NP)的關鍵在於,如何構造每一輪的搜尋方向和確定適當的步長。

凸規劃的可行域為凸集,其局部最優解即為全域最優解,而且其最優解的集合形成一個凸集。當凸規劃的目標函數 f(x) 為嚴格凸函數時,其最優解必定唯一(假定最優解存在)。由此可見,凸規劃是一類比較簡單而又具有重要理論意義的非線性規劃

此處討論十分淺顯,待續^見46頁^ 無約束問題 一維搜尋

當用迭代法求函數的極小點時,常常用到一維搜尋,即沿某一已知方向求目標函數的極小點。常見如下:

試探法(“成功—失敗”,斐波那契法,0.618 法(斐波那契的近似演算法,較易實現效果好))

斐波那契法使用對稱搜尋的方法,逐步縮短所考察的區間,它能以盡量少的函數求值次數,達到預定的某一縮短率。

插值法(拋物線插值法,三次插值法等)

微積分中的求根法(切線法,二分法等) 二次插值法

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

未完待續 無約束極值問題的解法

解析法

梯度法(最速下降法)——每輪的搜尋方向都是目標函數在當前點下降最快的方向

案例:用最速下降法求解 minf(x)=x21+25x22

其中 x=(x1,x2)T ,要求初始點為 x0=(2,2)T

解: ∇f(x)=(2x1,50x2)T

%編寫M檔案detaf.m,定義函數f(x)及其梯度列向量如下function [f,df]=detaf(x);f=x(1)^2+25*x(2)^2;df=[2*x(1)50*x(2)];%編寫主程式檔案zuisu.m如下:clcx=[2;2];[f0,g]=detaf(x);while norm(g)>0.000001p=-g/norm(g);t=1.0;f=detaf(x+t*p);while f>f0t=t/2;f=detaf(x+t*p);endx=x+t*p;[f0,g]=detaf(x);endx,f0

對 ∇ 還需熟練其使用,待續~

Newton 法:。從一初始點開始,每一輪從當前迭代點出發,沿Newton 方向並取步長為1 的求解方法,稱之為Newton 法。

案例:用Newton法求解 minf(x)=x41+25x42+x21x22

選取 x0=(2,2)T

%編寫M檔案nwfun.m 如下:function [f,df,d2f]=nwfun(x);f=x(1)^4+25*x(2)^4+x(1)^2*x(2)^2;df=[4*x(1)^3+2*x(1)*x(2)^2;100*x(2)^3+2*x(1)^2*x(2)];d2f=[2*x(1)^2+2*x(2)^2,4*x(1)*x(2)4*x(1)*x(2),300*x(2)^2+2*x(1)^2];%編寫主程式文example5.m 如下:clcx=[2;2];[f0,g1,g2]=nwfun(x);while norm(g1)>0.00001p=-inv(g2)*g1;x=x+p;[f0,g1,g2]=nwfun(x);endx, f0

如果目標函數是非二次函數,一般地說,用Newton 法通過有限輪迭代並不能保證可求得其最優解。為了提高計算精度,我們在迭代時可以採用變步長計算上述問題。具體^見51頁^

優點是收斂速度快;缺點是有時不好用而需採取改進措施;此外,當維數較高時,計算的工作量很大

變尺度法——Variable Metric Algorithm

它不僅是求解無約束極值問題非常有效演算法,而且也已被推廣用來求解約束極值問題。由於它既避免了計算二階導數矩陣及其求逆過程,又比梯度法的收斂速度快,特別是對高維問題具有顯著的優越性,因而使變尺度法獲得了很高的聲譽。具體^見51頁^

直接法

在無約束非線性規劃方法中,遇到問題的目標函數不可導或導函數的解析式難以表示時,人們一般需要使用直接搜尋方法。同時,由於這些方法一般都比較直觀和易於理解,因而在實際應用中常為人們所採用。

Powell方法: 基本搜尋 加速搜尋 調整搜尋

具體步驟^見54頁^ Matlab 求無約束極值問題

符號解:

%計算的Matlab程式如下clc, clearsyms x yf=x^3-y^3+3*x^2+3*y^2-9*x;df=jacobian(f);  %求一階偏導數d2f=jacobian(df); %求Hessian陣[xx,yy]=solve(df)  %求駐點xx=double(xx);yy=double(yy);for i=1:length(xx)a=subs(d2f,{x,y},{xx(i),yy(i)});b=eig(a);  %求矩陣的特徵值f=subs(f,{x,y},{xx(i),yy(i)});f=double(f);if all(b>0)fprintf('(%f,%f)是極小值點,對應的極小為%f\n',xx(i),yy(i),f);elseif all(b<0)fprintf('(%f,%f)是極大值點,對應的極大值為%f\n',xx(i),yy(i),f);elseif any(b>0) & any(b<0)fprintf('(%f,%f)不是極值點\n',xx(i),yy(i));elsefprintf('無法判斷(%f,%f)是否是極值點\n',xx(i),yy(i));   endend

數值解:在 Matlab 工具箱中,用於求解無約束極值問題的函數有fminunc 和fminsearch,用法介紹如下。

[X,FVAL]=FMINUNC(FUN,X0,OPTIONS,P1,P2,)%X0是向量x的初始值,OPTIONS是最佳化參數,可以使用預設參數。P1,P2 是可以傳遞給FUN的一些參數。[X,FVAL,EXITFLAG,OUTPUT]=FMINSEARCH(FUN,X0,OPTIONS,P1,P2,)%%fminunc,fminsearch區別%前者多用於連續函數,後者可用於不連續函數(使用的無倒數方法)

符號解(準確的叫法是解析解)是準確解。但事實上很多常微分方程是沒有解析解的,因此只能能過數值的方法去解決。

函數零點與方程組的解

%使用符號求解的程式如下syms xx0=solve(x^3-x^2+2*x-3) %求函數零點的符號解x0=vpa(x0,5)  %化成小數格式的資料%求得全部的零點%求數值解的Matlab程式如下y=@(x)x^3-x^2+2*x-3;x=fsolve(y,rand)%只能求給定初始值附近的一個零點

約束極值問題的解法

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

簡化方法: 將約束問題化為無約束問題 將非線性規劃問題化為線性規劃問題 將複雜問題變換為較簡單問題的其它方法

庫恩—塔克條件——非線性規劃領域中最重要的理論成果之一,是確定某點為最優點的必要條件,但一般說它並不是充分條件(對於凸規劃,它既是最優點存在的必要條件,同時也是充分條件)。

二次規劃

定義:若某非線性規劃的目標函數為自變數 x 的二次函數,約束條件又全是線性,就稱
這種規劃為二次規劃。

求解

[X,FVAL]=QUADPROG(H,f,A,b,Aeq,beq,LB,UB,X0,OPTIONS)

罰函數法

利用罰函數法,可將非線性規劃問題的求解,轉化為求解一系列無約束極值問題,因而也稱這種方法為序列無約束最小化技術,簡記為 SUMT (Sequential Unconstrained Minization Technique)。

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

分為內罰函數法和外罰函數法^見56頁^

案例:

function g=test(x);M=50000;f=x(1)^2+x(2)^2+8;g=f-M*min(min(x),0)-M*min(x(1)^2-x(2),0)+M*(-x(1)-x(2)^2+2)^2;%實現[x,y]=fminunc('test',rand(2,1))
Matlab 求約束極值問題

見58頁 Matlab 最佳化工具箱的使用者圖形介面

optimtool 可應用到所有最佳化問題的求解,計算結果可以輸出到Matlab 工作空間中 飛行管理問題

本問題中的最佳化目標函數可以有不同的形式:如使所有飛機的最大調整量最小;所有飛機的調整量絕對值之和最小等。這裡以所有飛機的調整量絕對值之和最小為目標函數,可以得到如下的數學規劃模型:
min∑i=16|△θi|s.t.|β0ij+12(△θi+△θj)|>α0ij,i,j=1,2,…,6,i≠j|△θi|≤30∘

模型一代碼:

clc,clearx0=[150 85 150 145 130 0];y0=[140 85 155 50 150 0];q=[243 236 220.5 159 230 52];xy0=[x0; y0];d0=dist(xy0); %求矩陣各個列向量之間的距離d0(find(d0==0))=inf;a0=asind(8./d0) %以度為單位的反函數xy1=x0+i*y0xy2=exp(i*q*pi/180)for m=1:6for n=1:6if n~=mb0(m,n)=angle((xy2(n)-xy2(m))/(xy1(m)-xy1(n)));endendendb0=b0*180/pi;dlmwrite('txt1.txt',a0,'delimiter','\t','newline','PC');fid=fopen('txt1.txt','a');fwrite(fid,'~','char'); %往純文字檔案中寫LINGO 資料的分割符dlmwrite('txt1.txt',b0,'delimiter','\t','newline','PC','-append','roffset', 1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.