




已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章 優(yōu)化問題第5章 優(yōu)化問題5.1 線性規(guī)劃問題線性規(guī)劃問題是目標函數(shù)和約束條件均為線性函數(shù)的問題,MATLAB6.0解決的線性規(guī)劃問題的標準形式為:min sub.to: 其中f、x、b、beq、lb、ub為向量,A、Aeq為矩陣。其它形式的線性規(guī)劃問題都可經(jīng)過適當變換化為此標準形式。在MATLAB6.0版中,線性規(guī)劃問題(Linear Programming)已用函數(shù)linprog取代了MATLAB5.x版中的lp函數(shù)。當然,由于版本的向下兼容性,一般說來,低版本中的函數(shù)在6.0版中仍可使用。函數(shù) linprog格式 x = linprog(f,A,b) %求min f *x sub.to 線性規(guī)劃的最優(yōu)解。x = linprog(f,A,b,Aeq,beq) %等式約束,若沒有不等式約束,則A= ,b= 。x = linprog(f,A,b,Aeq,beq,lb,ub) %指定x的范圍,若沒有等式約束 ,則Aeq= ,beq= x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %設置初值x0x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options為指定的優(yōu)化參數(shù)x,fval = linprog() % 返回目標函數(shù)最優(yōu)值,即fval= f *x。x,lambda,exitflag = linprog() % lambda為解x的Lagrange乘子。x, lambda,fval,exitflag = linprog() % exitflag為終止迭代的錯誤條件。x,fval, lambda,exitflag,output = linprog() % output為關于優(yōu)化的一些信息說明 若exitflag0表示函數(shù)收斂于解x,exitflag=0表示超過函數(shù)估值或迭代的最大數(shù)字,exitflagf = -5; -4; -6;A = 1 -1 1;3 2 4;3 2 0;b = 20; 42; 30;lb = zeros(3,1);x,fval,exitflag,output,lambda = linprog(f,A,b,lb)結果為:x = %最優(yōu)解 0.0000 15.0000 3.0000fval = %最優(yōu)值 -78.0000exitflag = %收斂 1output = iterations: 6 %迭代次數(shù) cgiterations: 0 algorithm: lipsol %所使用規(guī)則lambda = ineqlin: 3x1 double eqlin: 0x1 double upper: 3x1 double lower: 3x1 double lambda.ineqlinans = 0.0000 1.5000 0.5000 lambda.lowerans = 1.0000 0.0000 0.0000表明:不等約束條件2和3以及第1個下界是有效的5.2 foptions函數(shù)對于優(yōu)化控制,MATLAB提供了18個參數(shù),這些參數(shù)的具體意義為:options(1)-參數(shù)顯示控制(默認值為0)。等于1時顯示一些結果。 options(2)-優(yōu)化點x的精度控制(默認值為1e-4)。 options(3)-優(yōu)化函數(shù)F的精度控制(默認值為1e-4)。 options(4)-違反約束的結束標準(默認值為1e-6)。 options(5)-算法選擇,不常用。 options(6)-優(yōu)化程序方法選擇,為0則為BFCG算法,為1則采用DFP算法。 options(7)-線性插值算法選擇,為0則為混合插值算法,為1則采用立方插算法。 options(8)-函數(shù)值顯示 (目標達到問題中的Lambda ) options(9)-若需要檢測用戶提供的梯度,則設為1。 options(10)-函數(shù)和約束估值的數(shù)目。 options(11)-函數(shù)梯度估值的個數(shù)。 options(12)-約束估值的數(shù)目。 options(13)-等約束條件的個數(shù)。 options(14)-函數(shù)估值的最大次數(shù)(默認值是100變量個數(shù)) options(15)-用于目標 達到問題中的特殊目標。 options(16)-優(yōu)化過程中變量的最小有限差分梯度值。 options(17)- 優(yōu)化過程中變量的最大有限差分梯度值。 options(18)-步長設置 (默認為1或更小)。Foptions已經(jīng)被optimset和optimget代替,詳情請查函數(shù)optimset和optimget。5.3 非線性規(guī)劃問題5.3.1 有約束的一元函數(shù)的最小值單變量函數(shù)求最小值的標準形式為 sub.to 在MATLAB5.x中使用fmin函數(shù)求其最小值。函數(shù) fminbnd格式 x = fminbnd(fun,x1,x2) %返回自變量x在區(qū)間上函數(shù)fun取最小值時x值,fun為目標函數(shù)的表達式字符串或MATLAB自定義函數(shù)的函數(shù)柄。x = fminbnd(fun,x1,x2,options) % options為指定優(yōu)化參數(shù)選項x,fval = fminbnd() % fval為目標函數(shù)的最小值x,fval,exitflag = fminbnd() %xitflag為終止迭代的條件x,fval,exitflag,output = fminbnd() % output為優(yōu)化信息說明 若參數(shù)exitflag0,表示函數(shù)收斂于x,若exitflag=0,表示超過函數(shù)估計值或迭代的最大數(shù)字,exitflag x,fval,exitflag,output=fminbnd(x3+cos(x)+x*log(x)/exp(x),0,1)x = 0.5223fval = 0.3974exitflag = 1output = iterations: 9 funcCount: 9 algorithm: golden section search, parabolic interpolation例5-3 在0,5上求下面函數(shù)的最小值解:先自定義函數(shù):在MATLAB編輯器中建立M文件為:function f = myfun(x)f = (x-3).2 - 1;保存為myfun.m,然后在命令窗口鍵入命令: x=fminbnd(myfun,0,5)則結果顯示為:x = 35.3.2 無約束多元函數(shù)最小值多元函數(shù)最小值的標準形式為其中:x為向量,如在MATLAB5.x中使用fmins求其最小值。命令 利用函數(shù)fminsearch求無約束多元函數(shù)最小值函數(shù) fminsearch格式 x = fminsearch(fun,x0) %x0為初始點,fun為目標函數(shù)的表達式字符串或MATLAB自定義函數(shù)的函數(shù)柄。x = fminsearch(fun,x0,options) % options查optimsetx,fval = fminsearch() %最優(yōu)點的函數(shù)值x,fval,exitflag = fminsearch() % exitflag與單變量情形一致x,fval,exitflag,output = fminsearch() %output與單變量情形一致注意:fminsearch采用了Nelder-Mead型簡單搜尋法。例5-4 求的最小值點解:X=fminsearch(2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2, 0,0)結果為X = 1.0016 0.8335或在MATLAB編輯器中建立函數(shù)文件function f=myfun(x)f=2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2;保存為myfun.m,在命令窗口鍵入 X=fminsearch (myfun, 0,0) 或 X=fminsearch(myfun, 0,0)結果為:X = 1.0016 0.8335命令 利用函數(shù)fminunc求多變量無約束函數(shù)最小值函數(shù) fminunc格式 x = fminunc(fun,x0) %返回給定初始點x0的最小函數(shù)值點x = fminunc(fun,x0,options) % options為指定優(yōu)化參數(shù)x,fval = fminunc() %fval最優(yōu)點x處的函數(shù)值x,fval,exitflag = fminunc() % exitflag為終止迭代的條件,與上同。x,fval,exitflag,output = fminunc() %output為輸出優(yōu)化信息x,fval,exitflag,output,grad = fminunc() % grad為函數(shù)在解x處的梯度值x,fval,exitflag,output,grad,hessian = fminunc() %目標函數(shù)在解x處的海賽(Hessian)值注意:當函數(shù)的階數(shù)大于2時,使用fminunc比fminsearch更有效,但當所選函數(shù)高度不連續(xù)時,使用fminsearch效果較好。例5-5 求的最小值。 fun=3*x(1)2+2*x(1)*x(2)+x(2)2; x0=1 1; x,fval,exitflag,output,grad,hessian=fminunc(fun,x0)結果為:x = 1.0e-008 * -0.7591 0.2665fval = 1.3953e-016exitflag = 1output = iterations: 3 funcCount: 16 stepsize: 1.2353 firstorderopt: 1.6772e-007 algorithm: medium-scale: Quasi-Newton line searchgrad = 1.0e-006 * -0.1677 0.0114hessian = 6.0000 2.0000 2.0000 2.0000或用下面方法: fun=inline(3*x(1)2+2*x(1)*x(2)+x(2)2)fun = Inline function: fun(x) = 3*x(1)2+2*x(1)*x(2)+x(2)2 x0=1 1; x=fminunc(fun,x0)x = 1.0e-008 * -0.7591 0.26655.3.3 有約束的多元函數(shù)最小值非線性有約束的多元函數(shù)的標準形式為:sub.to 其中:x、b、beq、lb、ub是向量,A、Aeq為矩陣,C(x)、Ceq(x)是返回向量的函數(shù),f(x)為目標函數(shù),f(x)、C(x)、Ceq(x)可以是非線性函數(shù)。在MATLAB5.x中,它的求解由函數(shù)constr實現(xiàn)。函數(shù) fmincon格式 x = fmincon(fun,x0,A,b)x = fmincon(fun,x0,A,b,Aeq,beq)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x,fval = fmincon()x,fval,exitflag = fmincon()x,fval,exitflag,output = fmincon()x,fval,exitflag,output,lambda = fmincon()x,fval,exitflag,output,lambda,grad = fmincon()x,fval,exitflag,output,lambda,grad,hessian = fmincon()參數(shù)說明:fun為目標函數(shù),它可用前面的方法定義;x0為初始值;A、b滿足線性不等式約束,若沒有不等式約束,則取A= ,b= ;Aeq、beq滿足等式約束,若沒有,則取Aeq= ,beq= ;lb、ub滿足,若沒有界,可設lb= ,ub= ;nonlcon的作用是通過接受的向量x來計算非線性不等約束和等式約束分別在x處的估計C和Ceq,通過指定函數(shù)柄來使用,如:x = fmincon(myfun,x0,A,b,Aeq,beq,lb,ub,mycon),先建立非線性約束函數(shù),并保存為mycon.m:function C,Ceq = mycon(x)C = % 計算x處的非線性不等約束的函數(shù)值。Ceq = % 計算x處的非線性等式約束的函數(shù)值。lambda是Lagrange乘子,它體現(xiàn)哪一個約束有效。output輸出優(yōu)化信息;grad表示目標函數(shù)在x處的梯度;hessian表示目標函數(shù)在x處的Hessiab值。例5-6 求下面問題在初始點(0,1)處的最優(yōu)解min sub.to 解:約束條件的標準形式為sub.to 先在MATLAB編輯器中建立非線性約束函數(shù)文件:function c, ceq=mycon (x)c=(x(1)-1)2-x(2);ceq= ; %無等式約束然后,在命令窗口鍵入如下命令或建立M文件:fun=x(1)2+x(2)2-x(1)*x(2)-2*x(1)-5*x(2); %目標函數(shù)x0=0 1;A=-2 3; %線性不等式約束b=6;Aeq= ; %無線性等式約束beq= ;lb= ; %x沒有下、上界ub= ;x,fval,exitflag,output,lambda,grad,hessian=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,mycon)則結果為x = 3 4fval = -13exitflag = %解收斂 1output = iterations: 2 funcCount: 9 stepsize: 1 algorithm: medium-scale: SQP, Quasi-Newton, line-search firstorderopt: cgiterations: lambda = lower: 2x1 double %x下界有效情況,通過lambda.lower可查看。 upper: 2x1 double %x上界有效情況,為0表示約束無效。 eqlin: 0x1 double %線性等式約束有效情況,不為0表示約束有效。 eqnonlin: 0x1 double %非線性等式約束有效情況。 ineqlin: 2.5081e-008 %線性不等式約束有效情況。 ineqnonlin: 6.1938e-008 %非線性不等式約束有效情況。grad = %目標函數(shù)在最小值點的梯度 1.0e-006 * -0.1776 0hessian = %目標函數(shù)在最小值點的Hessian值 1.0000 -0.0000 -0.0000 1.0000例5-7 求下面問題在初始點x=(10, 10, 10)處的最優(yōu)解。Min Sub.to 解:約束條件的標準形式為sub.to fun= -x(1)*x(2)*x(3); x0=10,10,10; A=-1 -2 -2;1 2 2; b=0;72; x,fval=fmincon(fun,x0,A,b)結果為:x = 24.0000 12.0000 12.0000fval = -34565.3.4 二次規(guī)劃問題二次規(guī)劃問題(quadratic programming)的標準形式為:sub.to 其中,H、A、Aeq為矩陣,f、b、beq、lb、ub、x為向量其它形式的二次規(guī)劃問題都可轉化為標準形式。MATLAB5.x版中的qp函數(shù)已被6.0版中的函數(shù)quadprog取代。函數(shù) quadprog格式 x = quadprog(H,f,A,b) %其中H,f,A,b為標準形中的參數(shù),x為目標函數(shù)的最小值。x = quadprog(H,f,A,b,Aeq,beq) %Aeq,beq滿足等約束條件。x = quadprog(H,f,A,b,Aeq,beq,lb,ub) % lb,ub分別為解x的下界與上界。x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) %x0為設置的初值x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) % options為指定的優(yōu)化參數(shù)x,fval = quadprog() %fval為目標函數(shù)最優(yōu)值x,fval,exitflag = quadprog() % exitflag與線性規(guī)劃中參數(shù)意義相同x,fval,exitflag,output = quadprog() % output與線性規(guī)劃中參數(shù)意義相同x,fval,exitflag,output,lambda = quadprog() % lambda與線性規(guī)劃中參數(shù)意義相同例5-8 求解下面二次規(guī)劃問題sub.to 解:則,在MATLAB中實現(xiàn)如下:H = 1 -1; -1 2 ;f = -2; -6;A = 1 1; -1 2; 2 1;b = 2; 2; 3;lb = zeros(2,1);x,fval,exitflag,output,lambda = quadprog(H,f,A,b, , ,lb)結果為:x = %最優(yōu)解 0.6667 1.3333fval = %最優(yōu)值 -8.2222exitflag = %收斂 1output = iterations: 3 algorithm: medium-scale: active-set firstorderopt: cgiterations: lambda = lower: 2x1 double upper: 2x1 double eqlin: 0x1 double ineqlin: 3x1 double lambda.ineqlinans = 3.1111 0.4444 0 lambda.lowerans = 0 0說明 第1、2個約束條件有效,其余無效。例5-9 求二次規(guī)劃的最優(yōu)解max f (x1, x2)=x1x2+3sub.to x1+x2-2=0解:化成標準形式: sub.to x1+x2=2在Matlab中實現(xiàn)如下:H=0,-1;-1,0;f=0;0;Aeq=1 1;b=2;x,fval,exitflag,output,lambda = quadprog(H,f, , ,Aeq,b)結果為:x = 1.0000 1.0000fval = -1.0000exitflag = 1output = firstorderopt: 0 iterations: 1 cgiterations: 1 algorithm: 1x58 charlambda = eqlin: 1.0000 ineqlin: lower: upper: 5.4 “半無限”有約束的多元函數(shù)最優(yōu)解“半無限”有約束多元函數(shù)最優(yōu)解問題的標準形式為sub.to 其中:x、b、beq、lb、ub都是向量;A、Aeq是矩陣;C(x)、Ceq(x)、是返回向量的函數(shù),f(x)為目標函數(shù);f(x)、C(x)、Ceq(x)是非線性函數(shù);為半無限約束,通常是長度為2的向量。在MTALAB5.x中,使用函數(shù)seminf解決這類問題。函數(shù) fseminf格式 x = fseminf(fun,x0,ntheta,seminfcon)x = fseminf(fun,x0,ntheta,seminfcon,A,b)x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)x,fval = fseminf()x,fval,exitflag = fseminf()x,fval,exitflag,output = fseminf()x,fval,exitflag,output,lambda = fseminf()參數(shù)說明:x0為初始估計值;fun為目標函數(shù),其定義方式與前面相同;A、b由線性不等式約束確定,沒有,則A= ,b= ;Aeq、beq由線性等式約束確定,沒有,則Aeq= ,beq= ;Lb、ub由變量x的范圍確定;options為優(yōu)化參數(shù);ntheta為半無限約束的個數(shù);seminfcon用來確定非線性約束向量C和Ceq以及半無限約束的向量K1,K2,Kn,通過指定函數(shù)柄來使用,如:x = fseminf(myfun,x0,ntheta,myinfcon)先建立非線性約束和半無限約束函數(shù)文件,并保存為myinfcon.m:function C,Ceq,K1,K2,Kntheta,S = myinfcon(x,S)%S為向量w的采樣值% 初始化樣本間距if isnan(S(1,1),S = % S 有ntheta行2列endw1 = %計算樣本集w2 = %計算樣本集wntheta = % 計算樣本集K1 = % 在x和w處的第1個半無限約束值K2 = %在x和w處的第2個半無限約束值Kntheta = %在x和w處的第ntheta個半無限約束值C = % 在x處計算非線性不等式約束值Ceq = % 在x處計算非線性等式約束值如果沒有約束,則相應的值取為“ ”,如Ceq=fval為在x處的目標函數(shù)最小值;exitflag為終止迭代的條件;output為輸出的優(yōu)化信息;lambda為解x的Lagrange乘子。例5-10 求下面一維情形的最優(yōu)化問題sub.to 解:將約束方程化為標準形式:先建立非線性約束和半無限約束函數(shù)文件,并保存為mycon.m:function C,Ceq,K1,K2,S = mycon(X,S)% 初始化樣本間距:if isnan(S(1,1), S = 0.2 0; 0.2 0;end% 產生樣本集:w1 = 1:S(1,1):100;w2 = 1:S(2,1):100;% 計算半無限約束:K1 = sin(w1*X(1).*cos(w1*X(2) - 1/1000*(w1-50).2 -sin(w1*X(3)-X(3)-1;K2 = sin(w2*X(2).*cos(w2*X(1) - 1/1000*(w2-50).2 -sin(w2*X(3)-X(3)-1;% 無非線性約束:C = ; Ceq= ;% 繪制半無限約束圖形plot(w1,K1,-,w2,K2,:),title(Semi-infinite constraints)然后在MATLAB命令窗口或編輯器中建立M文件:fun = sum(x-0.5).2);x0 = 0.5; 0.2; 0.3; % Starting guessx,fval = fseminf(fun,x0,2,mycon)結果為:x = 0.6673 0.3013 0.4023fval = 0.0770C,Ceq,K1,K2 = mycon (x,NaN); % 利用初始樣本間距max(K1)ans = -0.0017max(K2)ans = -0.0845圖5-1例5-11 求下面二維情形的最優(yōu)化問題sub.to 初始點為x0=0.25, 0.25, 0.25。解:先建立非線性和半無限約束函數(shù)文件,并保存為mycon.m:function C,Ceq,K1,S = mycon(X,S)% 初始化樣本間距:if isnan(s(1,1), s = 2 2;end% 設置樣本集w1x = 1:s(1,1):100;w1y = 1:s(1,2):100;wx, wy = meshgrid(w1x,w1y);% 計算半無限約束函數(shù)值 K1 = sin(wx*X(1).*cos(wx*X(2)-1/1000*(wx-50).2 -sin(wx*X(3)-X(3)+sin(wy*X(2).*cos(wx*X(1)-1/1000*(wy-50).2-sin(wy*X(3)-X(3)-1.5;% 無非線性約束C = ; Ceq= ;%作約束曲面圖形m = surf(wx,wy,K1,edgecolor,none,facecolor,interp);camlight headlighttitle(Semi-infinite constraint)drawnow然后在MATLAB命令窗口下鍵入命令:fun = sum(x-0.2).2);x0 = 0.25, 0.25, 0.25; x,fval = fseminf(fun,x0,1,mycon)結果為(如圖)x = 0.2926 0.1874 0.2202圖5-2fval = 0.0091c,ceq,K1 = mycon(x,0.5,0.5); % 樣本間距為0.5max(max(K1)ans = -0.00275.5 極小化極大(Minmax)問題極小化極大問題的標準形式為sub.to 其中:x、b、beq、lb、ub是向量,A、Aeq為矩陣,C(x)、Ceq(x)和F(x)是返回向量的函數(shù),F(xiàn)(x)、C(x)、Ceq(x)可以是非線性函數(shù)。在MATLAB5.x中,它的求解由函數(shù)minmax實現(xiàn)。函數(shù) fminimax格式 x = fminimax(fun,x0)x = fminimax(fun,x0,A,b)x = fminimax(fun,x0,A,b,Aeq,beq)x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x,fval,maxfval = fminimax()x,fval,maxfval,exitflag = fminimax()x,fval,maxfval,exitflag,output = fminimax()x,fval,maxfval,exitflag,output,lambda = fminimax()參數(shù)說明:fun為目標函數(shù);x0為初始值;A、b滿足線性不等約束,若沒有不等約束,則取A= ,b= ;Aeq、beq滿足等式約束,若沒有,則取Aeq= ,beq= ;lb、ub滿足,若沒有界,可設lb= ,ub= ;nonlcon的作用是通過接受的向量x來計算非線性不等約束和等式約束分別在x處的值C和Ceq,通過指定函數(shù)柄來使用,如:x = fminimax(myfun,x0,A,b,Aeq,beq,lb,ub,mycon),先建立非線性約束函數(shù),并保存為mycon.m:function C,Ceq = mycon(x)C = % 計算x處的非線性不等約束的函數(shù)值。Ceq = % 計算x處的非線性等式約束的函數(shù)值。options為指定的優(yōu)化參數(shù);fval為最優(yōu)點處的目標函數(shù)值;maxfval為目標函數(shù)在x處的最大值;exitflag為終止迭代的條件;lambda是Lagrange乘子,它體現(xiàn)哪一個約束有效。output輸出優(yōu)化信息。例5-12 求下列函數(shù)最大值的最小化問題其中:解:先建立目標函數(shù)文件,并保存為myfun.m:function f = myfun(x)f(1)= 2*x(1)2+x(2)2-48*x(1)-40*x(2)+304; f(2)= -x(1)2 - 3*x(2)2;f(3)= x(1) + 3*x(2) -18;f(4)= -x(1)- x(2);f(5)= x(1) + x(2) - 8;然后,在命令窗口鍵入命令:x0 = 0.1; 0.1; % 初始值x,fval = fminimax(myfun,x0)結果為:x = 4.0000 4.0000fval = 0.0000 -64.0000 -2.0000 -8.0000 -0.0000例5-13 求上述問題的絕對值的最大值最小化問題。目標函數(shù)為:解:先建立目標函數(shù)文件(與上例相同)然后,在命令窗口或編輯器中建立M文件:x0 = 0.1; 0.1; % 初始點options = optimset(MinAbsMax,5); % 指定絕對值的最小化x,fval = fminimax(myfun,x0, , , , , , , ,options)則結果為x = 4.9256 2.0796fval = 37.2356 -37.2356 -6.8357 -7.0052 -0.99485.6 多目標規(guī)劃問題多目標規(guī)劃是指在一組約束下,對多個不同目標函數(shù)進行優(yōu)化。它的一般形式為sub.to 其中:。在同一約束下,當目標函數(shù)處于沖突狀態(tài)時,不存在最優(yōu)解x使所有目標函數(shù)同時達到最優(yōu)。此時,我們使用有效解,即如果不存在,使得,i=1,2,m, 則稱x*為有效解。在MATLAB中,多目標問題的標準形式為sub.to 其中:x、b、beq、lb、ub是向量;A、Aeq為矩陣;C(x)、Ceq(x)和F(x)是返回向量的函數(shù);F(x)、C(x)、Ceq(x)可以是非線性函數(shù);weight為權值系數(shù)向量,用于控制對應的目標函數(shù)與用戶定義的目標函數(shù)值的接近程度;goal為用戶設計的與目標函數(shù)相應的目標函數(shù)值向量;為一個松弛因子標量;F(x)為多目標規(guī)劃中的目標函數(shù)向量。在MATLAB5.x中,它的最優(yōu)解由attgoal函數(shù)實現(xiàn)。函數(shù) fgoalattain格式 x = fgoalattain(fun,x0,goal,weight)x = fgoalattain(fun,x0,goal,weight,A,b)x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)x,fval = fgoalattain()x,fval,attainfactor = fgoalattain()x,fval,attainfactor,exitflag = fgoalattain()x,fval,attainfactor,exitflag,output = fgoalattain()x,fval,attainfactor,exitflag,output,lambda = fgoalattain()參數(shù)說明:x0為初始解向量;fun為多目標函數(shù)的文件名字符串,其定義方式與前面fun的定義方式相同;goal為用戶設計的目標函數(shù)值向量;weight為權值系數(shù)向量,用于控制目標函數(shù)與用戶自定義目標值的接近程度;A、b滿足線性不等式約束,沒有時取A= ,b= ;Aeq、beq滿足線性等式約束,沒有時取Aeq= ,beq= ;lb、ub為變量的下界和上界:;nonlcon的作用是通過接受的向量x來計算非線性不等約束和等式約束分別在x處的值C和Ceq,通過指定函數(shù)柄來使用。如:x = fgoalattain(myfun,x0,goal,weight,A,b,Aeq,beq,lb,ub,mycon),先建立非線性約束函數(shù),并保存為mycon.m:function C,Ceq = mycon(x)C = % 計算x處的非線性不等式約束的函數(shù)值。Ceq = % 計算x處的非線性等式約束的函數(shù)值。options為指定的優(yōu)化參數(shù);fval為多目標函數(shù)在x處的值;attainfactor為解x處的目標規(guī)劃因子;exitflag為終止迭代的條件;output為輸出的優(yōu)化信息;lambda為解x處的Lagrange乘子例5-14 控制系統(tǒng)輸出反饋器設計。設如下線性系統(tǒng)其中: 要求設計輸出反饋控制器K,使閉環(huán)系統(tǒng)在復平面實軸上點-5,-3,-1的左側有極點,并要求 解:上述問題就是要求解矩陣K,使矩陣(A+BKC)的極點為-5,-3,-1,這是一個多目標規(guī)劃問題。先建立目標函數(shù)文件,保存為eigfun.m:function F = eigfun(K,A,B,C)F = sort(eig(A+B*K*C); % 估計目標函數(shù)值然后,輸入?yún)?shù)并調用優(yōu)化程序:A = -0.5 0 0; 0 -2 10; 0 1 -2;B = 1 0; -2 2; 0 1;C = 1 0 0; 0 0 1; K0 = -1 -1; -1 -1; % 初始化控制器矩陣goal = -5 -3 -1; % 為閉合環(huán)路的特征值(極點)設置目標值向量weight = abs(goal) % 設置權值向量lb = -4*ones(size(K0); % 設置控制器的下界ub = 4*ones(size(K0); % 設置控制器的上界options = optimset(Display,iter); % 設置顯示參數(shù):顯示每次迭代的輸出K,fval,attainfactor = fgoalattain(eigfun,K0,goal,weight,lb,ub,options,A,B,C)結果為:weight = 5 3 1 Attainment Directional Iter F-count factor Step-size derivative Procedure 1 6 1.885 1 1.03 2 13 1.061 1 -0.679 3 20 0.4211 1 -0.523 Hessian modified 4 27 -0.06352 1 -0.053 Hessian modified twice 5 34 -0.1571 1 -0.133 6 41 -0.3489 1 -0.00768 Hessian modified 7 48 -0.3643 1 -4.25e-005 Hessian modified 8 55 -0.3645 1 -0.00303 Hessian modified twice 9 62 -0.3674 1 -0.0213 Hessian modified 10 69 -0.3806 1 0.00266 1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- KV配電工程施工合同范本
- 合作社入股合同范本
- 公寓租給名宿合同范本
- ?;\輸合同范本
- 合股公司合同范本
- 別墅紗窗采購合同范本
- 減振合同范例
- 辦校合同范例
- 臨街門面店鋪轉讓合同范本
- 廚房燃氣改造合同范本
- 2022年南京鐵道職業(yè)技術學院單招職業(yè)技能題庫及答案解析
- 項目一-旅游概述-(旅游概論課件完美版)
- 10G409預應力管樁圖集
- 《電視節(jié)目制作》課件
- 挖掘機司機培訓服務投標方案(技術標 )
- 小學生主題班會 愛國主義教育 課件(共35張PPT)
- 雇傭保姆免責協(xié)議7篇(通用)
- 水電站水輪機調速器及其附屬設備安裝施工技術方案
- XX大學學科競賽項目申請書
- 03S702鋼筋混凝土化糞池圖集
- 06-2018泥石流災害防治工程勘查規(guī)范(試行)
評論
0/150
提交評論