版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
9.1概述利用Matlab的優(yōu)化工具箱,可以求解線性規(guī)劃、非線性規(guī)劃和多目標(biāo)規(guī)劃問題。具體而言,包括線性、非線性最小化,最大最小化,二次規(guī)劃,半無限問題,線性、非線性方程(組)的求解,線性、非線性的最小二乘問題。另外,該工具箱還提供了線性、非線性最小化,方程求解,曲線擬合,二次規(guī)劃等問題中大型課題的求解方法,為優(yōu)化方法在工程中的實(shí)際應(yīng)用提供了更方便快捷的途徑。9.1.1優(yōu)化工具箱中的函數(shù)優(yōu)化工具箱中的函數(shù)包括下面幾類:1.最小化函數(shù)表9-1最小化函數(shù)表函數(shù)描述fgoalattain多目標(biāo)達(dá)到問題fminbnd有邊界的標(biāo)量非線性最小化fmincon有約束的非線性最小化fminimax最大最小化fminsearch,fminunc無約束非線性最小化fseminf半無限問題linprog線性課題quadprog二次課題2.方程求解函數(shù)表9-2方程求解函數(shù)表函數(shù)描述\線性方程求解fsolve非線性方程求解fzero標(biāo)量非線性方程求解3.最小二乘(曲線擬合)函數(shù)表9-3最小二乘函數(shù)表函數(shù)描述\線性最小二乘lsqlin有約束線性最小二乘lsqcurvefit非線性曲線擬合lsqnonlin非線性最小二乘lsqnonneg非負(fù)線性最小二乘4.實(shí)用函數(shù)表9-4實(shí)用函數(shù)表函數(shù)描述optimset設(shè)置參數(shù)optimget5.大型方法的演示函數(shù)表9-5大型方法的演示函數(shù)表函數(shù)描述circustent馬戲團(tuán)帳篷問題—二次課題molecule用無約束非線性最小化進(jìn)行分子組成求解optdeblur用有邊界線性最小二乘法進(jìn)行圖形處理6.中型方法的演示函數(shù)表9-6中型方法的演示函數(shù)表函數(shù)描述bandemo香蕉函數(shù)的最小化dfildemo過濾器設(shè)計(jì)的有限精度goaldemo目標(biāo)達(dá)到舉例optdemo演示過程菜單tutdemo教程演示9.1.3參數(shù)設(shè)置利用optimset函數(shù),可以創(chuàng)建和編輯參數(shù)結(jié)構(gòu);利用optimget函數(shù),可以獲得options優(yōu)化參數(shù)?!駉ptimget函數(shù)功能:獲得options優(yōu)化參數(shù)。語法:val=optimget(options,'param')val=optimget(options,'param',default)描述:val=optimget(options,'param')返回優(yōu)化參數(shù)options中指定的參數(shù)的值。只需要用參數(shù)開頭的字母來定義參數(shù)就行了。val=optimget(options,'param',default)若options結(jié)構(gòu)參數(shù)中沒有定義指定參數(shù),則返回缺省值。注意,這種形式的函數(shù)主要用于其它優(yōu)化函數(shù)。舉例:1.
下面的命令行將顯示優(yōu)化參數(shù)options返回到my_options結(jié)構(gòu)中:val=optimget(my_options,'Display')2.
下面的命令行返回顯示優(yōu)化參數(shù)options到my_options結(jié)構(gòu)中(就象前面的例子一樣),但如果顯示參數(shù)沒有定義,則返回值'final':optnew=optimget(my_options,'Display','final');參見:optimset●optimset函數(shù)功能:創(chuàng)建或編輯優(yōu)化選項(xiàng)參數(shù)結(jié)構(gòu)。語法:options=optimset('param1',value1,'param2',value2,...)optimsetoptions=optimsetoptions=optimset(optimfun)options=optimset(oldopts,'param1',value1,...)options=optimset(oldopts,newopts)描述:options=optimset('param1',value1,'param2',value2,...)創(chuàng)建一個(gè)稱為options的優(yōu)化選項(xiàng)參數(shù),其中指定的參數(shù)具有指定值。所有未指定的參數(shù)都設(shè)置為空矩陣[](將參數(shù)設(shè)置為[]表示當(dāng)options傳遞給優(yōu)化函數(shù)時(shí)給參數(shù)賦缺省值)。賦值時(shí)只要輸入?yún)?shù)前面的字母就行了。optimset函數(shù)沒有輸入輸出變量時(shí),將顯示一張完整的帶有有效值的參數(shù)列表。options=optimset(withnoinputarguments)創(chuàng)建一個(gè)選項(xiàng)結(jié)構(gòu)options,其中所有的元素被設(shè)置為[]。options=optimset(optimfun)創(chuàng)建一個(gè)含有所有參數(shù)名和與優(yōu)化函數(shù)optimfun相關(guān)的缺省值的選項(xiàng)結(jié)構(gòu)options。options=optimset(oldopts,'param1',value1,...)創(chuàng)建一個(gè)oldopts的拷貝,用指定的數(shù)值修改參數(shù)。options=optimset(oldopts,newopts)將已經(jīng)存在的選項(xiàng)結(jié)構(gòu)oldopts與新的選項(xiàng)結(jié)構(gòu)newopts進(jìn)行合并。newopts參數(shù)中的所有元素將覆蓋oldopts參數(shù)中的所有對(duì)應(yīng)元素。舉例:1.下面的語句創(chuàng)建一個(gè)稱為options的優(yōu)化選項(xiàng)結(jié)構(gòu),其中顯示參數(shù)設(shè)為'iter',TolFun參數(shù)設(shè)置為1e-8:options=optimset('Display','iter','TolFun',1e-8)2.下面的語句創(chuàng)建一個(gè)稱為options的優(yōu)化結(jié)構(gòu)的拷貝,改變TolX參數(shù)的值,將新值保存到optnew參數(shù)中:optnew=optimset(options,'TolX',1e-4);3.下面的語句返回options優(yōu)化結(jié)構(gòu),其中包含所有的參數(shù)名和與fminbnd函數(shù)相關(guān)的缺省值:options=optimset('fminbnd')4.若只希望看到fminbnd函數(shù)的缺省值,只需要簡(jiǎn)單地鍵入下面的語句就行了:optimsetfminbnd或者輸入下面的命令,其效果與上面的相同:optimset('fminbnd')參見:optimget9.1.4模型輸入時(shí)需要注意的問題使用優(yōu)化工具箱時(shí),由于優(yōu)化函數(shù)要求目標(biāo)函數(shù)和約束條件滿足一定的格式,所以需要用戶在進(jìn)行模型輸入時(shí)注意以下幾個(gè)問題:1.目標(biāo)函數(shù)最小化優(yōu)化函數(shù)fminbnd、fminsearch、fminunc、fmincon、fgoalattain、fminmax和lsqnonlin都要求目標(biāo)函數(shù)最小化,如果優(yōu)化問題要求目標(biāo)函數(shù)最大化,可以通過使該目標(biāo)函數(shù)的負(fù)值最小化即-f(x)最小化來實(shí)現(xiàn)。近似地,對(duì)于quadprog函數(shù)提供-H和-f,對(duì)于linprog函數(shù)提供-f。2.約束非正優(yōu)化工具箱要求非線性不等式約束的形式為Ci(x)≤0,通過對(duì)不等式取負(fù)可以達(dá)到使大于零的約束形式變?yōu)樾∮诹愕牟坏仁郊s束形式的目的,如Ci(x)≥0形式的約束等價(jià)于-Ci(x)≤0;Ci(x)≥b形式的約束等價(jià)于-Ci(x)+b≤0。3.避免使用全局變量9.1.5@(函數(shù)句柄)函數(shù)MATLAB6.0中可以用@函數(shù)進(jìn)行函數(shù)調(diào)用。@函數(shù)返回指定MATLAB函數(shù)的句柄,其調(diào)用格式為:handle=@function利用@函數(shù)進(jìn)行函數(shù)調(diào)用有下面幾點(diǎn)好處:●
用句柄將一個(gè)函數(shù)傳遞給另一個(gè)函數(shù);●
減少定義函數(shù)的文件個(gè)數(shù);●
改進(jìn)重復(fù)操作;●
保證函數(shù)計(jì)算的可靠性。下面的例子為humps函數(shù)創(chuàng)建一個(gè)函數(shù)句柄,并將它指定為fhandle變量。fhandle=@humps;同樣傳遞句柄給另一個(gè)函數(shù),也將傳遞所有變量。本例將剛剛創(chuàng)建的函數(shù)句柄傳遞給fminbnd函數(shù),然后在區(qū)間[0.3,1]上進(jìn)行最小化。x=fminbnd(@humps,0.3,1)x=0.63709.2最小化問題9.2.1單變量最小化基本數(shù)學(xué)原理本節(jié)討論只有一個(gè)變量時(shí)的最小化問題,即一維搜索問題。該問題在某些情況下可以直接用于求解實(shí)際問題,但大多數(shù)情況下它是作為多變量最優(yōu)化方法的基礎(chǔ)在應(yīng)用,因?yàn)檫M(jìn)行多變量最優(yōu)化要用到一維搜索法。該問題的數(shù)學(xué)模型為:其中,x,x1,和x2為標(biāo)量,f(x)為函數(shù),返回標(biāo)量。該問題的搜索過程可用下式表達(dá):其中xk為本次迭代的值,d為搜索方向,α為搜索方向上的步長(zhǎng)參數(shù)。所以一維搜索就是要利用本次迭代的信息來構(gòu)造下次迭代的條件。求解單變量最優(yōu)化問題的方法有很多種,根據(jù)目標(biāo)函數(shù)是否需要求導(dǎo),可以分為兩類,即直接法和間接法。直接法不需要對(duì)目標(biāo)函數(shù)進(jìn)行求導(dǎo),而間接法則需要用到目標(biāo)函數(shù)的導(dǎo)數(shù)。1.直接法常用的一維直接法主要有消去法和近似法兩種。(1)消去法該法利用單峰函數(shù)具有的消去性質(zhì)進(jìn)行反復(fù)迭代,逐漸消去不包含極小點(diǎn)的區(qū)間,縮小搜索區(qū)間,直到搜索區(qū)間縮小到給定的允許精度為止。一種典型的消去法為黃金分割法(GoldenSectionSearch)。黃金分割法的基本思想是在單峰區(qū)間內(nèi)適當(dāng)插入兩點(diǎn),將區(qū)間分為三段,然后通過比較這兩點(diǎn)函數(shù)值的大小來確定是刪去最左段還是最右段,或同時(shí)刪去左右兩段保留中間段。重復(fù)該過程使區(qū)間無限縮小。插入點(diǎn)的位置放在區(qū)間的黃金分割點(diǎn)及其對(duì)稱點(diǎn)上,所以該法稱為黃金分割法。該法的優(yōu)點(diǎn)是算法簡(jiǎn)單,效率較高,穩(wěn)定性好。(2)多項(xiàng)式近似法該法用于目標(biāo)函數(shù)比較復(fù)雜的情況。此時(shí)尋找一個(gè)與它近似的函數(shù)代替目標(biāo)函數(shù),并用近似函數(shù)的極小點(diǎn)作為原函數(shù)極小點(diǎn)的近似。常用的近似函數(shù)為二次和三次多項(xiàng)式。二次內(nèi)插涉及到形如下式的二次函數(shù)數(shù)據(jù)擬合問題:其中步長(zhǎng)極值為:然后只要利用三個(gè)梯度或函數(shù)方程組就可以確定系數(shù)a和b,從而可以確定α*。得到該值以后,進(jìn)行搜索區(qū)間的收縮。在縮短的新區(qū)間中,重新安排三點(diǎn)求出下一次的近似極小點(diǎn)α*,如此迭代下去,直到滿足終止準(zhǔn)則為止。其迭代公式為:其中二次插值法的計(jì)算速度比黃金分割法的快,但是對(duì)于一些強(qiáng)烈扭曲或可能多峰的函數(shù),該法的收斂速度會(huì)變得很慢,甚至失敗。2.間接法間接法需要計(jì)算目標(biāo)函數(shù)的導(dǎo)數(shù),優(yōu)點(diǎn)是計(jì)算速度很快。常見的間接法包括牛頓切線法、對(duì)分法、割線法和三次插值多項(xiàng)式近似法等。優(yōu)化工具箱中用得較多的是三次插值法。三次插值的基本思想與二次插值的一致,它是用四個(gè)已知點(diǎn)構(gòu)造一個(gè)三次多項(xiàng)式P3(x),用它逼近函數(shù)f(x),以P3(x)的極小點(diǎn)作為f(x)的近似極小點(diǎn)。一般講,三次插值法比二次插值法的收斂速度要快些,但每次迭代需要計(jì)算兩個(gè)導(dǎo)數(shù)值。三次插值法的迭代公式為其中如果函數(shù)的導(dǎo)數(shù)容易求得,一般來說首先考慮使用三次插值法,因?yàn)樗哂休^高的效率。對(duì)于只需要計(jì)算函數(shù)值的方法中,二次插值法是一個(gè)很好的方法,它的收斂速度較快,尤其在極小點(diǎn)所在區(qū)間較小時(shí)尤其如此。黃金分割法則是一種十分穩(wěn)定的方法,并且計(jì)算簡(jiǎn)單。由于以上原因,Matlab優(yōu)化工具箱中使用得較多的方法是二次插值法、三次插值法、二次、三次混合插值法和黃金分割法。相關(guān)函數(shù)介紹fminbnd功能:找到固定區(qū)間內(nèi)單變量函數(shù)的最小值。語法:x=fminbnd(fun,x1,x2)x=fminbnd(fun,x1,x2,options)x=fminbnd(fun,x1,x2,options,P1,P2,...)[x,fval]=fminbnd(...)[x,fval,exitflag]=fminbnd(...)[x,fval,exitflag,output]=fminbnd(...)描述:fminbnd求取固定區(qū)間內(nèi)單變量函數(shù)的最小值。x=fminbnd(fun,x1,x2)返回區(qū)間{x1,x2}上fun參數(shù)描述的標(biāo)量函數(shù)的最小值x。x=fminbnd(fun,x1,x2,options)用options參數(shù)指定的優(yōu)化參數(shù)進(jìn)行最小化。x=fminbnd(fun,x1,x2,options,P1,P2,...)提供另外的參數(shù)P1,P2等,傳輸給目標(biāo)函數(shù)fun。如果沒有設(shè)置options選項(xiàng),則令options=[]。[x,fval]=fminbnd(...)返回解x處目標(biāo)函數(shù)的值。[x,fval,exitflag]=fminbnd(...)返回exitflag值描述fminbnd函數(shù)的退出條件。[x,fval,exitflag,output]=fminbnd(...)返回包含優(yōu)化信息的結(jié)構(gòu)輸出。變量:函數(shù)的輸入變量在表9-7中進(jìn)行描述,輸出變量在表9-8中描述。與fminbnd函數(shù)相關(guān)的細(xì)節(jié)內(nèi)容包含在fun,options,exitflag和output等參數(shù)中,如表9-10所示。表9-10參數(shù)描述表參數(shù)描述fun需要最小化的目標(biāo)函數(shù)。fun函數(shù)需要輸入標(biāo)量參數(shù)x,返回x處的目標(biāo)函數(shù)標(biāo)量值f??梢詫un函數(shù)指定為命令行,如x=fminbnd(inline('sin(x*x)'),x0)同樣,fun參數(shù)可以是一個(gè)包含函數(shù)名的字符串。對(duì)應(yīng)的函數(shù)可以是M文件、內(nèi)部函數(shù)或MEX文件。若fun='myfun',則M文件函數(shù)myfun.m必須右下面的形式。functionf=myfun(x)f=...%計(jì)算x處的函數(shù)值。options優(yōu)化參數(shù)選項(xiàng)。你可以用optimset函數(shù)設(shè)置或改變這些參數(shù)的值。options參數(shù)有以下幾個(gè)選項(xiàng):
●Display–顯示的水平。選擇'off',不顯示輸出;選擇'iter',顯示每一步迭代過程
的輸出;選擇'final',顯示最終結(jié)果。●MaxFunEvals–函數(shù)評(píng)價(jià)的最大允許次數(shù)。MaxIter–最大允許迭代次數(shù)。TolX–x處的終止容限。exitflag描述退出條件:
>0表示目標(biāo)函數(shù)收斂于解x處。
0表示已經(jīng)達(dá)到函數(shù)評(píng)價(jià)或迭代的最大次數(shù)。
<0表示目標(biāo)函數(shù)不收斂。output該參數(shù)包含下列優(yōu)化信息:
output.iterations–迭代次數(shù)。
output.algorithm–所采用的算法。
output.funcCount–函數(shù)評(píng)價(jià)次數(shù)。算法:fminbnd是一個(gè)M文件。其算法基于黃金分割法和二次插值法。文獻(xiàn)[1]中給出了實(shí)現(xiàn)同樣算法的Fortran程序。局限性:1.目標(biāo)函數(shù)必須是連續(xù)的。2.fminbnd函數(shù)可能只給出局部最優(yōu)解。3.當(dāng)問題的解位于區(qū)間邊界上時(shí),fminbnd函數(shù)的收斂速度常常很慢。此時(shí),fmincon函數(shù)的計(jì)算速度更快,計(jì)算精度更高。4.fminbnd函數(shù)只用于實(shí)數(shù)變量。參見:fminsearch,fmincon,fminunc,optimset,inline文獻(xiàn):[1]
Forsythe,G.E.,M.A.Malcolm,andC.B.Moler,ComputerMethodsforMathematicalComputations,PrenticeHall,1976.應(yīng)用實(shí)例[例一]在區(qū)間(0,2π)上求函數(shù)sin(x)的最小值:x=fminbnd(@sin,0,2*pi)x=4.7124所以區(qū)間(0,2π)上函數(shù)sin(x)的最小值點(diǎn)位于x=4.7124處。最小值處的函數(shù)值為:y=sin(x)y=-1.0000磁盤中該問題的M文件名為opt21_1.m。[例三]對(duì)邊長(zhǎng)為3m的正方形鐵板,在四個(gè)角處剪去相等的正方形以制成方形無蓋水槽,問如何剪法使水槽的容積最大?假設(shè)剪去的正方形的邊長(zhǎng)為x,則水槽的容積為現(xiàn)在要求在區(qū)間(0,1.5)上確定一個(gè)x,使最大化。因?yàn)閮?yōu)化工具箱中要求目標(biāo)函數(shù)最小化,所以需要對(duì)目標(biāo)函數(shù)進(jìn)行轉(zhuǎn)換,即要求最小化。首先編寫M文件opt21_3o.m:functionf=myfun(x)f=-(3-2*x).^2*x;然后調(diào)用fminbnd函數(shù)(磁盤中M文件名為opt21_3.m):x=fminbnd(@opt21_3o,0,1.5)得到問題的解:x=0.5000即剪掉的正方形的邊長(zhǎng)為0.5m時(shí)水槽的容積最大。水槽的最大容積計(jì)算:y=optim2(x)y=-2.0000所以水槽的最大容積為2.0000m39.2.2線性規(guī)劃基本數(shù)學(xué)原理線性規(guī)劃是處理線性目標(biāo)函數(shù)和線性約束的一種較為成熟的方法,目前已經(jīng)廣泛應(yīng)用于軍事、經(jīng)濟(jì)、工業(yè)、農(nóng)業(yè)、教育、商業(yè)和社會(huì)科學(xué)等許多方面。線性規(guī)劃問題的標(biāo)準(zhǔn)形式是:或?qū)懗删仃囆问綖椋浩渲校?為n維列向量。線性規(guī)劃的標(biāo)準(zhǔn)形式要求目標(biāo)函數(shù)最小化,約束條件取等式,變量非負(fù)。不符合這幾個(gè)條件的線性模型要首先轉(zhuǎn)化成標(biāo)準(zhǔn)形。線性規(guī)劃的求解方法主要是單純形法(SimpleMethod),該法由Dantzig于1947年提出,以后經(jīng)過多次改進(jìn)。單純形法是一種迭代算法,它從所有基本可行解的一個(gè)較小部分中通過迭代過程選出最優(yōu)解。其迭代過程的一般描述為:1.將線性規(guī)劃化為典范形式,從而可以得到一個(gè)初始基本可行解x(0)(初始頂點(diǎn)),將它作為迭代過程的出發(fā)點(diǎn),其目標(biāo)值為z(x(0))。2.尋找一個(gè)基本可行解x(1),使z(x(1))≤z(x(0))。方法是通過消去法將產(chǎn)生x(0)的典范形式化為產(chǎn)生x(1)的典范形式。3.繼續(xù)尋找較好的基本可行解x(2),x(3),…,使目標(biāo)函數(shù)值不斷改進(jìn),即z(x(1))≥z(x(2))≥z(x(3))≥…。當(dāng)某個(gè)基本可行解再也不能被其它基本可行解改進(jìn)時(shí),它就是所求的最優(yōu)解。Matlab優(yōu)化工具箱中采用的是投影法,它是單純形法的一種變種。相關(guān)函數(shù)介紹linprog函數(shù)功能:求解線性規(guī)劃問題。數(shù)學(xué)模型:其中f,x,b,beq,lb和ub為向量,A和Aeq為矩陣。語法:x=linprog(f,A,b,Aeq,beq)x=linprog(f,A,b,Aeq,beq,lb,ub)x=linprog(f,A,b,Aeq,beq,lb,ub,x0)x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)[x,fval]=linprog(...)[x,fval,exitflag]=linprog(...)[x,fval,exitflag,output]=linprog(...)[x,fval,exitflag,output,lambda]=linprog(...)描述:x=linprog(f,A,b)求解問題minf'*x,約束條件為A*x<=b。x=linprog(f,A,b,Aeq,beq)求解上面的問題,但增加等式約束,即Aeq*x=beq。若沒有不等式存在,則令A(yù)=[]、b=[]。x=linprog(f,A,b,Aeq,beq,lb,ub)定義設(shè)計(jì)變量x的下界lb和上界ub,使得x始終在該范圍內(nèi)。若沒有等式約束,令A(yù)eq=[]、beq=[]。x=linprog(f,A,b,Aeq,beq,lb,ub,x0)設(shè)置初值為x0。該選項(xiàng)只適用于中型問題,缺省時(shí)大型算法將忽略初值。x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的優(yōu)化參數(shù)進(jìn)行最小化。[x,fval]=linprog(...)返回解x處的目標(biāo)函數(shù)值fval。[x,lambda,exitflag]=linprog(...)返回exitflag值,描述函數(shù)計(jì)算的退出條件。[x,lambda,exitflag,output]=linprog(...)返回包含優(yōu)化信息的輸出變量output。[x,fval,exitflag,output,lambda]=linprog(...)將解x處的拉格朗日乘子返回到lambda參數(shù)中。變量:lambda參數(shù)lambda參數(shù)是解x處的拉格朗日乘子。它有以下一些屬性:
lambda.lower–lambda的下界。
lambda.upper–lambda的上界。
lambda.ineqlin–lambda的線性不等式。
lambda.eqlin–lambda的線性等式。其它參數(shù)意義同前。算法:大型優(yōu)化算法大型優(yōu)化算法采用的是LIPSOL法,該法在進(jìn)行迭代計(jì)算之前首先要進(jìn)行一系列的預(yù)處理。中型優(yōu)化算法linprog函數(shù)使用的是投影法,就象quadprog函數(shù)的算法一樣。linprog函數(shù)使用的是一種活動(dòng)集方法,是線性規(guī)劃中單純形法的變種。它通過求解另一個(gè)線性規(guī)劃問題來找到初始可行解。診斷:大型優(yōu)化問題算法的第一步涉及到一些約束條件的預(yù)處理問題。有些問題可能導(dǎo)致linprog函數(shù)退出,并顯示不可行的信息。在本例中,exitflag參數(shù)將被設(shè)為負(fù)值以表示優(yōu)化失敗。若Aeq參數(shù)中某行的所有元素都為零,但Beq參數(shù)中對(duì)應(yīng)的元素不為零,則顯示以下退出信息:Exitingduetoinfeasibility:anallzerorowintheconstraintmatrixdoesnothaveazeroincorrespondingrighthandsizeentry.若x的某一個(gè)元素沒在界內(nèi),則給出以下退出信息:Exitingduetoinfeasibility:objectivef'*xisunboundedbelow.若Aeq參數(shù)的某一行中只有一個(gè)非零值,則x中的相關(guān)值稱為奇異變量。這里,x中該成分的值可以用Aeq和Beq算得。若算得的值與另一個(gè)約束條件相矛盾,則給出以下退出信息:Exitingduetoinfeasibility:Singletonvariablesinequalityconstraintsarenotfeasible.若奇異變量可以求解但其解超出上界或下界,則給出以下退出信息:Exitingduetoinfeasibility:singletonvariablesintheequalityconstraintsarenotwithinbounds.應(yīng)用實(shí)例[[例二]生產(chǎn)決策問題某廠生產(chǎn)甲乙兩種產(chǎn)品,已知制成一噸產(chǎn)品甲需用資源A3噸,資源B4m3;制成一噸產(chǎn)品乙需用資源A2噸,資源B6m3,資源C7個(gè)單位。若一噸產(chǎn)品甲和乙的經(jīng)濟(jì)價(jià)值分別為7萬元和5萬元,三種資源的限制量分別為90噸、200m3和210個(gè)單位,試決定應(yīng)生產(chǎn)這兩種產(chǎn)品各多少噸才能使創(chuàng)造的總經(jīng)濟(jì)價(jià)值最高?令生產(chǎn)產(chǎn)品甲的數(shù)量為x1,生產(chǎn)產(chǎn)品乙的數(shù)量為x2。由題意可以建立下面的模型:該模型中要求目標(biāo)函數(shù)最大化,需要按照Matlab的要求進(jìn)行轉(zhuǎn)換,即目標(biāo)函數(shù)為首先輸入下列系數(shù):f=[-7;-5];A=[324607];b=[90;200;210];lb=zeros(2,1);然后調(diào)用linprog函數(shù):[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb)x=14.000024.0000fval=-218.0000exitflag=1output=iterations:5cgiterations:0algorithm:'lipsol'lambda=ineqlin:[3x1double]eqlin:[0x1double]upper:[2x1double]lower:[2x1double]由上可知,生產(chǎn)甲種產(chǎn)品14噸、乙種產(chǎn)品24噸可使創(chuàng)建的總經(jīng)濟(jì)價(jià)值最高。最高經(jīng)濟(jì)價(jià)值為218萬元。exitflag=1表示過程正常收斂于解x處。磁盤中本問題的M文件為opt22_2.m。[例三]投資問題某單位有一批資金用于四個(gè)工程項(xiàng)目的投資,用于各工程項(xiàng)目時(shí)所得到得凈收益(投入資金的百分比)如下表所示:表9-11工程項(xiàng)目收益表工程項(xiàng)目ABCD收益(%)1510812由于某種原因,決定用于項(xiàng)目A的投資不大于其它各項(xiàng)投資之和;而用于項(xiàng)目B和C的投資要大于項(xiàng)目D的投資。試確定使該單位收益最大的投資分配方案。用x1、x2、x3和x4分別代表用于項(xiàng)目A、B、C和D的投資百分?jǐn)?shù),由于各項(xiàng)目的投資百分?jǐn)?shù)之和必須等于100%,所以x1+x2+x3+x4=1據(jù)題意,可以建立下面的數(shù)學(xué)模型:將它轉(zhuǎn)換為標(biāo)準(zhǔn)形式:然后進(jìn)行求解:首先輸入下列系數(shù):f=[-0.15;-0.1;-0.08;-0.12];A=[1-1-1-10-1-11];b=[0;0];Aeq=[1111];beq=[1];lb=zeros(4,1);然后調(diào)用linprog函數(shù):[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb);x=0.50000.25000.00000.2500fval=-0.1300exitflag=1可見,四個(gè)項(xiàng)目的投資百分?jǐn)?shù)分別為0.50、0.25、0.00和0.25時(shí)可使該單位獲得最大的收益。最大收益為13%。過程正常收斂。磁盤中本問題的M文件為opt22_3.m。[例四]工件加工任務(wù)分配問題某車間有兩臺(tái)機(jī)床甲和乙,可用于加工三種工件。假定這兩臺(tái)機(jī)床的可用臺(tái)時(shí)數(shù)分別為700和800,三種工件的數(shù)量分別為300、500和400,且已知用三種不同機(jī)床加工單位數(shù)量的不同工件所需的臺(tái)時(shí)數(shù)和加工費(fèi)用(如表所示),問怎樣分配機(jī)床的加工任務(wù),才能既滿足加工工件的要求,又使總加工費(fèi)用最低?表9-12機(jī)床加工情況表機(jī)床類型單位工作所需加工臺(tái)時(shí)數(shù)單位工件的加工費(fèi)用可用臺(tái)時(shí)數(shù)工件1工件2工件3工件1工件2工件3甲0.41.11.013910700乙0.51.21.311128800設(shè)在甲機(jī)床上加工工件1、2和3的數(shù)量分別為x1、x2和x3,在乙機(jī)床上加工工件1、2和3的數(shù)量分別為x4、x5和x6。根據(jù)三種工種的數(shù)量限制,有x1+x4=300(對(duì)工件1)x2+x5=500(對(duì)工件2)x3+x6=400(對(duì)工件3)再根據(jù)機(jī)床甲和乙的可用總臺(tái)時(shí)限制,可以得到其它約束條件。以總加工費(fèi)用最少為目標(biāo)函數(shù),組合約束條件,可以得到下面的數(shù)學(xué)模型:首先輸入下列系數(shù):f=[13;9;10;11;12;8];A=[0.41.110000000.51.21.3];b=[700;800];Aeq=[100100010010001001];beq=[300500400];lb=zeros(6,1);然后調(diào)用linprog函數(shù):[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb);x=0.0000500.00000.0000300.00000.0000400.0000fval=1.1000e+004exitflag=1可見,在甲機(jī)床上加工500個(gè)工件2,在乙機(jī)床上加工300個(gè)工件1、加工400個(gè)工件3可在滿足條件的情況下使總加工費(fèi)最小。最小費(fèi)用為11000元。收斂正常。磁盤中本問題的M文件為opt22_4.m。[例五]裁料問題在某建筑工程施工中需要制作10000套鋼筋,每套鋼筋由2.9m、2.1m和1.5m三種不同長(zhǎng)度的鋼筋各一根組成,它們的直徑和材質(zhì)不同。目前在市場(chǎng)上采購(gòu)到的同類鋼筋的長(zhǎng)度每根均為7.4m,問應(yīng)購(gòu)進(jìn)多少根7.4m長(zhǎng)的鋼筋才能滿足工程的需要?首先分析共有多少種不同的套裁方法,該問題的可能材料方案如表9-13所示。表9-13材料方案表下料長(zhǎng)度(m)裁料方案編號(hào)i123456782.9211100002.1021032101.510130234料頭長(zhǎng)度(m)0.10.30.901.10.20.81.4設(shè)以xi(i=1,2,…,8)表示按第i種裁料方案下料的原材料數(shù)量,則可得該問題的數(shù)學(xué)模型為:首先輸入下列系數(shù):f=[1;1;1;1;1;1;1;1];Aeq=[200000000210321010130234];beq=[100001000010000];lb=zeros(8,1);然后調(diào)用linprog函數(shù):[x,fval,exitflag,output,lambda]=linprog(f,[],[],Aeq,beq,lb);x=1.0e+003*5.00000.00000.00000.00001.66672.50000.00000.0000fval=9.1667e+003所以最節(jié)省的情況需要9167根7.4m長(zhǎng)的鋼筋,其中第一種方案使用5000根,第五種方案使用1667根,第六種方案使用2500根。磁盤中本問題的M文件為opt22_5.m。[例六]工作人員計(jì)劃安排問題某晝夜服務(wù)的公共交通系統(tǒng)每天各時(shí)間段(每4小時(shí)為一個(gè)時(shí)間段)所需的值班人數(shù)如表所示,這些值班人員在某一時(shí)段開始上班后要連續(xù)工作8個(gè)小時(shí)(包括輪流用膳時(shí)間),問該公交系統(tǒng)至少需要多少名工作人員才能滿足值班的需要?表9-14各時(shí)段所需值班人數(shù)表班次時(shí)間段所需人數(shù)16:00—10:0060210:00—14:0070314:00—18:0060418:00—22:0050522:00—2:002062:00—6:0030設(shè)xi為第i個(gè)時(shí)段開始上班的人員數(shù),據(jù)題意建立下面的數(shù)學(xué)模型:需要對(duì)前面六個(gè)約束條件進(jìn)行形式變換,是不等式為非正不等式。只需要在不等式兩側(cè)取負(fù)即可。首先輸入下列系數(shù):f=[1;1;1;1;1;1];A=[-10000-1-1-100000-1-100000-1-100000-1-100000-1-1];b=[-60;-70;-60;-50;-20;-30];lb=zeros(6,1);然后調(diào)用linprog函數(shù):[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);x=41.917628.082435.049414.95069.860620.1394fval=150.0000exitflag=1可見,只要六個(gè)時(shí)段分別安排42人、28人、35人、15人、10人和20人就可以滿足值班的需要。共計(jì)150人。計(jì)算收斂。磁盤中本問題的M文件為opt22_6.m。[例七]廠址選擇問題考慮A、B、C三地,每地都出產(chǎn)一定數(shù)量的原料,也消耗一定數(shù)量的產(chǎn)品(見表9-15)。已知制成每噸產(chǎn)品需3噸原料,各地之間的距離為:A-B:150km,A-C:100km,B-C:200km。假定每萬噸原料運(yùn)輸1km的運(yùn)價(jià)是5000元,每萬噸產(chǎn)品運(yùn)輸1km的運(yùn)價(jià)是6000元。由于地區(qū)條件的差異,在不同地點(diǎn)設(shè)廠的生產(chǎn)費(fèi)用也不同。問究竟在哪些地方設(shè)廠,規(guī)模多大,才能使總費(fèi)用最小?另外,由于其它條件限制,在B處建廠的規(guī)模(生產(chǎn)的產(chǎn)品數(shù)量)不能超過5萬噸。表9-15A、B、C三地出產(chǎn)原料、消耗產(chǎn)品情況表地點(diǎn)年產(chǎn)原料(萬噸)年銷產(chǎn)品(萬噸)生產(chǎn)費(fèi)用(萬元/萬噸)A207150B1613120C240100令xij為由i地運(yùn)到j(luò)地的原料數(shù)量(萬噸),yij為由i地運(yùn)往j地的產(chǎn)品數(shù)量(萬噸),i,j=1,2,3(分別對(duì)應(yīng)A、B、C三地)。根據(jù)題意,可以建立問題的數(shù)學(xué)模型(其中目標(biāo)函數(shù)包括原材料運(yùn)輸費(fèi)、產(chǎn)品運(yùn)輸費(fèi)和生產(chǎn)費(fèi)):首先輸入下列系數(shù):f=[75;75;50;50;100;100;150;240;210;120;160;220];A=[1-11-100330000-11001-100330000-11-11000033000000001100];b=[20;16;24;5];Aeq=[000000101010000000010101];beq=[7;13];lb=zeros(12,1);然后調(diào)用linprog函數(shù):[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb);x=0.00001.00000.00000.00000.00000.00007.00000.00000.00005.00000.00008.0000fval=3.4850e+003exitflag=1要使總費(fèi)用最小,需要B地向A地運(yùn)送1萬噸,A、B、C三地的建廠規(guī)模分別為7萬噸、5萬噸和8萬噸。最小總費(fèi)用為3485元。磁盤中本問題的M文件為opt22_7.m。[例八]確定職工編制問題某廠每日八小時(shí)的產(chǎn)量不低于1800件。為了進(jìn)行質(zhì)量控制,計(jì)劃聘請(qǐng)兩種不同水平的檢驗(yàn)員。一級(jí)檢驗(yàn)員的標(biāo)準(zhǔn)為:速度25件/小時(shí),正確率98%,計(jì)時(shí)工資4元/小時(shí);二級(jí)檢驗(yàn)員的標(biāo)準(zhǔn)為:速度15件/小時(shí),正確率95%,計(jì)時(shí)工資3元/小時(shí)。檢驗(yàn)員每錯(cuò)檢一次,工廠要損失2元?,F(xiàn)有可供廠方聘請(qǐng)的檢驗(yàn)員人數(shù)為一級(jí)8人和二級(jí)10人。為使總檢驗(yàn)費(fèi)用最省,該工廠應(yīng)聘一級(jí)、二級(jí)檢驗(yàn)員各多少名?設(shè)需要一級(jí)和二級(jí)檢驗(yàn)員的人數(shù)分別為x1名和x2名,由題意可以建立下面的模型:利用Matlab進(jìn)行求解之前需要將第三個(gè)約束條件進(jìn)行轉(zhuǎn)換,兩邊取負(fù)以后得到首先輸入下列系數(shù):f=[40;36];A=[1001-5-3];b=[8;10;-45];lb=zeros(2,1);然后調(diào)用linprog函數(shù):[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);x=8.00001.6667fval=380.0000exitflag=1可見,招聘一級(jí)檢驗(yàn)員8名、二級(jí)檢驗(yàn)員2名可使總檢驗(yàn)費(fèi)最省,約為380.00元。計(jì)算收斂。磁盤中本問題的M文件為opt22_8.m。[例九]生產(chǎn)計(jì)劃的最優(yōu)化問題某工廠生產(chǎn)A和B兩種產(chǎn)品,它們需要經(jīng)過三種設(shè)備的加工,其工時(shí)如表9-16所示。設(shè)備一、二和三每天可使用的時(shí)間分別不超過12、10和8小時(shí)。產(chǎn)品A和B的利潤(rùn)隨市場(chǎng)的需求有所波動(dòng),如果預(yù)測(cè)未來某個(gè)時(shí)期內(nèi)A和B的利潤(rùn)分別為4和3千元/噸,問在那個(gè)時(shí)期內(nèi),每天應(yīng)安排產(chǎn)品A、B各多少噸,才能使工廠獲利最大?表9-16生產(chǎn)產(chǎn)品工時(shí)表產(chǎn)品設(shè)備一設(shè)備二設(shè)備三A(小時(shí)/噸)334B(小時(shí)/噸)432設(shè)備每天最多可工作時(shí)數(shù)(小時(shí))12108設(shè)每天應(yīng)安排生產(chǎn)產(chǎn)品A和B分別為x1噸和x2噸,由題意建立下面的數(shù)學(xué)模型:首先轉(zhuǎn)換目標(biāo)函數(shù)為標(biāo)準(zhǔn)形式:輸入下列系數(shù):f=[-4;-3];A=[343342];b=[12;10;8];lb=zeros(2,1);然后調(diào)用linprog函數(shù):[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);x=0.80002.4000fval=-10.4000所以,每天生產(chǎn)A產(chǎn)品0.80噸、B產(chǎn)品2.40噸可使工廠獲得最大利潤(rùn)。磁盤中本問題的M文件為opt22_9.m。9.2.3無約束非線性規(guī)劃問題基本數(shù)學(xué)原理無約束最優(yōu)化問題在實(shí)際應(yīng)用中也比較常見,如工程中常見的參數(shù)反演問題。另外,許多有約束最優(yōu)化問題可以轉(zhuǎn)化為無約束最優(yōu)化問題進(jìn)行求解。求解無約束最優(yōu)化問題的方法主要有兩類,即直接搜索法(Searchmethod)和梯度法(Gradientmethod)。直接搜索法適用于目標(biāo)函數(shù)高度非線性,沒有導(dǎo)數(shù)或?qū)?shù)很難計(jì)算的情況,由于實(shí)際工程中很多問題都是非線性的,直接搜索法不失為一種有效的解決辦法。常用的直接搜索法為單純形法,此外還有Hooke-Jeeves搜索法、Pavell共軛方向法等,其缺點(diǎn)是收斂速度慢。在函數(shù)的導(dǎo)數(shù)可求的情況下,梯度法是一種更優(yōu)的方法,該法利用函數(shù)的梯度(一階導(dǎo)數(shù))和Hessian矩陣(二階導(dǎo)數(shù))構(gòu)造算法,可以獲得更快的收斂速度。函數(shù)f(x)的負(fù)梯度方向-▽f(x)即反映了函數(shù)的最大下降方向。當(dāng)搜索方向取為負(fù)梯度方向時(shí)稱為最速下降法。當(dāng)需要最小化的函數(shù)有一狹長(zhǎng)的谷形值域時(shí),該法的效率很低,如Rosenbrock函數(shù)f(x)=100(x1-x22)2+(1-x1)2它的最小值解為x=[1,1],最小值為f(x)=0。下圖是該函數(shù)的等值線圖,圖中還顯示了從初值[-1.9,2]出發(fā)向最小值前進(jìn)的路徑。迭代1000次以后終止,此時(shí)距最小值仍有相當(dāng)長(zhǎng)的距離。圖中的黑色區(qū)域是該法在谷的兩側(cè)不斷進(jìn)行“之”字形搜索形成的。圖9-1香蕉函數(shù)的等值線圖及最速下降法的搜索路徑這種類型的函數(shù)又稱為香蕉函數(shù)。常見的梯度法有最速下降法、Newton法、Marquart法、共軛梯度法和擬牛頓法(Quasi-Newtonmethod)等。在所有這些方法中,用得最多的是擬牛頓法,這些方法在每次迭代過程中建立曲率信息,構(gòu)成下式得二次模型問題:其中,Hessian矩陣H為一正定對(duì)稱矩陣,c為常數(shù)向量,b為常數(shù)。對(duì)x求偏導(dǎo)數(shù)可以獲得問題的最優(yōu)解解x*可寫作:擬牛頓法包括兩個(gè)階段,即●
確定搜索方向●
一維搜索階段1.Hessian矩陣的更新牛頓法由于需要多次計(jì)算Hessian矩陣,計(jì)算量很大,而擬牛頓法則通過構(gòu)建一個(gè)Hessian矩陣的近似矩陣來避開這個(gè)問題。在優(yōu)化工具箱中,通過將options參數(shù)HessUpdate設(shè)置為BFGS或DFP來決定搜索方向。當(dāng)Hessian矩陣H始終保持正定時(shí),搜索方向就總是保持為下降方向。Hessian矩陣的方法很多,對(duì)于求解一般問題,Broyden,Hetcher,Goldfarb和Shanno的方法(簡(jiǎn)稱BFGS法)是最有效的。BFGS法的計(jì)算公式為:其中作為初值,H0可以設(shè)為任意對(duì)稱正定矩陣。另一個(gè)有名的構(gòu)造近似Hessian矩陣的方法是DFP(Daridon-Fletcher-Powell)法。該法的計(jì)算公式與BFGS法的形式一樣,只是qk替換為sk。梯度信息可以是用解析的方法得到,也可以是用有限差分的方法通過求偏導(dǎo)數(shù)得到。在每一個(gè)主要的迭代過程中,在下式所示的方向上進(jìn)行一維搜索:圖9-2演示了用擬牛頓法時(shí)Rosenbrock函數(shù)的求解路徑。可見,利用該法,只需要140次迭代就可以達(dá)到最小值解,比前面利用最速下降法要快得多。圖9-2擬牛頓法的搜索路徑2.一維搜索工具箱中有兩套方案進(jìn)行一維搜索。當(dāng)梯度值可以直接得到時(shí),用三次插值的方法進(jìn)行一維搜索,當(dāng)梯度值不能直接得到時(shí),采用二次、三次混合插值法。相關(guān)函數(shù)介紹fminunc函數(shù)功能:求多變量無約束函數(shù)的最小值。數(shù)學(xué)模型:其中,x為一向量,f(x)為一函數(shù),返回標(biāo)量。語法格式:x=fminunc(fun,x0)x=fminunc(fun,x0,options)x=fminunc(fun,x0,options,P1,P2,...)[x,fval]=fminunc(...)[x,fval,exitflag]=fminunc(...)[x,fval,exitflag,output]=fminunc(...)[x,fval,exitflag,output,grad]=fminunc(...)[x,fval,exitflag,output,grad,hessian]=fminunc(...)描述:fminunc給定初值,求多變量標(biāo)量函數(shù)的最小值。常用于無約束非線性最優(yōu)化問題。x=fminunc(fun,x0)給定初值x0,求fun函數(shù)的局部極小點(diǎn)x。x0可以是標(biāo)量、向量或矩陣。x=fminunc(fun,x0,options)用options參數(shù)中指定的優(yōu)化參數(shù)進(jìn)行最小化。x=fminunc(fun,x0,options,P1,P2,...)將問題參數(shù)p1、p2等直接輸給目標(biāo)函數(shù)fun,將options參數(shù)設(shè)置為空矩陣,作為options參數(shù)的缺省值。[x,fval]=fminunc(...)將解x處目標(biāo)函數(shù)的值返回到fval參數(shù)中。[x,fval,exitflag]=fminunc(...)返回exitflag值,描述函數(shù)的輸出條件。[x,fval,exitflag,output]=fminunc(...)返回包含優(yōu)化信息的結(jié)構(gòu)輸出。[x,fval,exitflag,output,grad]=fminunc(...)將解x處fun函數(shù)的梯度值返回到grad參數(shù)中。[x,fval,exitflag,output,grad,hessian]=fminunc(...)將解x處目標(biāo)函數(shù)的Hessian矩陣信息返回到hessian參數(shù)中。變量:表9-7中為輸入變量,表9-8中為輸出變量的描述。表9-17輸出變量描述表變量描述fun為目標(biāo)函數(shù)。需要最小化的目標(biāo)函數(shù)。fun函數(shù)需要輸入標(biāo)量參數(shù)x,返回x處的目標(biāo)函數(shù)標(biāo)量值f??梢詫un函數(shù)指定為命令行,如x=fminbnd(inline('sin(x*x)'),x0)同樣,fun參數(shù)可以是一個(gè)包含函數(shù)名的字符串。對(duì)應(yīng)的函數(shù)可以是M文件、內(nèi)部函數(shù)或MEX文件。若fun='myfun',則M文件函數(shù)myfun.m必須有下面的形式:functionf=myfun(x)f=...%計(jì)算x處的函數(shù)值。若fun函數(shù)的梯度可以算得,且options.GradObj設(shè)為'on'(用下式設(shè)定),options=optimset('GradObj','on')則fun函數(shù)必須返回解x處的梯度向量g到第二個(gè)輸出變量中去。注意,當(dāng)被調(diào)用的fun函數(shù)只需要一個(gè)輸出變量時(shí)(如算法只需要目標(biāo)函數(shù)的值而不需要其梯度值時(shí)),可以通過核對(duì)nargout的值來避免計(jì)算梯度值。function[f,g]=myfun(x)f=...%計(jì)算x處得函數(shù)值。ifnargout>1%調(diào)用fun函數(shù)并要求有兩個(gè)輸出變量。g=...%計(jì)算x處的梯度值。end若Hessian矩陣也可以求得,并且options.Hessian設(shè)為'on',即,options=optimset('Hessian','on')則fun函數(shù)必須返回解x處的Hessian對(duì)稱矩陣H到第三個(gè)輸出變量中去。注意,當(dāng)被調(diào)用的fun函數(shù)只需要一個(gè)或兩個(gè)輸出變量時(shí)(如算法只需要目標(biāo)函數(shù)的值f和梯度值g而不需要Hessian矩陣H時(shí)),可以通過核對(duì)nargout的值來避免計(jì)算Hessian矩陣function[f,g,H]=myfun(x)f=...%計(jì)算x處得函數(shù)值。ifnargout>1%調(diào)用fun函數(shù)并要求有兩個(gè)輸出變量。g=...%計(jì)算x處的梯度值。ifnargout>2H=...%計(jì)算x處的Hessian矩陣。endoptions優(yōu)化參數(shù)選項(xiàng)??梢酝ㄟ^optimset函數(shù)設(shè)置或改變這些參數(shù)。其中有的參數(shù)適用于所有的優(yōu)化算法,有的則只適用于大型優(yōu)化問題,另外一些則只適用于中型問題。首先描述適用于大型問題的選項(xiàng)。這僅僅是一個(gè)參考,因?yàn)槭褂么笮蛦栴}算法有一些條件。對(duì)于fminunc函數(shù)來說,必須提供梯度信息。LargeScale–當(dāng)設(shè)為'on'時(shí)使用大型算法,若設(shè)為'off'則使用中型問題的算法。適用于大型和中型算法的參數(shù):Diagnostics–打印最小化函數(shù)的診斷信息。Display–顯示水平。選擇'off',不顯示輸出;選擇'iter',顯示每一步迭代過程的輸出;選擇'final',顯示最終結(jié)果。打印最小化函數(shù)的診斷信息。GradObj–用戶定義的目標(biāo)函數(shù)的梯度。對(duì)于大型問題此參數(shù)是必選的,對(duì)于中型問題則是可選項(xiàng)。MaxFunEvals–函數(shù)評(píng)價(jià)的最大次數(shù)。MaxIter–最大允許迭代次數(shù)。TolFun–函數(shù)值的終止容限。TolX–x處的終止容限。只用于大型算法的參數(shù):Hessian–用戶定義的目標(biāo)函數(shù)的Hessian矩陣。HessPattern–用于有限差分的Hessian矩陣的稀疏形式。若不方便求fun函數(shù)的稀疏Hessian矩陣H,可以通過用梯度的有限差分獲得的H的稀疏結(jié)構(gòu)(如非零值的位置等)來得到近似的Hessian矩陣H。若連矩陣的稀疏結(jié)構(gòu)都不知道,則可以將HessPattern設(shè)為密集矩陣,在每一次迭代過程中,都將進(jìn)行密集矩陣的有限差分近似(這是缺省設(shè)置)。這將非常麻煩,所以花一些力氣得到Hessian矩陣的稀疏結(jié)構(gòu)還是值得的。MaxPCGIter–PCG迭代的最大次數(shù)。PrecondBandWidth–PCG前處理的上帶寬,缺省時(shí)為零。對(duì)于有些問題,增加帶寬可以減少迭代次數(shù)。TolPCG–PCG迭代的終止容限。TypicalX–典型x值。只用于中型算法的參數(shù):DerivativeCheck–對(duì)用戶提供的導(dǎo)數(shù)和有限差分求出的導(dǎo)數(shù)進(jìn)行對(duì)比。DiffMaxChange–變量有限差分梯度的最大變化。DiffMinChange-變量有限差分梯度的最小變化。LineSearchType–一維搜索算法的選擇。exitflag描述退出條件:>0表示目標(biāo)函數(shù)收斂于解x處。0表示已經(jīng)達(dá)到函數(shù)評(píng)價(jià)或迭代的最大次數(shù)。<0表示目標(biāo)函數(shù)不收斂。output該參數(shù)包含下列優(yōu)化信息:output.iterations–迭代次數(shù)。output.algorithm–所采用的算法。output.funcCount–函數(shù)評(píng)價(jià)次數(shù)。output.cgiterations–PCG迭代次數(shù)(只適用于大型規(guī)劃問題)。output.stepsize–最終步長(zhǎng)的大?。ㄖ挥糜谥行蛦栴})。output.firstorderopt–一階優(yōu)化的度量:解x處梯度的范數(shù)。注意:1.對(duì)于求解平方和的問題,fminunc函數(shù)不是最好的選擇,用lsqnonlin函數(shù)效果更佳。2.使用大型方法時(shí),必須通過將options.GradObj設(shè)置為'on'來提供梯度信息,否則將給出警告信息。算法:大型優(yōu)化算法若用戶在fun函數(shù)中提供梯度信息,則缺省時(shí)函數(shù)將選擇大型優(yōu)化算法,該算法是基于內(nèi)部映射牛頓法的子空間置信域法,理論描述可參見文獻(xiàn)[8],[9]。計(jì)算中的每一次迭代涉及到用PCG法求解大型線性系統(tǒng)得到的近似解。中型優(yōu)化算法此時(shí)fminunc函數(shù)的參數(shù)options.LargeScale設(shè)置為'off'。該算法采用的是基于二次和三次混合插值一維搜索法的BFGS擬牛頓法。該法通過BFGS公式來更新Hessian矩陣。通過將HessUpdate參數(shù)設(shè)置為'dfp',可以用DFP公式來求得Hessian矩陣逆的近似。通過將HessUpdate參數(shù)設(shè)置為'steepdesc',可以用最速下降法來更新Hessian矩陣。但一般不建議使用最速下降法。缺省時(shí)的一維搜索算法,當(dāng)options.LineSearchType設(shè)置為'quadcubic'時(shí),將采用二次和三次混合插值法。將options.LineSearchType設(shè)置為'cubicpoly'時(shí),將采用三次插值法。第二種方法需要的目標(biāo)函數(shù)計(jì)算次數(shù)更少,但梯度的計(jì)算次數(shù)更多。這樣,如果提供了梯度信息,或者能較容易地算得,則三次插值法是更佳的選擇。局限性:1.
目標(biāo)函數(shù)必須是連續(xù)的。fminunc函數(shù)有時(shí)會(huì)給出局部最優(yōu)解。2.
fminunc函數(shù)只對(duì)實(shí)數(shù)進(jìn)行優(yōu)化,即x必須為實(shí)數(shù),而且f(x)必須返回實(shí)數(shù)。當(dāng)x為復(fù)數(shù)時(shí),必須將它分解為實(shí)部和虛部。3.
在使用大型算法時(shí),用戶必須在fun函數(shù)中提供梯度(options參數(shù)中GradObj屬性必須設(shè)置為'on')。4.
目前,若在fun函數(shù)中提供了解析梯度,則options參數(shù)DerivativeCheck不能用于大型算法以比較解析梯度和有限差分梯度。通過將options參數(shù)的MaxIter屬性設(shè)置為0來用中型方法核對(duì)導(dǎo)數(shù)。然后重新用大型方法求解問題。參見:fminsearch,optimset,inlinefminsearch函數(shù)功能:求解多變量無約束函數(shù)的最小值。數(shù)學(xué)模型:其中x為向量,f(x)為函數(shù),返回標(biāo)量。語法:x=fminsearch(fun,x0)x=fminsearch(fun,x0,options)x=fminsearch(fun,x0,options,P1,P2,...)[x,fval]=fminsearch(...)[x,fval,exitflag]=fminsearch(...)[x,fval,exitflag,output]=fminsearch(...)描述:fminsearch求解多變量無約束函數(shù)的最小值。該函數(shù)常用于無約束非線性最優(yōu)化問題。x=fminsearch(fun,x0)初值為x0,求fun函數(shù)的局部極小點(diǎn)x。x0可以是標(biāo)量、向量或矩陣。x=fminsearch(fun,x0,options)用options參數(shù)指定的優(yōu)化參數(shù)進(jìn)行最小化。x=fminsearch(fun,x0,options,P1,P2,...)將問題參數(shù)p1、p2等直接輸給目標(biāo)函數(shù)fun,將options參數(shù)設(shè)置為空矩陣,作為options參數(shù)的缺省值。[x,fval]=fminsearch(...)將x處的目標(biāo)函數(shù)值返回到fval參數(shù)中。[x,fval,exitflag]=fminsearch(...)返回exitflag值,描述函數(shù)的退出條件。[x,fval,exitflag,output]=fminsearch(...)返回包含優(yōu)化信息的輸出參數(shù)output。變量:各變量的意義同前。算法:fminsearch使用單純形法進(jìn)行計(jì)算。對(duì)于求解二次以上的問題,fminsearch函數(shù)比fminunc函數(shù)有效。但是,當(dāng)問題為高度非線性時(shí),fminsearch函數(shù)更具穩(wěn)健性。局限性:1.
應(yīng)用fminsearch函數(shù)可能會(huì)得到局部最優(yōu)解。2.
fminsearch函數(shù)只對(duì)實(shí)數(shù)進(jìn)行最小化,即x必須由實(shí)數(shù)組成,f(x)函數(shù)必須返回實(shí)數(shù)。如果x時(shí)復(fù)數(shù),必須將它分為實(shí)數(shù)部和虛數(shù)部?jī)刹糠?。注?fminsearch函數(shù)不適合求解平方和問題,用lsqnonlin函數(shù)更好一些。參見:fminbnd,fminunc,optimset,inline9.2.4二次規(guī)劃問題基本數(shù)學(xué)原理如果某非線性規(guī)劃的目標(biāo)函數(shù)為自變量的二次函數(shù),約束條件全是線性函數(shù),就稱這種規(guī)劃為二次規(guī)劃。其數(shù)學(xué)模型為:其中,H,A,和Aeq為矩陣,f,b,beq,lb,ub,和x為向量。相關(guān)函數(shù)介紹quadprog函數(shù)功能:求解二次規(guī)劃問題。語法:x=quadprog(H,f,A,b)x=quadprog(H,f,A,b,Aeq,beq)x=quadprog(H,f,A,b,Aeq,beq,lb,ub)x=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)x=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)[x,fval]=quadprog(...)[x,fval,exitflag]=quadprog(...)[x,fval,exitflag,output]=quadprog(...)[x,fval,exitflag,output,lambda]=quadprog(...)描述:x=quadprog(H,f,A,b)返回向量x,最小化函數(shù)1/2*x'*H*x+f'*x,其約束條件為A*x<=b。x=quadprog(H,f,A,b,Aeq,beq)仍然求解上面的問題,但添加了等式約束條件Aeq*x=beq。x=quadprog(H,f,A,b,lb,ub)定義設(shè)計(jì)變量的下界lb和上界ub,使得lb<=x<=ub。x=quadprog(H,f,A,b,lb,ub,x0)同上,并設(shè)置初值x0。x=quadprog(H,f,A,b,lb,ub,x0,options)根據(jù)options參數(shù)指定的優(yōu)化參數(shù)進(jìn)行最小化。[x,fval]=quadprog(...)返回解x處的目標(biāo)函數(shù)值fval=0.5*x'*H*x+f'*x。[x,fval,exitflag]=quadprog(...)返回exitflag參數(shù),描述計(jì)算的退出條件。[x,fval,exitflag,output]=quadprog(...)返回包含優(yōu)化信息的結(jié)構(gòu)輸出output。[x,fval,exitflag,output,lambda]=quadprog(...)返回解x處包含拉格朗日乘子的lambda參數(shù)。變量:各變量的意義同前。注意:1.
一般地,如果問題不是嚴(yán)格凸性的,用quadprog函數(shù)得到的可能是局部最優(yōu)解。2.
如果用Aeq和Beq明確地指定等式約束,而不是用lb和ub指定,則可以得到更好的數(shù)值解。3.
若x的組分沒有上限或下限,則quadprog函數(shù)希望將對(duì)應(yīng)的組分設(shè)置為Inf(對(duì)于上限)或-Inf(對(duì)于下限),而不是強(qiáng)制性地給予上限一個(gè)很大的數(shù)或給予下限一個(gè)很小的負(fù)數(shù)。4.
對(duì)于大型優(yōu)化問題,若沒有提供初值x0,或x0不是嚴(yán)格可行,則quadprog函數(shù)會(huì)選擇一個(gè)新的初始可行點(diǎn)。5.
若為等式約束,且quadprog函數(shù)發(fā)現(xiàn)負(fù)曲度(negativecurvature),則優(yōu)化過程終止,exitflag的值等于-1。算法:大型優(yōu)化算法當(dāng)優(yōu)化問題只有上界和下界,而沒有線性不等式或等式約束,則缺省算法為大型算法。或者,如果優(yōu)化問題中只有線性等式,而沒有上界和下界或線性不等式時(shí),缺省算法也是大型算法。本法是基于內(nèi)部映射牛頓法(interior-reflectiveNewtonmethod)的子空間置信域法(subspacetrust-region)。該法的具體算法請(qǐng)參見文獻(xiàn)[2]。該法的每一次迭代都與用PCG法求解大型線性系統(tǒng)得到的近似解有關(guān)。中型優(yōu)化算法quadprog函數(shù)使用活動(dòng)集法,它也是一種投影法,首先通過求解線性規(guī)劃問題來獲得初始可行解。診斷:1.
大型優(yōu)化問題大型優(yōu)化問題不允許約束上限和下限相等,如若lb(2)==ub(2),則給出以下出錯(cuò)信息:Equalupperandlowerboundsnotpermittedinthislarge-scalemethod.Useequalityconstraintsandthemedium-scalemethodinstead.若優(yōu)化模型中只有等式約束,仍然可以使用大型算法;如果模型中既有等式約束又有邊界約束,則必須使用中型方法。2.中型優(yōu)化問題當(dāng)解不可行時(shí),quadprog函數(shù)給出以下警告:Warning:Theconstraintsareoverlystringent;thereisnofeasiblesolution.這里,quadprog函數(shù)生成使約束矛盾最壞程度最小的結(jié)果。當(dāng)?shù)仁郊s束不連續(xù)時(shí),給出下面的警告信息:Warning:Theequalityconstraintsareoverlystringent;thereisnofeasiblesolution.當(dāng)Hessian矩陣為負(fù)半定時(shí),生成無邊界解,給出下面的警告信息:Warning:Thesolutionisunboundedandatinfinity;theconstraintsarenotrestrictiveenough.這里,quadprog函數(shù)返回滿足約束條件的x值。局限性:1.
此時(shí),顯示水平只能選擇'off'和'final',迭代參數(shù)'iter'不可用。2.
當(dāng)問題不定或負(fù)定時(shí),常常無解(此時(shí)exitflag參數(shù)給出一個(gè)負(fù)值,表示優(yōu)化過程不收斂)。若正定解存在,則quadprog函數(shù)可能只給出局部極小值,因?yàn)閱栴}可能時(shí)非凸的。3.
對(duì)于大型問題,不能依靠線性等式,因?yàn)锳eq必須是行滿秩的,即Aeq的行數(shù)必須不多于列數(shù)。若不滿足要求,必須調(diào)用中型算法進(jìn)行計(jì)算。應(yīng)用實(shí)例[例一]求解下面的最優(yōu)化問題:目標(biāo)函數(shù)約束條件首先,目標(biāo)函數(shù)可以寫成下面的矩陣形式:其中輸入下列系數(shù)矩陣:H=[1-1;-12]f=[-2;-6]A=[11;-12;21]b=[2;2;3]lb=zeros(2,1)然后調(diào)用二次規(guī)劃函數(shù)quadratic:[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,[],[],lb)得問題的解x=0.66671.3333fval=-8.2222exitflag=1output=iterations:3algorithm:'medium-scale:active-set'firstorderopt:[]cgiterations:[]lambda.ineqlinans=3.11110.44440lambda.lowerans=00磁盤中本問題的M文件為opt24_1.m。9.2.5有約束最小化基本數(shù)學(xué)原理在有約束最優(yōu)化問題中,通常要將該問題轉(zhuǎn)換為更簡(jiǎn)單的子問題,這些子問題可以求解并作為迭代過程的基礎(chǔ)。早期的方法通常是通過構(gòu)造懲罰函數(shù)等來將有約束的最優(yōu)化問題轉(zhuǎn)換為無約束最優(yōu)化問題進(jìn)行求解?,F(xiàn)在,這些方法已經(jīng)被更有效的基于K-T(Kuhn-Tucker)方程解的方法所取代。K-T方程是有約束最優(yōu)化問題求解的必要條件。假設(shè)有所謂的Convex規(guī)劃問題,f(x)和Gi(x),i=1,2,…,m為Convex函數(shù),則K-T方程對(duì)于求得全局極小點(diǎn)是必要的,也是充分的。對(duì)于規(guī)劃問題其中,x是設(shè)計(jì)參數(shù)向量,(x∈Rn),f(x)為目標(biāo)函數(shù),返回標(biāo)量值,向量函數(shù)G(x)返回等式約束和不等式約束在x處的值。它的K-T方程可表達(dá)為:(*)i=1,…,mi=me+1,…,m其中第一行描述了目標(biāo)函數(shù)和約束條件在解處梯度的取消。由于梯度取消,需要用拉格朗日乘子λi(i=1,2,…,m)來平衡目標(biāo)函數(shù)與約束梯度間大小的差異。K-T方程的解形成了許多非線性規(guī)劃算法的基礎(chǔ),這些算法直接計(jì)算拉格朗日乘子,通過用擬牛頓法更新過程,給K-T方程積累二階信息,可以保證有約束擬牛頓法的超線性收斂。這些方法稱為序列二次規(guī)劃法(SQP),因?yàn)樵诿恳淮沃饕牡卸记蠼庖淮味我?guī)劃問題。對(duì)于給定的規(guī)劃問題,序列二次規(guī)劃(SQP)的主要的思路是形成基于拉格朗日函數(shù)二次近似的二次規(guī)劃子問題,即這里,通過假設(shè)約束條件為不等式約束來使(*)式得到了簡(jiǎn)化,通過非線性有約束問題線性化來獲得二次規(guī)劃子問題。二次規(guī)劃子問題可表達(dá)為i=1,…,mei=me+1,…,m該子問題可以用任意一種二次規(guī)劃算法求解,求得的解可以用來形成新的迭代公式xk+1=xk+αkdk。用SQP法求解非線性有約束問題時(shí)的迭代次數(shù)常比用解無約束問題時(shí)的少,因?yàn)樵谒阉鲄^(qū)域內(nèi),SQP方法可以獲得最佳的搜索方向和步長(zhǎng)信息。給Rosenbrock函數(shù)添加非線性不等式約束g(x)經(jīng)過96次迭代得到問題的解:x=[0.9072,0.8288],初值為x=[-1.9,2],無約束問題則需要140次迭代。圖9-3是搜索路徑圖。圖9-3SQP法的搜索路徑MATLAB中SQP法的實(shí)現(xiàn)分三步,即●
拉格朗日函數(shù)Hessian矩陣的更新;●
二次規(guī)劃問題求解;●
一維搜索和目標(biāo)函數(shù)的計(jì)算(一)、Hessian矩陣的更新在每一次主要迭代過程中,都用BFGS法計(jì)算拉格朗日函數(shù)的Hessian矩陣的擬牛頓近似矩陣。更新公式為:其中:上式中,λi(i=1,2,…,m)為拉格朗日乘子的估計(jì)。(二)、二次規(guī)劃求解SQP法的每一次主要迭代過程中都要求一次二次規(guī)劃問題,形式如下:i=1,…,mei=me+1,…,m求解過程分兩步,第一步涉及可行點(diǎn)(若存在)的計(jì)算,第二步為可行點(diǎn)至解的迭代序列。在第一步中,需要有可行點(diǎn)作為初值,若當(dāng)前點(diǎn)不可行,則通過求解下列線性規(guī)劃問題可以得到一個(gè)可行點(diǎn):i=1,…,mei=me+1,…,m其中,Ai為矩陣A的第i行。(三)、一維搜索和目標(biāo)函數(shù)的計(jì)算二次規(guī)劃子問題的解生成一個(gè)向量dk,它形成一個(gè)新的迭代公式:αk為步長(zhǎng)參數(shù)。目標(biāo)函數(shù)的形式如下:其中,i=1,…,m相關(guān)函數(shù)介紹fmincon函數(shù)功能:求多變量有約束非線性函數(shù)的最小值。數(shù)學(xué)模型:其中,x,b,beq,lb,和ub為向量,A和Aeq為矩陣,c(x)和ceq(x)為函數(shù),返回標(biāo)量。f(x),c(x),和ceq(x)可以是非線性函數(shù)。語法: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=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,op
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024簡(jiǎn)單樹木買賣合同
- 2025年度老舊小區(qū)外墻翻新工程承包合同4篇
- 2025版高性能路牙維修勞務(wù)分包合同4篇
- 心理健康教育在辦公環(huán)境的應(yīng)用與推廣
- 2025年度智能設(shè)備制造承攬合同4篇
- 科技實(shí)驗(yàn)室的安全管理與綠色發(fā)展
- 2025年度智慧校園建設(shè)項(xiàng)目承包工程合同范本4篇
- 2025年度綠色環(huán)保建材采購(gòu)合同范本3篇
- 2025年洗車場(chǎng)場(chǎng)地租賃合同書(含年度清潔維護(hù))3篇
- 個(gè)性化汽車貸款擔(dān)保合同范本2024版一
- 《中華民族多元一體格局》
- 2023年四川省綿陽市中考數(shù)學(xué)試卷
- 南安市第三次全國(guó)文物普查不可移動(dòng)文物-各鄉(xiāng)鎮(zhèn)、街道分布情況登記清單(表五)
- 選煤廠安全知識(shí)培訓(xùn)課件
- 項(xiàng)目前期選址分析報(bào)告
- 急性肺栓塞搶救流程
- 《形象價(jià)值百萬》課件
- 紅色文化教育國(guó)內(nèi)外研究現(xiàn)狀范文十
- 中醫(yī)基礎(chǔ)理論-肝
- 小學(xué)外來人員出入校門登記表
- 《土地利用規(guī)劃學(xué)》完整課件
評(píng)論
0/150
提交評(píng)論