Matlab的優化工具箱的幾個應用函數及例子_第1頁
Matlab的優化工具箱的幾個應用函數及例子_第2頁
Matlab的優化工具箱的幾個應用函數及例子_第3頁
Matlab的優化工具箱的幾個應用函數及例子_第4頁
Matlab的優化工具箱的幾個應用函數及例子_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、函描函描函數fgoalattainfminbndfminconfminimaxfminsearch,fminuncfseminf1inprogquadprog無約束非線性最小化半無限問題線性課題二次課題Matlab的優化工具箱的幾個應用函數及例子利用Matlab的優化工具箱,可以求解線性規劃、非線性規劃和多目標規劃問題。具體而言,包括線性、非線性最小化,最大最小化,二次規劃,半無限問題,線性、非線性方程(組)的求解,線性、非線性的最小二乘問題。另外,該工具箱還提供了線性、非線性最小化,方程求解,曲線擬合,二次規劃等問題中大型課題的求解方法,為優化方法在工程中的實際應用提供了更方便快捷的途徑。9

2、1優化工具箱中的函數優化工具箱中的函數包括下面兒類:最小化函數9-1量小化函數哀描述多目標達到問題有邊界的標竝非線性最小化有約束的非線性最小化最大最小化2.方程求解函數表9-2方程求解函數表函描數述線性方程求解fsolve非線性方程求解fzero標戢非線性方程求解最小二乘(曲線擬合)函數表9-3最小二乘函數表線性最小二乘lsqlinlsqcurvefit有約束線性最小二乘非線性曲線擬合lsqnonlinlsqnonneg非線性最小二乘非負線性最小二乘實用函數表44實用函數表函數optimsetoptimget描述設垃參數大型方法的演示函數哀9-5大型方法的演示函數表函數circustent描述

3、馬戲團帳篷問題一二次課題molecule用無約束非線性最小化進行分子組成求解optdeblur用有邊界線性最小二乘法進行圖形處理中型方法的演示函數哀9-6中型方法的演示函數哀bandemodfildemogoaldemooptdemotutdemo描述香蕉函數的最小化過濾器設計的有限結度目標達到舉例演示過程菜單教程演示9.1.3參數設置利用optimset函數,可以創建和編輯參數結構;利用optimget函數,可以獲得options優化參數。optimget函數功能:獲得options優化參數。語法:val=optimget(options,param)val=optimget(options

4、,param,defauIt)描述:val=optimget(options,,param,)返回優化參數options中指定的參數的值。只需要用參數開頭的字母來定義參數就行了。val=optimget(options,param,,default)options結構參數中沒有定義指定參數,則返回缺省值。注意,這種形式的函數主要用于其它優化函數。舉例:1.下面的命令行將顯示優化參數options返回到my_options結構中:val=optimget(my_options,Display)2.下面的命令行返回顯示優化參數options到my_options結構中(就象前面的例子一樣),但如果

5、顯示參數沒有定義,則返回值final:optnew=optimget(my_options,Display,,finaT);參見:optimsetoptimset函數功能:創建或編輯優化選項參數結構。語法:options=optimset(paraml?,valuel,param2,value2,.)optimsetoptions=optimsetoptions=optimset(optimfun)options=optimset(oldopts,paramT,valuel,.)options=optimset(oldopts,newopts)描述:options=optimset(param

6、l,value1,parani2,value2,.)創建一個稱為options的優化選項參數,其中指定的參數具有指定值。所有未指定的參數都設置為空矩陣(將參數設置為表示當options傳遞給優化函數時給參數賦缺省值)。賦值時只要輸入參數前面的字母就行了。optimset函數沒有輸入輸出變量時,將顯示一張完整的帶有有效值的參數列表。options=optimset(withnoinputarguments)倉U建一個選項結構options,其中所有的元素被設置為。options=optimset(optimfun)創建一個含有所有參數名和與優化函數optimfun相關的缺省值的選項結構optio

7、nsooptions=optimset(oldopts,paraml,valuel,.)創建一個oldopts的拷貝,用指定的數值修改參數。options=optimset(oldopts,newopts)將己經存在的選項結構oldopts與新的選項結構newopts進行合并。newopts參數中的所有元素將覆蓋oldopts參數中的所有對應元素。舉例:下面的語句創建一個稱為options的優化選項結構,其中顯示參數設為iter,TolFun參數設置為le8:options=optimset(Display1,iter,TolFun,le8)下面的語句創建一個稱為options的優化結構的拷貝

8、,改變TolX參數的值,將新值保存到optnew參數中:optnew=optimset(options,TolX,le-4);下面的語句返回。ptions優化結構,其中包含所有的參數名和與fminbnd函數相關的缺省值:options=optimset(fminbnd)若只希望看到fminbnd函數的缺省值,只需要簡單地鍵入下面的語句就行了:optimsetfminbnd或者輸入下面的命令,其效果與上面的相同:optimset(fminbnd)參見:optimget9.1.4模型輸入時需要注意的問題使用優化工具箱時,由于優化函數要求目標函數和約束條件滿足一定的格式,所以需要用戶在進行模型輸入時

