對(duì)于0-1分?jǐn)?shù)規(guī)劃的Dinkelbach算法的分析
武鋼三中 吳豪[譯]
摘要:
0-1分?jǐn)?shù)規(guī)劃問(wèn)題是指求出解集{xi|xi=0或1}使目標(biāo)(c1x1+c2x2+
+cnxn) /(d1x1+d2x2+…+dnxn)=cx/dx達(dá)到最大。對(duì)于分?jǐn)?shù)規(guī)劃問(wèn)題,Dinkelbach提出了一個(gè)算法,它通過(guò)解決一個(gè)子問(wèn)題Q(L)來(lái)得到原文題的解。這里Q是一個(gè)線(xiàn)性的最小化目標(biāo)函數(shù)cx-Ldx,且滿(mǎn)足x等于0或1。在本文中,我們證明了Dinkelbach算法在最壞情況下可以在O(log(nM))的時(shí)間內(nèi)解決子問(wèn)題,這里M=max{max|ci|,max|di|,1}。
1.0-1分?jǐn)?shù)規(guī)劃問(wèn)題
要使兩個(gè)線(xiàn)性函數(shù)的比值最大或最小的問(wèn)題,我們稱(chēng)作分?jǐn)?shù)規(guī)劃問(wèn)題或雙曲線(xiàn)問(wèn)題。分?jǐn)?shù)規(guī)劃問(wèn)題在許多領(lǐng)域都可以找到[22]。它在經(jīng)濟(jì)學(xué)中的應(yīng)用有些常見(jiàn)的例子,如尋找最優(yōu)收入比率或者在效益約束下的最佳物資調(diào)配問(wèn)題。另外,系統(tǒng)效率也常常用比率來(lái)衡量,如收益/時(shí)間、利潤(rùn)/風(fēng)險(xiǎn)和消費(fèi)/時(shí)間。有大量的文章對(duì)這類(lèi)問(wèn)題做了分析[3,5,12,20,24]。
有幾類(lèi)分?jǐn)?shù)規(guī)劃問(wèn)題已被廣泛地研究。如0-1分?jǐn)?shù)規(guī)劃問(wèn)題[1],它包含最優(yōu)比率生成樹(shù)問(wèn)題[4],最優(yōu)比率環(huán)問(wèn)題[8,6,19],分?jǐn)?shù)背包問(wèn)題[15],以及分?jǐn)?shù)剪枝問(wèn)題[10]。在本文中,我們研究0-1分?jǐn)?shù)規(guī)劃問(wèn)題,它的描述如下:
令c=(c1,c2,…,cn)和d=(d1,d2,…,dn)為n維整數(shù)向量,那么一個(gè)0-1分?jǐn)?shù)規(guī)劃問(wèn)題用公式描述如下:
FP: 最小化
(c1x1+…cnxn)/(d1x1…dnxn)=cx/dx
xi∈{0,1}
這里x表示列向量(x1,x2,…,xn)T .0-1值向量的子集Ω稱(chēng)作可行域,而x則是Ω的一個(gè)元素,我們稱(chēng)x為可行解。貫穿全文,我們假定對(duì)于任意可行解x,dx都是正數(shù)。這里我們記C=max{max|ci|,1},D=max{max|di|,1}。那么,顯然問(wèn)題的最優(yōu)解在區(qū)間[-nC,nC]內(nèi)。
對(duì)于分?jǐn)?shù)規(guī)劃問(wèn)題,有許多算法都能利用下面的線(xiàn)性目標(biāo)函數(shù)解決問(wèn)題。
Q(L): 最小化 cx-Ldx
xi∈{0,1}
記z(L)為Q(L)的最值。令x*為分?jǐn)?shù)規(guī)劃的最優(yōu)解,并且令L*=(cx*)/(dx*)(注:分?jǐn)?shù)規(guī)劃的最值)。那么下面就容易知道了:
z(L) > 0
當(dāng)且僅當(dāng)
L<L*
z(L) = 0
當(dāng)且僅當(dāng)
L=L*
z(L) < 0
當(dāng)且僅當(dāng)
L>L*
此外,Q(L*)的最優(yōu)解也能使分?jǐn)?shù)規(guī)劃最優(yōu)化[7,16,17]。因此,解決分?jǐn)?shù)規(guī)劃問(wèn)題在本質(zhì)上等同于尋找L=L*使z(L)=0。出于這個(gè)目的,關(guān)于L的函數(shù)z(L)具有很多不錯(cuò)的性質(zhì):分段線(xiàn)性,凹函數(shù),嚴(yán)格遞減,z(-nC)<0,且z(nC)>0。根據(jù)上面的性質(zhì),顯然當(dāng)我們確定參量L,我們可以檢驗(yàn)最值L*是否大于小于或等于當(dāng)前的L。
有一些方法能夠產(chǎn)生一系列收斂于L*的參量。其中一種借助于二分搜索[17,21,13]。在兩個(gè)不同的可行解的目標(biāo)值不相同的情況下,他們的差距將大于等于1/(nD)^2。這暗示我們,當(dāng)我們采用二分搜索時(shí),最優(yōu)值L*可以通過(guò)解決子問(wèn)題Q(L)在最多O(log(2nC/(1/nD)^2))<=O(log(nCD))的時(shí)間內(nèi)得到。
在1979年,Megiddo[18]提出了一個(gè)巧妙的方法來(lái)系統(tǒng)地產(chǎn)生參量序列。他證明了如果子問(wèn)題Q(L)能夠通過(guò)O(p(n))的比較和O(q(n))的累加被解決,那么分?jǐn)?shù)規(guī)劃問(wèn)題就能用O(p(n)+q(n))的時(shí)間被解決。
另一種方法理論上類(lèi)似于牛頓迭代法,他被Isbell、Marlow[14]和Dinkelbach[7]提出(也被稱(chēng)作Dinkelbach算法)。這個(gè)算法在[17,21,11]中被討論(也可能是其他文獻(xiàn))。下一節(jié)將對(duì)它進(jìn)行正式的論述。Schaible[21]證明了對(duì)于非線(xiàn)性分?jǐn)?shù)規(guī)劃問(wèn)題,二分搜索的方法的收斂速度僅僅是線(xiàn)性的,而Dinkelbach的收斂速度卻是超線(xiàn)性的。另外,據(jù)說(shuō)Dinkelbach算法在實(shí)際應(yīng)用中強(qiáng)力而有效(參見(jiàn)[13,23]的例子)。然而,Dinkelbach算法對(duì)于0-1分?jǐn)?shù)規(guī)劃問(wèn)題的最壞時(shí)間復(fù)雜度卻沒(méi)有被證明。在本文中,我們證明了,Dinkelbach算法最多會(huì)在O(log(nCD))的時(shí)間內(nèi)解決子問(wèn)題。注意它的時(shí)間復(fù)雜度與普通的二分搜索相同。我們的結(jié)論暗示了,如果對(duì)于子問(wèn)題Q(L)存在多項(xiàng)式算法,Dinkelbach算法也能夠在多項(xiàng)式時(shí)間內(nèi)解決分?jǐn)?shù)規(guī)劃問(wèn)題。另外,即使子問(wèn)題Q(L)是NP-完全或NP-難的,對(duì)于特殊的分?jǐn)?shù)規(guī)劃我們也能夠在多項(xiàng)式時(shí)間內(nèi)出解。
2.Dinkelbach算法的論述
它本質(zhì)上是觀(guān)察直線(xiàn)
z=cx’-Ldx’
于函數(shù)z(L)在L=L’處相切,這里x’是子問(wèn)題Q(L’)的最優(yōu)解。因此,-dx’是z(L)在L’處的斜率。而且很容易看出上面的直線(xiàn)與L軸相交與L=cx’/dx’.
現(xiàn)在我們來(lái)描述Dinkelbach對(duì)于分?jǐn)?shù)規(guī)劃的算法。Dinkelbach算法產(chǎn)生了收斂于L*的參量序列,如圖1中細(xì)線(xiàn)所示的方式。
Dinkelbach算法:
步驟1:設(shè)L=L1,使 L*<=L1<=nC
步驟2:解決子問(wèn)題Q(L)并得到最優(yōu)解x
步驟3:如果z(L)=0,那么輸出x并終止。否則,設(shè)L=cx/dx跳到步驟2
為了初始化L1,將用到nC,因此充分挖掘拓展問(wèn)題的結(jié)構(gòu)將能做出更好的選擇。
3.Dinkelbach算法的分析
在這一節(jié)中,我們假定Dinkelbach算法終止于第k次。我們可以得到一個(gè)參量序列(L1,L2…Lk)和一個(gè)0-1值的向量(x1,x2…xk).z(L)的凸度暗示了下面的不等式:
dx1>dx2>…>dxk-1>=dxk>0
cx1+nCdx1>cx2+nCdx2>
>cxk-1+nCdxk-1>=cxk+nCxk>=0
由于函數(shù)z(L)是嚴(yán)格遞減的,也很容易發(fā)現(xiàn)
z(L1)<z(L2)<
<z(Lk) = 0 并且 L1>L2>
>Lk
引理1
如果0>=z(Lr)>-1/nD (2<=r<=k) 那么 z(Lr)=0
證明 由于Lr=cxr-1/dxr-1
z(Lr)=cxr- Lr dxr=cxr-(cxr-1dxr)/(dxr-1)=(cxrdxr-1 – cxr-1dxr)/(dxr-1)
假定z(Lr)<0,那么(cxrdxr-1 – cxr-1dxr)<=-1。
因此不等式0<dxr-1<=nD暗示了z(Lr)<=-1/nD。它是矛盾的!
上面的引理來(lái)源于權(quán)向量c和d的完整性。這個(gè)引理暗示了如果z(Lr)>=-1/nD那么z(Lr)=0,因此該算法會(huì)中止于第r次。
引理2 如果0<=cxr+nCdxr<1,那么z(cxr/dxr)=0
證明 由于cxr+nCdxr是整數(shù),如果0<=cxr+nCdxr<1,那么cxr+nCdxr=0并且cxr/dxr=-nC。由于最值L*>=-nC, xr是分?jǐn)?shù)規(guī)劃的最優(yōu)解并且L*=cxr/dxr=-nC。那么顯然有z(cxr/dxr)=z(L*)=0
上面的引理證明了如果cxr+nCdxr < 1,那么算法就在r或者r+1次終止。
現(xiàn)在給出主要引理:
引理3
如果1<=r<=k-1那么|z(Lr+1)|<=(1/2)|z(Lr)|或cxr+1+nCdxr+1 <=(1/2)(cxr+nCdxr)將滿(mǎn)足。
證明 如果Lr+nC<=0 那么Lr=L*=-nC 并且它暗示著z(Lr)b=(1/2)z(Lr+1)=0
現(xiàn)在假定Lr+nC>0。就出現(xiàn)了兩種情況:
情況(i) 首先我們來(lái)考慮z(Lr+1)( Lr+nC)<=z(Lr)/2*(Lr+1+nC)。這個(gè)情形如圖2所示。在這個(gè)圖中,直線(xiàn)z=cxr-Ldxr被記作lr。這里我們將用到圖2的符號(hào)。令M為線(xiàn)段PR的中點(diǎn)。那么點(diǎn)M的坐標(biāo)為( Lr+1 , z(Lr)( Lr+1+nC)/2/ Lr+nC )。因此條件z(Lr+1)( Lr+nC)<=z(Lr)*( Lr+1+nC)/2暗示著點(diǎn)Q=( Lr+1,z(Lr+1))在線(xiàn)段MR上。在這個(gè)條件下,我們證明不等式cxr+1+nC dxr+1<=(1/2)( cxr+nC, dxr)成立。這意味著直線(xiàn)lr+1與線(xiàn)段MR相交,lr+1也與線(xiàn)段M’R’相交,這里M’是線(xiàn)段P’R’的中點(diǎn)?,F(xiàn)在我們證明這個(gè)不等式:
(Lr-Lr+1)( cxr+1+nC dxr+1)
=( cxr+1-Lr+1 dxr+1) (Lr+nC)- ( cxr+1-Lr dxr+1) (Lr+1+nC)
=z(Lr+1) (Lr+nC) - ( cxr+1-Lr dxr+1) (Lr+1+nC)
<= z(Lr) (Lr+1+nC)/2- ( cxr-Lr dxr) (Lr+1+nC)
=-(1/2) ( cxr-Lr dxr) (Lr+1+nC)=-(1/2)( cxr/ dxr - Lr) dxr( cxr/ dxr+nC)
=-(1/2)( Lr+1-Lr) ( cxr+nC dxr)=(1/2) (Lr-Lr+1) ( cxr+nC dxr)
由于Lr>Lr+1,那么不等式cxr+1+nC dxr+1<= (1/2) ( cxr+nC dxr)已經(jīng)被證明。
情況(ii) 接著,考慮z(Lr+1)( Lr+nC)>z(Lr)/2*(Lr+1+nC)
|z(Lr+1)|=- z(Lr+1)< - z(Lr)(nC+ Lr+1)/2/(nC+ Lr)
=|z(Lr)|(1-(Lr- Lr+1)/ (nC+Lr))/2<=1/2 * |z(Lr)|
注意無(wú)論|z(L)|還是cx+nCdx在過(guò)程中都是不增長(zhǎng)的。
在第一次,|z(L)|的值小于等于2n^2*CD。通過(guò)引理1,顯然如果存在O(log(2n^2CD/(1/nD)))<=O(log(nCD))次,他們每個(gè)都能至少將z(L)減少50%那么,然后就能得到最優(yōu)解。同樣,引理2暗示了將cx+nCdx減少50%的次數(shù)O (log(2n^2CD))<=O(log(nCD))是最壞情況。引理3證明了每次將|z(L)|或cx+nCdx減少50%。因此,重復(fù)總次數(shù)的界限是O(log(nCD))。
定理4 Dinkelbanch算法最壞情況的運(yùn)行次數(shù)是O(log(nCD))<=O(log(nM)),這里M=max{C,D}。
上面的定理證明了Dinkelbanch算法最壞運(yùn)行次數(shù)是O(log(nCD))。它暗示了,如果對(duì)于Q(L)存在強(qiáng)多項(xiàng)式算法,Dinkelbach算法就能在多項(xiàng)式時(shí)間內(nèi)解決分?jǐn)?shù)規(guī)劃問(wèn)題。然而,當(dāng)我們用多項(xiàng)式算法解決了子問(wèn)題后,我們需要估計(jì)目標(biāo)函數(shù)Q(L)的系數(shù)的輸入規(guī)模。在下一節(jié),我們將通過(guò)分析最優(yōu)比率生成樹(shù)和分?jǐn)?shù)調(diào)配問(wèn)題來(lái)討論這一點(diǎn)。
4.討論
Chandrasekaran[4]提出了最優(yōu)比率生成樹(shù)的算法,它是基于二分搜索的。Dinkelbach算法可以在O(T(v,e)log(vCD))的時(shí)間解決該問(wèn)題,這里v是點(diǎn)的個(gè)數(shù),e是邊的個(gè)數(shù),并且用T(v,e)表示計(jì)算普通最小生成樹(shù)的強(qiáng)多項(xiàng)式算法。很容易將Chandrasekaran的算法延伸到一般帶有分?jǐn)?shù)目標(biāo)函數(shù)的矩陣胚規(guī)劃問(wèn)題。在這種情況下,在這種情形下,函數(shù)z(L)的斷點(diǎn)數(shù)最大為n(n-1)/2(參見(jiàn)[4])因此,當(dāng)可行域Ω是矩陣胚基礎(chǔ)特征向量的集合。Dinkelbach算法就會(huì)在O(min{n^2,log(nCD)})后終止。
對(duì)于調(diào)配問(wèn)題,已經(jīng)研制了許多算法。大概最有名的算法就是Hungarian方法,并且它在最壞情況下的復(fù)雜度是O(v(v log v+e)) [9]。使用Hungarian方法,Dinkelbach算法可以用O(v(v log v+e)log(vCD))的時(shí)間解決分?jǐn)?shù)調(diào)配問(wèn)題。在[19]中,Orlin和Ahuja提出了一個(gè)O(sqrt(v)e*log(vW))的算法來(lái)解決調(diào)配問(wèn)題而且據(jù)說(shuō)他們的算法因?yàn)閺?qiáng)多項(xiàng)式算法而具有競(jìng)爭(zhēng)性(參見(jiàn)[2]也可)。在他們的算法中,它假定邊權(quán)為整數(shù),并且W代表邊權(quán)的最大絕對(duì)值。為了將這個(gè)算法與Dinkelbach算法相結(jié)合,我們需要將在運(yùn)行第r次解決的的子問(wèn)題Q(L)用下面式子代替
(dxr-1) cx-( cxr-1) dx
這里xr-1表示代表運(yùn)行第i次得到的最優(yōu)解。因此,在每次運(yùn)行中,Dinkelbach算法解決邊權(quán)絕對(duì)值小于等于2v^2CD的調(diào)配問(wèn)題。它暗示了Dinkelbach算法對(duì)于調(diào)配問(wèn)題的最壞情況下的時(shí)間復(fù)雜度為
O(sqrt(v)e(log(2v^3CD))(log(eCD)))<=O(sqrt(v)e(log(vCD))^2)
我們說(shuō),如果一個(gè)具有線(xiàn)性目標(biāo)函數(shù)的0-1整數(shù)規(guī)劃問(wèn)題存在多項(xiàng)式算法,我們可以利用上述目標(biāo)函數(shù)在多項(xiàng)式時(shí)間內(nèi)解決它的0-1分?jǐn)?shù)規(guī)劃問(wèn)題。
posted on 2008-08-05 14:58
小果子 閱讀(1838)
評(píng)論(3) 編輯 收藏 引用