9、注意以下幾個問題:目標函數最小化優化函數fminbnd、fmnsearchfminunc、fminconfgoalattainfminmax和lsqnonlin都要求目標函數最小化,如果優化問題要求目標函數最大化,可以通過使該目標函數的負值最小化即-f(x)最小化來實現。近似地,對于quadprog函數提供-H和-f,對于1inprog函數提供-f。約束非正優化工具箱要求非線性不等式約束的形式為Ci(x)W0,通過對不等式取負可以達到使大于零的約束形式變為小于零的不等式約束形式的目的,如Ci(x)M0形式的約束等價于-Ci(x)W0;Ci(x)b形式的約束等價于-Ci(x)+bW0。避免使用全

10、局變量9.1.5(函數句柄)函數MATLAB6.0中可以用函數進行函數調用。函數返回指定MATLAB函數的句柄,其調用格式為:handle=function利用函數進行函數調用有下面幾點好處:用句柄將一個函數傳遞給另一個函數;減少定義函數的文件個數;改進重復操作;保證函數計算的可靠性。下面的例子為humps函數創建一個函數句柄,并將它指定為fhandle變量。fhandle=humps;同樣傳遞句柄給另一個函數,也將傳遞所有變量。本例將剛剛創建的函數句柄傳遞給fminbnd函數,然后在區間0.3,1上進行最小化。x=fminbnd(humps,0.3,1)0.63709.2最小化問J9.2.1

11、單變最小化9.2.1.1基本數學原理本節討論只有一個變量時的最小化問題,即一維搜索問題。該問題在某些情況下可以直接用于求解實際問題,但大多數情況下它是作為多變量最優化方法的基礎在應用,因為進行多變量最優化要用到一維搜索法。該問題的數學模型為:其中,JT,XZ和為標量,f(x)為函數,返回標量。該問題的搜索過程可用下式表達:其中Xk為本次迭代的值,d為搜索方向,Q為搜索方向上的步長參數。所以一維搜索就是要利用本次迭代的信息來構造下次迭代的條件。求解單變量最優化問題的方法有很多種,根據目標函數是否需要求導,可以分為兩類,即直接法和間接法。直接法不需要對目標函數進行求導,而間接法則需要用到目標函數的

12、導數。直接法常用的一維直接法主要有消去法和近似法兩種。消去法該法利用單峰函數具有的消去性質進行反復迭代,逐漸消去不包含極小點的區間,縮小搜索區間,直到搜索區間縮小到給定的允許精度為止。一種典型的消去法為黃金分割法(GoldenSectionSearch)o黃金分割法的基本思想是在單峰區間內適當插入兩點,將區間分為三段,然后通過比較這兩點函數值的大小來確定是刪去最左段還是最右段,或同時刪去左右兩段保留中間段。重復該過程使區間無限縮小。插入點的位置放在區間的黃金分割點及其對稱點上,所以該法稱為黃金分割法。該法的優點是算法簡單,效率較高,穩定性好。多項式近似法該法用于目標函數比較復雜的情況。此時尋找

13、一個與它近似的函數代替目標函數,并用近似函數的極小點作為原函數極小點的近似。常用的近似函數為二次和三次多項式。二次內插涉及到形如下式的二次函數數據擬合問題:其中步長極值為:然后只要利用三個梯度或函數方程組就可以確定系數a和b,從而可以確定a得到該值以后,進行搜索區間的收縮。在縮短的新區間中,重新安排三點求出下一次的近似極小點a*,如此迭代下去,直到滿足終止準則為止。其迭代公式為:其中二次插值法的計算速度比黃金分割法的快,但是對于一些強烈扭曲或可能多峰的函數,該法的收斂速度會變得很慢,甚至失敗。間接法間接法需要計算目標函數的導數,優點是計算速度很快。常見的間接法包括牛頓切線法、對分法、割線法和三

14、次插值多項式近似法等。優化工具箱中用得較多的是三次插值法。三次插值的基本思想與二次插值的一致,它是用四個己知點構造一個三次多項式P3(x),用它逼近函數f(x),以P3(x)的極小點作為f(x)的近似極小點。一般講,三次插值法比二次插值法的收斂速度要快些,但每次迭代需要計算兩個導數值。三次插值法的迭代公式為其中如果函數的導數容易求得,一般來說首先考慮使用三次插值法,因為它具有較高functionf=myfun(x)函描的效率。對于只需要計算函數值的方法中,二次插值法是一個很好的方法,它的收斂速度較快,尤其在極小點所在區間較小時尤其如此。黃金分割法則是一種十分穩定的方法,并且計算簡單。由于以上原

15、因,Matlab優化工具箱中使用得較多的方法是二次插值法、三次插值法、二次、三次混合插值法和黃金分割法。9.2.1.2相關函數介紹fminbnd功能:找到固定區間內單變量函數的最小值。語法:x=fminbnd(fun,xl,x2)x=fminbnd(fun,xl,x2,options)x=fminbnd(fun,xl,x2,options,Pl,P2,.)x,fval=fminbnd(.)x,fval,exitflag=fminbnd(.)x,fval,exitflag,output二fminbnd(.)描述:fminbnd求取固定區間內單變量函數的最小值。x=fminbnd(fun,xl,x

16、2)返回區間xl,x2上fun參數描述的標量函數的最小值x=fminbnd(fun,xl,x2,options)用。ptions參數指定的優化參數進行最小化。x=fminbnd(fun,xl,x2,options,Pl,P2,.)提供另外的參數Pl,P2等,傳輸給目標函數fun。如果沒有設置options選項,則令options=。x,fval=fminbnd(.)返回解x處目標函數的值。x,fval,exitflagj=fminbnd(.)返回exitflag值描述fminbnd函數的退出條件。x,fval,exitflag,output=fminbnd(.)返回包含優化信息的結構輸出。變量

17、:函數的輸入變量在表9-7中進行描述,輸出變量在表9-8中描述。與fminbnd函數相關的細節內容包含在fun,options,exitflag和output等參數中,如表9-10所不。表9-10參數描述表參描數述需要最小化的目標函數。fun函數需要輸入標呈參數x,返回x處的I3標函數標呈值f。可以將fun函數指定為命令行,如x=fminbnd(inline(,sin(x*x),x0)同樣,fun參數可以是一個包含函數名的字符串。對應的函數可以是H文件、內部函數或MEXfun文件。若fun=,myfun,則H文件函數myfun.m必須右下面的形式。函描弘計算X處的函數值。優化參數選項。你可以用

18、optimset函數設置或改變這些參數的值。options參數有以下幾個選項:Display-顯示的水平。選擇off,不顯示輸出:選擇iter,顯示每一步迭代過程options的輸出:選擇final,顯示最終結果。MaxFunEvals-函數評價的最大允許次數。Maxlter-最大允許迭代次數。TolX-X處的終止容限。描述退出條件:0表示目標函數收斂于解X處。exitflag0表示已經達到函數評價或迭代的最大次數。0表示目標函數不收斂。該參數包侖下列優化信息:output,iterations-迭代次數。outputoutput,algorithm-所采用的算法。output.funcCou

19、nt-函數評價次數。算法:fminbnd是一個M文件。其算法基于黃金分割法和二次插值法。文獻1中給出了實現同樣算法的Fortran程序。局限性:目標函數必須是連續的。fminbnd函數可能只給出局部最優解。當問題的解位于區間邊界上時,fminbnd函數的收斂速度常常很慢。此時,fmincon函數的計算速度更快,計算精度更高。fminbnd函數只用于實數變量。參見:fminsearch,fmincon,fminunc,optimset,inline文獻:1Forsythe,G.E,MA.Malcolm,andCBMoler,ComputerMethodsforMathematicalComput

20、ations,PrenticeHall,19769.2.1.3應用實例例一在區間(0,2兀)上求函數sin(x)的最小值:x=fminbnd(sin,0,2*pi)x=4.7124所以區間(0,2Ji)上函數sin(x)的最小值點位于x=4.7124處。最小值處的函數值為:y=sin(x)y=-1.0000磁盤中該問題的M文件名為opt21_l.ni。【例三對邊長為3m的正方形鐵板,在四個角處剪去相等的正方形以制成方形無蓋水槽,問如何剪法使水槽的容積最大?假設剪去的正方形的邊長為x,則水槽的容積為現在要求在區間(0,1.5)上確定一個x,使最大化。因為優化工具箱中要求目標函數最小化,所以需要對

21、目標函數進行轉換,即要求最小化。首先編寫M文件opt21_3o.m:functionf=myfun(x)f=-(3-2*x).八2*x;然后調用fminbnd函數(磁盤中M文件名為opt21_3.m):x=fminbnd(opt21_3o,0,1.5)得到問題的解:X=0.5000即剪掉的正方形的邊長為0.5m時水槽的容積最大。水槽的最大容積計算:y二optim2(x)y=-2.0000所以水槽的最大容積為2.0000m3。9.2.2線性規劃9.2.2.1基本數學原理線性規劃是處理線性目標函數和線性約束的一種較為成熟的方法,目前己經廣泛應用于軍事、經濟、工業、農業、教育、商業和社會科學等許多方

22、面。線性規劃問題的標準形式是:或寫成矩陣形式為:其中,0為n維列向量。線性規劃的標準形式要求目標函數最小化,約束條件取等式,變量非負。不符合這幾個條件的線性模型要首先轉化成標準形。線性規劃的求解方法主要是單純形法(SimpleMethod),該法由Dantzig于1947年提出,以后經過多次改進。單純形法是一種迭代算法,它從所有基本可行解的一個較小部分中通過迭代過程選出最優解。其迭代過程的一般描述為:1.將線性規劃化為典范形式,從而可以得到一個初始基本可行解x(0)(初始頂點),將它作為迭代過程的出發點,其目標值為z(x(0)o2.尋找一個基本可行解x(l),使z(x(1)Wz(x(0)。方法

23、是通過消去法將產生x(0)的典范形式化為產生x(l)的典范形式。3.繼續尋找較好的基本可行解x(2),x(3),使目標函數值不斷改進,即z(x(l)z(x(2)Mz(x(3)M。當某個基本可行解再也不能被其它基本可行解改進時,它就是所求的最優解。Matlab優化工具箱中采用的是投影法,它是單純形法的一種變種。9.2.2.2相關函數介紹1inprog函數功能:求解線性規劃問題。數學模型:其中Ex,b,beq,lb和ub為向量,4和deg為矩陣。語法:x二1inprog(f,A,b,Aeq,beq)x二1inprog(f,A,b,Aeq,beq,lb,ub)x二1inprog(f,A,b,Aeq,

24、beq,lb,ub,xO)x二1inprog(f,A,b,Aeq,beq,lb,ub,xO,options)x,fval=linprog()x,fval,exitflag=linprog()x,fval,exitflag,output二linprog()x,fval,exitflag,output,lambda二1inprog()描述:x=1inprog(f,A,b)求解問題minf*x,約束條件為A*x=box=linprog(f,A,b,Aeq,beq)求解上面的問題,但增加等式約束,即Aeq*x二beq。若沒有不等式存在,則令A=、b=ox=1inprog(f,A,b,Aeq,beq,l

25、b,ub)定義設計變量x的下界lb和上界ub,使得x始終在該范圍內。若沒有等式約束,令Aeq二、beq=ox=linprog(f,A,b,Aeq,beq,lb,ub,xO)設置初值為xO。該選項只適用于中型問題,缺省時大型算法將忽略初值。x=linprog(f,A,b,Aeq,beq,lb,ub,xO,options)用。ptionsJn定的優化參數進行最小化。x,fval=1inprog(.)返回解x處的目標函數值fval。x,lambda,exitflag=linprog(.)返回exitflag值,描述函數計算的退出條件。x,lambda,exitflag,output=1inprog(

26、.)返回包含優化信息的輸出變量output。x,fval,exitflag,output,lambda=linprog(.)將解x處的拉格朗日乘子返回到lambda參數中。變量:lambda參數lambda參數是解x處的拉格朗日乘子。它有以下一些屬性:lambda,lowerlambda的下界。lambda,upperlambda的上界。lambda,ineqlin-lambda的線性不等式。lambda,eqlinlambda的線性等式。其它參數意義同前。算法:大型優化算法大型優化算法釆用的是LIPSOL法,該法在進行迭代計算之前首先要進行一系列的預處理。中型優化算法1inprog函數使用的

27、是投影法,就象quadprog函數的算法一樣。linprog函數使用的是一種活動集方法,是線性規劃中單純形法的變種。它通過求解另一個線性規劃問題來找到初始可行解。診斷:大型優化問題算法的第一步涉及到一些約束條件的預處理問題。有些問題可能導致1inprog函數退出,并顯示不可行的信息。在本例中,exitflag參數將被設為負值以表示優化失敗。若Aeq參數中某行的所有元素都為零,但Beq參數中對應的元素不為零,則顯示以下退出信息:Exitingduetoinfeasibility:anallzerorowintheconstraintmatrixdoesnothaveazeroincorrespo

28、ndingrighthandsizeentry.若x的某一個元素沒在界內,則給出以下退出信息:Exitingduetoinfeasibility:objectivef*xisunboundedbelow.若Aeq參數的某一行中只有一個非零值,則x中的相關值稱為奇異變量。這里,x中該成分的值可以用Aeq和Beq算得。若算得的值與另一個約束條件相矛盾,則給出以下退出信息:Exitingduetoinfeasibility:Singletonvariablesinequalityconstraintsarenotfeasible.若奇異變量可以求解但其解超出上界或下界,則給出以下退出信息:Exiti

29、ngduetoinfeasibility:singletonvariablesintheequalityconstraintsarenotwithinbounds.9.2.2.3應用實例例二生產決策問題某廠生產甲乙兩種產品,已知制成一噸產品甲需用資源A3噸,資源B4m3;制成一噸產品乙需用資源A2噸,資源B6m3,資源C7個單位。若一噸產品甲和乙的經濟價值分別為7萬元和5萬元,三種資源的限制量分別為90噸、200m3和210個單位,試決定應生產這兩種產品各多少噸才能使創造的總經濟價值最高?令生產產品甲的數量為X1,生產產品乙的數量為X2。由題意可以建立下面的模型:該模型中要求目標函數最大化,需

30、要按照Matlab的要求進行轉換,即目標函數為首先輸入下列系數:f=-7;-5;A=324607;b=90;200;210;lb=zeros(2,1);然后調用1inprog函數:x,fval,exitflag,output,lambda=linprog(f,A,b,lb)X=14.000024.0000fval-218.0000exitflag=1output=iterations:5cgiterations:0algorithm:1lipsol1lambda=ineqlin:3x1doubleeqlin:0 x1doubleupper:2x1doublelower:2x1double由上可

31、知,生產甲種產品14噸、乙種產品24噸可使創建的總經濟價值最髙。最高經濟價值為218萬元。exitflag=l表示過程正常收斂于解x處。磁盤中本問題的M文件為opt22_2.m【例三投資問題某單位有一批資金用于四個工程項目的投資,用于各工程項目時所得到得凈收益(投入資金的百分比)如下表所示:9-11工程項目收益表工程項目ABCD收益(%)1510812由于某種原因,決定用于項目A的投資不大于其它各項投資之和;而用于項目B和C的投資要大于項目D的投資。試確定使該單位收益最大的投資分配方案。用xl、x2、x3和x4分別代表用于項目A、B、C和D的投資百分數,由于各項目的投資百分數之和必須等于100

32、%,所以xl+x2+x3+x4二1據題意,可以建立下面的數學模型:將它轉換為標準形式:然后進行求解:首先輸入下列系數:f二-0.15;-0.1;-0.08;-0.12;A二1-1-1-10-1-11;b=0;0;Aeq=l111;beq=l;lb=zeros(4,1);然后調用1inprog函數:x,fval,exitflag,output,lambda二linprog(f,A,b,Aeq,beq,lb);x二0.50000.25000.00000.2500fval-0.1300exitflag=1可見,四個項目的投資百分數分別為0.50、0.25.0.00和0.25時可使該單位獲得最大的收益

33、。最大收益為13%。過程正常收斂。磁盤中本問題的M文件為opt22_3.mo【例四工件加工任務分配問題某車間有兩臺機床甲和乙,可用于加工三種工件。假定這兩臺機床的可用臺時數分別為700和800,三種工件的數量分別為300、500和400,且已知用三種不同機床加工單位數量的不同工件所需的臺時數和加工費用(如表所示),問怎樣分配機床的加工任務,才能既滿足加工工件的要求,又使總加工費用最低?衰9T2機床加工情況衰機床類型單位工作所需加工臺時數單位工件的加工費用可用工件1工件2工件3工件1工件2工件3臺時數甲0.41.11.013910700乙0.51.21.311128800設在甲機床上加工工件1、

34、2和3的數量分別為xl、x2和x3,在乙機床上加工工件1、2和3的數量分別為x4、x5和x6。根據三種工種的數量限制,有xl+x4=300(對工件1)x2+x5二500(對工件2)x3+x6二400(對工件3)再根據機床甲和乙的可用總臺時限制,可以得到其它約束條件。以總加工費用最少為目標函數,組合約束條件,可以得到下面的數學模型:首先輸入下列系數:f=13;9;10;11;12;8;A=0.41.110000000.51.21.3;b=700;800;Aeq=l00100010010001001;beq=300500400;lb=zeros(6,1);然后調用1inprog函數:x,fval,

35、exitflag,output,lambda=linprog(f,A,b,Aeq,beq,lb);x=0.0000500.00000.0000300.00000.0000400.0000fval二1000e+004exitflag=1可見,在甲機床上加工500個工件2,在乙機床上加工300個工件1、加工400個工件3可在滿足條件的情況下使總加工費最小。最小費用為11000元。收斂正常。磁盤中本問題的M文件為opt22_4.in。【例五裁料問題在某建筑工程施工中需要制作10000套鋼筋,每套鋼筋由2.9m、2.Im和1.5in三種不同長度的鋼筋各一根組成,它們的直徑和材質不同。目前在市場上采購到

36、的同類鋼筋的長度每根均為7.4m,問應購進多少根7.4m長的鋼筋才能滿足工程的需要?首先分析共有多少種不同的套裁方法,該問題的可能材料方案如表9-13所示。表9T3材料方案表裁料下料長度方案(m)編號i123456782.9211100002.1021032101.510130234料頭長度0.10.30.901.10.20.81.4(in)設以x,(i二1,2,,8)表示按第i種裁料方案下料的原材料數量,則可得該問題的數學模型為:首先輸入下列系數:Aeq=2000000010130234;beq二100001000010000;lb=zeros(8,1);然后調用1inprog函數:x,fv

37、al,exitflag,output,lambda二1inprog(f,Aeq,beq,lb);X=0e+003*5.00000.00000.00000.00001.666750000.00000.0000fval-9.1667e+003所以最節省的情況需要9167根7.4m長的鋼筋,其中第一種方案使用5000根,第五種方案使用1667根,第六種方案使用2500根。磁盤中本問題的M文件為opt22_5.m。【例六工作人員計劃安排問題某晝夜服務的公共交通系統每天各時間段(每4小時為一個時間段)所需的值班人數如表所示,這些值班人員在某一時段開始上班后要連續工作8個小時(包括輪流用膳時間),問該公交

38、系統至少需要多少名工作人員才能滿足值班的需要?表9T4各時段所需值班人數衷班次時間段數人需所函描函描TOC o 1-5 h z16:0010:00602io:OO14:OO70605014:0018:0018:0022:0022:002:00202:006:0030設Xi為第i個時段開始上班的人員數,據題意建立下面的數學模型:需要對前面六個約束條件進行形式變換,是不等式為非正不等式。只需要在不等式兩側取負即可。首先輸入下列系數:f=A二-10000-1-1-100000-1-100000-1-100000-1-100000-1-1;b二-60;-70;-60;-50;-20;-30;lb=ze

39、ros(6,1);然后調用1inprog函數:x,fval,exitflag,output,lambda二linprog(f,A,b,lb);x=41.91762&082435.049414.95069.860620.1394fval-150.0000exitflag=1可見,只要六個時段分別安排42人、28人、35人、15人、10人和20人就可以滿足值班的需要。共計150人。計算收斂。磁盤中本問題的M文件為opt22_6.mo【例七廠址選擇問題考慮A、B、C三地,毎地都出產一定數量的原料,也消耗一定數量的產品(見表9-15)o已知制成每噸產品需3噸原料,各地之間的距離為:A-B:150km,

40、A-C:100km,B-C:200kmo假定每萬噸原料運輸lkm的運價是5000元,每萬噸產品運輸lkm的運價是6000元。由于地區條件的差異,在不同地點設廠的生產費用也不同。問究竟在哪些地方設廠,規模多大,才能使總費用最小?另外,由于其它條件限制,在B處建廠的規模(生產的產品數量)不能超過5萬噸。表9T5A.B.C三地出產原料.消耗產品情況哀地點年產原料(萬噸)年銷產品(萬噸)生產費用(萬元/萬噸)函描函描207B1613150100120令Xij為由i地運到j地的原料數量(萬噸),yij為由i地運往j地的產品數量(萬噸),i,j=l,2,3(分別對應A、B、C三地)。根據題意,可以建立問題

41、的數學模型(其中目標函數包括原材料運輸費、產品運輸費和生產費):首先輸入下列系數:f=75;75;50;50;100;100;150;240;210;120;160;220;A二1-11-100330000-11001-100-11-11000000001100;b二20;16;24;5;Aeq二000000101010000000010101;beq=7;13;lb=zeros(12,1);然后調用1inprog函數:x,fval,exitflag,output,lambda=linprog(ftA,b,Aeq,beq,lb);x=0.00001.00000.00000.00000.0000

42、0.00007.00000.00000.00005.00000.0000&0000fval-4850e+003exitflag=1要使總費用最小,需要B地向A地運送1萬噸,A、B、C三地的建廠規模分別為7萬噸、5萬噸和8萬噸。最小總費用為3485元。磁盤中本問題的M文件為opt22_7.m【例八確定職工編制問題某廠每日八小時的產量不低于1800件。為了進行質量控制,計劃聘請兩種不同水平的檢驗員。一級檢驗員的標準為:速度25件/小時,正確率98%,計時工資4元/小時;二級檢驗員的標準為:速度15件/小時,正確率95%,計時工資3元/小時。檢驗員每錯檢一次,工廠要損失2元。現有可供廠方聘請的檢驗員

43、人數為一級8人和二級10人。為使總檢驗費用最省,該工廠應聘一級、二級檢驗員各多少名?9-16生產產品工時表函描設需要一級和二級檢驗員的人數分別為X1名和X2名,由題意可以建立下面的模型:利用Matlab進行求解之前需要將第三個約束條件進行轉換,兩邊取負以后得到首先輸入下列系數:f=40;36;A二1001-5-3;b二8;10;-45;lb=zeros(2,1);然后調用1inprog函數:x,fval,exitflag,output,lambda=linprog(f,A,b,lb);x=&00006667fval-380.0000exitflag=1可見,招聘一級檢驗員8名、二級檢驗員2名可

44、使總檢驗費最省,約為380.00元。計算收斂。磁盤中本問題的M文件為opt22_8.mo【例九生產計劃的最優化問題某工廠生產A和B兩種產品,它們需要經過三種設備的加工,其工時如表9-16所示。設備一、二和三每天可使用的時間分別不超過12、10和8小時。產品A和B的利潤隨市場的需求有所波動,如果預測未來某個時期內A和B的利潤分別為4和3千元/噸,問在那個時期內,每天應安排產品A、B各多少噸,才能使工廠獲利最大?函描函描設備一設備二設備三3432108A(小時/噸)3B(小時/噸)412設備每天最多可工作時數(小時設毎天應安排生產產品A和B分別為xl噸和x2噸,由題意建立下面的數學模型:首先轉換目

45、標函數為標準形式:輸入下列系數:f=-4;-3;A二3432;b二12;10;8;lb=zeros(2,1);然后調用1inprog函數:x,fval,exitflag,output,lambda=linprog(f,A,b,lb);X=0.80004000fval二-10.4000所以,每天生產A產品0.80噸、B產品2.40噸可使工廠獲得最大利潤。磁盤中本問題的M文件為opt22_9.m。9.2.3無約束非線性規劃問題9.2.3.1基本數學原理無約束最優化問題在實際應用中也比較常見,如工程中常見的參數反演問題。另外,許多有約束最優化問題可以轉化為無約束最優化問題進行求解。求解無約束最優化問

46、題的方法主要有兩類,即直接搜索法(Searchmethod)和梯度法(Gradientmethod)。直接搜索法適用于目標函數高度非線性,沒有導數或導數很難計算的情況,由于實際工程中很多問題都是非線性的,直接搜索法不失為一種有效的解決辦法。常用的直接搜索法為單純形法,此外還有Hooke-Jeeves搜索法、Pave11共輒方向法等,其缺點是收斂速度慢。在函數的導數可求的情況下,梯度法是一種更優的方法,該法利用函數的梯度(一階導數)和Hessian矩陣(二階導數)構造算法,可以獲得更快的收斂速度。函數f(x)的負梯度方向-Vf(x)即反映了函數的最大下降方向。當搜索方向取為負梯度方向時稱為最速下

47、降法。當需要最小化的函數有一狹長的谷形值域時,該法的效率很低,如Rosenbrock函數f(x)=100(xl-x22)2+(l-xl)2它的最小值解為x二1,1,最小值為f(x)=0o下圖是該函數的等值線圖,圖中還顯示了從初值-1.9,2出發向最小值前進的路徑。迭代1000次以后終止,此時距最小值仍有相當長的距離。圖中的黑色區域是該法在谷的兩側不斷進行“之”字形搜索形成的。圖9-1香蕉函數的尊值線圖及量速下降法的搜索路徑這種類型的函數又稱為香蕉函數。常見的梯度法有最速下降法、Newton法、Marquart法、共輒梯度法和擬牛頓法(Quasi-Newtonmethod)等。在所有這些方法中,

48、用得最多的是擬牛頓法,這些方法在每次迭代過程中建立曲率信息,構成下式得二次模型問題:其中,Hessian矩陣H為一正定對稱矩陣,c為常數向量,b為常數。對x求偏導數可以獲得問題的最優解解x*可寫作:擬牛頓法包括兩個階段,即確定搜索方向一維搜索階段Hessian矩陣的更新牛頓法由于需要多次計算Hessian矩陣,計算量很大,而擬牛頓法則通過構建一個Hessian矩陣的近似矩陣來避開這個問題。在優化工具箱中,通過將options參數HessUpdate設置為BFGS或DFP來決定搜索方向。當Hessian矩陣H始終保持正定時,搜索方向就總是保持為下降方向。Hessian矩陣的方法很多,對于求解一般

49、問題,Broyden,Hetcher,Goldfarb和Shann。的方法(簡稱BFGS法)是最有效的。BFGS法的計算公式為:其中作為初值,H0可以設為任意對稱正定矩陣。另一個有名的構造近似Hessian矩陣的方法是DFP(Daridon-Fletcher-Powe11)法。該法的計算公式與BFGS法的形式一樣,只是qk替換為sk。梯度信息可以是用解析的方法得到,也可以是用有限差分的方法通過求偏導數得到。在每一個主要的迭代過程中,在下式所示的方向上進行一維搜索:圖9-2演示了用擬牛頓法時Rosenbrock函數的求解路徑。可見,利用該法,只需要140次迭代就可以達到最小值解,比前面利用最速下

50、降法要快得多。圖9-2擬牛頓法的攪索路徑一維搜索工具箱中有兩套方案進行一維搜索。當梯度值可以直接得到時,用三次插值的方法進行一維搜索,當梯度值不能直接得到時,采用二次、三次混合插值法。9.2.3.2相關函數介紹fminunc函數功能:求多變量無約束函數的最小值。數學模型:其中,x為一向量,f(x)為一函數,返回標量。語法格式:x=fminunc(fun,x0)x=fminunc(fun,xO,options)x=fminunc(fun,xO,options,Pl,P2,.)x,fval=fminunc(.)x,fval,exitflag=fminunc(.)x,fval,exitflag,ou

51、tput二fminunc(.)x,fval,exitflag,output,grad=fminunc(.)x,fval,exitflag,output,grad,hessian=fminunc(.)描述:fminunc給定初值,求多變量標量函數的最小值。常用于無約束非線性最優化問題。x=fminunc(fun,x0)給定初值x0,求fun函數的局部極小點x。x0可以是標量、向量或矩陣。x=fminunc(fun,x0,options)用options參數中指定的優化參數進行最小化。x=fminunc(fun,x0,options,Pl,P2,.)將問題參數pl、p2等直接輸給目標函數fun,將

52、options參數設置為空矩陣,作為options參數的缺省值。x,fval=fminunc(.)將解x處目標函數的值返回到fval參數中。x,fval,exitflag=fminunc(.)返回exitflag值,描述函數的輸出條件。x,fval,exitflag,output=fminunc(.)返回包含優化信息的結構輸出。x,fval,exitflag,output,grad=fminunc(.)將解x處fun函數的梯度值返回到grad參數中。x,fval,exitflag,output,grad,hessian=fminunc(.)將解x處目標函數的Hessian矩陣信息返回到hess

53、ian參數中。變量:表9-7中為輸入變量,表9-8中為輸出變量的描述。*9-17輸出變描述表為I3標函數。需要最小化的目標函數。fun函數需要輸入標雖參數x,返回x處的I3標函數標雖值代可以將fun函數指定為命令行,如x=fminbnd(inline(*sin(x*x)J),xO)同樣,fun參數可以是一個包含函數名的字符串。對應的函數可以是H文件、內部函數或MEX文件。若fun二myfun,則M文件函數myfun.m必須有下而的形式:functionf=myfun(x)%計算x處的函數值。若fun函數的梯度可以算得,口options.GradObj設為on(用下式設定),options=op

54、timset(GradObj*on)則fun函數必須返回解x處的梯度向雖g到第二個輸出變呈中去。注意,當被調用的fun函數只需要一個輸出變呈時(如算法只需要目標函數的值而不需要其梯度值時,可以通過核對nargout的值來避免計算梯度值。functionf,g=myfun(x)funf=%計算X處得函數值。ifnargout1%調用fun函數并要求有兩個輸出變雖。g=%計算x處的梯度值。end若Hessian矩陣也可以求得,并且options.Hessian設為on,即,options=optimset(*Hessian*,*on,)則fun函數必須返回解x處的Hessian對稱矩陣H到第三個輸

55、出變呈中去。注意,當被調用的fun函數只需要一個或兩個輸出變雖時(如算法只需要目標函數的值f和梯度值g而不需要Hessian矩陣H時,可以通過核對nargout的值來避免計算Hessian矩陣functionf,g,H=myfun(x)f=.%計算X處得函數值。ifnargout1%調用fun函數并要求有兩個輸出變雖。函描g=%計算X處的梯度值。ifnargout2H=%計算x處的Hessian矩陣。end優化參數選項。可以通過optimset函數設置或改變這些參數。其中有的參數適用于所有的優化算法,有的則只適用于大型優化問題,窮外一些則只適用于中型問題。首先描述適用于大型問題的選項。這僅僅是

56、一個參考,因為使用大型問題算法有一些條件。對于fminunc函數來說,必須提供梯度信息。LargeScale-當設為on時使用大型算法,若設為off則使用中型問題的算法。適用于大型和中型算法的參數:Diagnostics-打印最小化函數的診斷信息。Display-顯示水平。選擇off,不顯示輸出:選擇itc,顯示每一步迭代過程的輸出:選擇final,顯示最終結果。打印最小化函數的診斷信息。GradObj-用戶定義的目標函數的梯度。對于大型問題此參數是必選的,對于中型問題則是可選項。optionsMaxFunEvals-函數評價的最大次數。MaxIter-最大允許迭代次數。TolFun-函數值的

57、終止容限。TolX-x處的終止容限。只用于大型算法的參數:Hessian-用戶定義的目標函數的Hessian矩陣。HessPattern-用于有限筮分的Hessian矩陣的稀疏形式。若不方便求fun函數的稀疏Hessian矩陣H,可以通過用梯度的有限差分獲得的H的稀疏結構(如非零值的位置等)來得到近似的Hessian矩陣H。若連矩陣的稀疏結構都不知道,則可以將HessPattern設為密集矩陣,在每一次迭代過程中,都將進行密集矩陣的有限塗分近似(這定缺省設擔)。這將非常麻煩,所以花一些力氣得到Hessian矩陣的稀疏結構還是值得的。MaxPCGIter-PCG迭代的最大次數。函描Precond

58、BandWidth-PCG前處理的上帶寬,缺省時為零。對于有些問題,增加帶寬可以減少迭代次數。TolPCG-PCG迭代的終止容限。TypicalX一典型x值。只用于中型算法的參數:DerivativeCheck-對用戶提供的導數和有限左分求出的導數進行對比。DiffMaxChange-變呈有限差分梯度的最大變化。DiffMinChange-變呈有限差分梯度的最小變化。LineSearchType-維搜索算法的選擇。描述退出條件:0表示目標函數收斂于解X處。exitflag0表示已經達到函數評價或迭代的最大次數。0表示目標函數不收斂。該參數包含下列優化信息:output,iterations-迭

59、代次數。output,algorithm-所采用的算法。outputoutput.funcCount-函數評價次數。output,cgiterations-PCG迭代次數(只適用于大型規劃問題)output,stepsize-最終步長的大小(只用于中型問題)。output,firstorderopt-一階優化的度雖:解x處梯度的范數。注意:MaxPCGIter-PCG迭代的最大次數。函描對于求解平方和的問題,fminunc函數不是最好的選擇,用lsqnonlin函數效果更佳。使用大型方法時,必須通過將options.GradObj設置為on來提供梯度信息,否則將給出警告信息。算法.大型優化算法

60、若用戶在fun函數中提供梯度信息,則缺省時函數將選擇大型優化算法,該算法是基于內部映射牛頓法的子空間置信域法,理論描述可參見文獻8,9。計算中的每一次迭代涉及到用PCG法求解大型線性系統得到的近似解。中型優化算法此時fminunc函數的參數options.LargeScale設置為off。該算法釆用的是基于二次和三次混合插值一維搜索法的BFGS擬牛頓法。該法通過BFGS公式來更新Hessian矩陣。通過將HessUpdate參數設置為dfp,可以用DFP公式來求得Hessian矩陣逆的近似。通過將HessUpdate參數設置為steepdesc,可以用最速下降法來更新Hessian矩陣。但一般

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論