劉雪靜,賀毅朝,吳聰聰,李 靚
1.河北地質(zhì)大學(xué) 信息工程學(xué)院,石家莊 050031
2.中國(guó)郵政集團(tuán)公司 河北省郵政信息技術(shù)局,石家莊 050011
0-1背包問(wèn)題(0-1 Knapsack Problem,0-1KP)[1-2]是經(jīng)典的NP-hard問(wèn)題,在項(xiàng)目選擇、貨物裝載和投資決策等方面具有重要的理論與應(yīng)用價(jià)值。0-1KP的一般描述為:假定有n個(gè)不同的物品,重量集合W={w1,w2,…,wn},價(jià)值集合P={p1,p2,…,pn},背包最大載重C。0-1KP為從n個(gè)不同物品中選擇若干個(gè)裝入背包,在不超過(guò)背包載重C的前提下使其價(jià)值之和最大。0-1KP的數(shù)學(xué)模型表示如下,當(dāng)且僅當(dāng)?shù)趇個(gè)物品被裝入背包時(shí)xi=1。
烏鴉算法(Crow Search Algorithm,CSA)[3]是一種新近被提出的新穎演化算法,由于該算法中僅有感知概率(Awareness Probability,AP)和飛行長(zhǎng)度(flight length,fl)兩個(gè)可調(diào)節(jié)參數(shù),是一個(gè)參數(shù)較少的簡(jiǎn)單的算法,故CSA在參數(shù)設(shè)置方面具有一定的優(yōu)勢(shì)。由于烏鴉算法提出時(shí)間較短,應(yīng)用領(lǐng)域較少,并且還未見(jiàn)其在0-1KP問(wèn)題中的應(yīng)用研究,為此本文首先提出利用烏鴉算法求解0-1KP。
目前,人們相繼研究了基于不同演化算法求解0-1KP的方法,并取得了許多可以借鑒的研究成果。例如,賀毅朝等[4]提出第一個(gè)二進(jìn)制差分演化算法求解0-1KP問(wèn)題,并證明了其收斂性;武慧虹等[5]提出利用克隆選擇免疫遺傳算法求解0-1KP問(wèn)題;吳聰聰?shù)萚6]利用貪心二進(jìn)制蝙蝠算法求解0-1KP問(wèn)題,能獲得最優(yōu)解;李寧等[7]基于二進(jìn)制和聲搜索算法求解K-可滿(mǎn)足性問(wèn)題和0-1KP問(wèn)題,并驗(yàn)證了算法的可行性;宋瀟瀟等[8]將膜計(jì)算的思想引入人工蜂群算法,提出了改進(jìn)的蜂膜群算法求解0-1KP問(wèn)題;李若平等[9]在和聲搜索算法中引入新的學(xué)習(xí)搜索機(jī)制,提出學(xué)習(xí)型和聲搜索算法求解0-1KP問(wèn)題;李棟等[10]基于雙子群協(xié)同進(jìn)化的思想,提出求解0-1KP的雙子群果蠅優(yōu)化算法;高芳等[11]在粒子群中引入生物病毒機(jī)制和宿主與病毒的思想,提出求解0-1KP的病毒協(xié)同進(jìn)化粒子群算法;Zhou等[12]提出了一種基于貪婪算法的二進(jìn)制猴子算法求解0-1KP問(wèn)題,能得到較好的結(jié)果。由此可見(jiàn),利用演化算法快速高效求解0-1KP是智能計(jì)算領(lǐng)域中的一個(gè)研究熱點(diǎn)問(wèn)題。
自然界中的烏鴉具有以下特性:烏鴉是群居生活的鳥(niǎo)類(lèi),它們非常聰明,會(huì)記住自己藏匿食物的最佳位置(Memory,M),能跟蹤其他烏鴉偷竊對(duì)方的食物,而被跟蹤的烏鴉能以一定的感知概率AP保護(hù)自己的食物防止被竊取。文獻(xiàn)[3]在研究了烏鴉特性的基礎(chǔ)上提出了模擬烏鴉行為的烏鴉算法,下面給出CSA的算法描述。
算法1 CSA
步驟1初始化。
在n維的可行域中隨機(jī)生成NP只烏鴉,每只烏鴉X=[x0,x1,…,xn-1]表示一個(gè)可行解,初始化最大迭代次數(shù)iter_max、飛行長(zhǎng)度 fl和感知概率AP。
步驟2初始化烏鴉的記憶值,評(píng)價(jià)烏鴉的適應(yīng)度值。
步驟3更新烏鴉位置。
假定烏鴉i隨機(jī)選擇烏鴉 j跟蹤,結(jié)果如下:
烏鴉 j不知道烏鴉i跟蹤它,則烏鴉i將接近烏鴉 j藏匿食物的最佳位置M;烏鴉 j知道烏鴉i跟蹤它,則其故意把烏鴉i帶到一個(gè)隨機(jī)位置。
烏鴉 i的新位置如公式(4)所示,其中,ri、rj是服從[0,1]均勻分布的隨機(jī)數(shù),mj,iter為烏鴉 j在iter次迭代時(shí)的記憶值,APj,iter為烏鴉 j的感知概率,fli,iter為飛行長(zhǎng)度。
步驟4檢查新位置的可行性。
如果烏鴉i的新位置是可行的,則更新;否則烏鴉i停留在當(dāng)前位置。
步驟5評(píng)價(jià)烏鴉i的新位置的適應(yīng)度值。
步驟6以式(5)的方式更新記憶值。
步驟7重復(fù)步驟3~步驟6,直至迭代終止。
算法運(yùn)行結(jié)束后,所有烏鴉記憶值中的最好位置即為問(wèn)題的最優(yōu)解。
CSA與遺傳算法、粒子群算法、和聲算法一樣,都是利用群體智能來(lái)探索最優(yōu)化問(wèn)題的解。除了種群數(shù)量和最大迭代次數(shù)以外,優(yōu)化算法一般還需涉及其他參數(shù)。由于參數(shù)的調(diào)整是一項(xiàng)耗時(shí)的工作,所以過(guò)多的參數(shù)是優(yōu)化算法的一個(gè)缺點(diǎn)。粒子群算法中可調(diào)參數(shù)為慣性權(quán)重、速度的最大值、學(xué)習(xí)因子等;和聲算法要求考慮和聲庫(kù)記憶選擇概率和記憶擾動(dòng)概率等參數(shù);遺傳算法需考慮交叉方法、交叉概率、變異方法、變異概率等參數(shù)。而CSA僅有AP和 fl兩個(gè)可調(diào)節(jié)參數(shù),故算法相對(duì)簡(jiǎn)單、易于實(shí)現(xiàn)。
任何元啟發(fā)式算法都應(yīng)在多元化與集約化之間提供良好的平衡[13]。CSA的集約化和多元化主要受到參數(shù)AP的控制。降低AP的值,CSA傾向于局部搜索,因此,較小的AP值增加了集約化;相反,加大AP的值,CSA趨向全局搜索,故較大的AP值增加了多元化。
十多年來(lái),混沌優(yōu)化方法[14]作為一種新穎的優(yōu)化技術(shù),得到了廣泛的關(guān)注和應(yīng)用。由于混沌能按照自身的規(guī)律在一定范圍內(nèi)不重復(fù)遍歷所有狀態(tài),因此利用混沌優(yōu)化方法求解數(shù)值優(yōu)化問(wèn)題時(shí),混沌軌跡能使搜索過(guò)程避免陷入局部最優(yōu),從而獲得全局最優(yōu)解或者較好的滿(mǎn)意解。
CSA采用隨機(jī)方法初始化烏鴉的位置,極有可能造成烏鴉的位置分布不均勻,混沌序列能更加有效地實(shí)現(xiàn)對(duì)搜索空間的搜索,故采用Chebyshev映射初始化烏鴉位置,增加初始解的多樣性,為進(jìn)一步有效地進(jìn)行全局搜索打下良好的基礎(chǔ),Chebyshev映射表達(dá)式如下:
本文采用兩種映射方式生成烏鴉個(gè)體,第一種方式如下:
(1)對(duì)n維空間中的NP只烏鴉,個(gè)體 Xi=[xi,0,xi,1,…,xi,n-1](i=1,2,…,NP)的xi,0值隨機(jī)產(chǎn)生。
(2)利用公式(6)對(duì) xi,0(i=1,2,…,NP)進(jìn)行 n-1次迭代,生成烏鴉Xi的xi,1,xi,2,…,xi,n-1值。
第二種映射方式如下:
(1)對(duì)n維空間中的NP只烏鴉,隨機(jī)產(chǎn)生n維向量X0=[x0,x1,…,xn-1],作為第一只烏鴉。
(2)將 X0按公式(6)進(jìn)行 NP-1迭代,生成其余NP-1個(gè)個(gè)體。
至此,烏鴉的初始化步驟完成。
在CSA中,烏鴉個(gè)體X=[x0,x1,…,xn-1]為實(shí)型向量,fl、AP為實(shí)數(shù),而0-1KP是離散域的問(wèn)題,因此需要將烏鴉個(gè)體X轉(zhuǎn)換為0-1向量以實(shí)現(xiàn)CSA對(duì)離散問(wèn)題的求解。轉(zhuǎn)換方法如式(7)所示。
其中,Y=[y0,y1,…,yn-1],yj∈{0,1},j=0,1,…,n-1。種群中的個(gè)體用n維實(shí)型向量X和二進(jìn)制向量Y共同表示即(X,Y),以[-a,a]n為輔助搜索空間(本文a=5),以{0,1}n為解空間,實(shí)現(xiàn)對(duì)離散問(wèn)題的求解。
任意二進(jìn)制個(gè)體Y=[y0,y1,…,yn-1]∈{0,1}n僅是0-1KP的一個(gè)潛在解,本文利用貪心修復(fù)與優(yōu)化算法[15](Greedy Repair and Optimization Algorithm,GROA)對(duì)潛在解進(jìn)行修復(fù)使之成為可行解,同時(shí)進(jìn)一步優(yōu)化該個(gè)體。
假定 n、W、P、C 含義同前,H[0,1,…,n-1]中存放物品按照 pi/wi降序排序的下標(biāo)序,Y=[y0,y1,…,yn-1]∈{0,1}n為輸入個(gè)體編碼,B=[b0,b1,…,bn-1]∈{0,1}n為修復(fù)后個(gè)體編碼。GROA偽代碼如下:
算法2 GROA
1.weight=0,val=0;
2.Fori=0ton-1Dobi=0
3.Endfor
4.Fori=0ton-1Do
5. If(yH[i]==1&&weight+wH[i]<=C)then
6.weight=weight+wH[i],bH[i]=1,val=val+pH[i];
7. Endif
8.Endfor
9.Fori=0ton-1Do
10. If(weight+wH[i]<=C&&yH[i]==0)then
11. weight=weight+wH[i],bH[i]=1,val=val+pH[i];
12. Endif
13.Endfor
14.Return(B,val)
在算法中,輸入二元向量Y和數(shù)組H,輸出修正優(yōu)化后向量B及其適應(yīng)度值。步2~步3首先對(duì)二元向量B賦值0,步4~步8實(shí)現(xiàn)對(duì)非正常編碼個(gè)體的修復(fù),并將結(jié)果存到B中,步9~步13對(duì)B做進(jìn)一步優(yōu)化,步14返回最終結(jié)果。顯然,GROA的時(shí)間復(fù)雜度為O(n)。
假定 n、W、P、C、H、iter_max、NP 的定義同前,將CSA與混合編碼技術(shù)、混沌策略、GROA相結(jié)合生成求解0-1KP的混沌二進(jìn)制烏鴉算法(CBCSA),CBCSA的偽代碼描述如下。
算法3 CBCSA
1.初始化參數(shù) AP、fl、iter_max、NP ;
2.H[0…n-1]←QuickSort(pi/wi|0≤i≤n-1);
3.采用混沌序列生成初始種群P′(0)={X′i(0)|1≤i≤NP}及二進(jìn)制種群P(0);
4.GROA處理P(0)得B(0),計(jì)算 f(B(0));
5.初始化記憶值;
6.Foriter=1to iter_max Do
7.Fori=1toNPDo
8. 隨機(jī)選擇烏鴉j
9. If rj≥APj,iter
10. Fork=0ton-1
11.
12. Endfor
13. Else
14. xi,iter+1=搜索空間任意位置
15. Endif
16.Endfor
17.GROA對(duì) Xiter+1處理得B(iter+1),評(píng)估新位置,以公式(5)方式更新記憶值
18.Endfor
19.返回最優(yōu)值及最優(yōu)個(gè)體
在CBCSA中,NP和iter_max是關(guān)于n的線性函數(shù)。QuickSort的時(shí)間復(fù)雜度為O(nlbn),步3的時(shí)間復(fù)雜度為O(nNP),GROA的時(shí)間復(fù)雜度為O(n),步6~步18中,步7~步16的時(shí)間復(fù)雜度為O(nNP),步17的時(shí)間復(fù)雜度為O(n),故CBCSA的時(shí)間復(fù)雜度為O(nlbn)+O(nNP)+O(n)+iter_max×(O(nNP)+O(n))≈O(n3)。
為了驗(yàn)證二進(jìn)制烏鴉算法(Binary Crow Search Algorithm,BCSA)、CBCSA1(第一映射方式)和CBCSA2(第二種映射方式)求解0-1KP的性能,本文采用表1所示的7個(gè)經(jīng)典0-1KP實(shí)例進(jìn)行實(shí)驗(yàn),表1中dim代表維數(shù)。首先,以實(shí)驗(yàn)方式確定參數(shù)AP和 fl的取值。假設(shè) AP 取值0.1,0.2,0.3,0.4,fl取值1.0,2.0,3.0,4.0,5.0,表2列出(AP,fl)的所有組合及其id。限于篇幅,針對(duì)(AP,fl)的每一種組合,圖1~圖7僅給出CBCSA1對(duì)7個(gè)實(shí)例分別獨(dú)立計(jì)算20次所得到的最好結(jié)果。
表1 7個(gè)0-1KP實(shí)例
表2 (AP,fl)及其id
圖1 CBCSA1求解KP1的性能比較
圖2 CBCSA1求解KP2的性能比較
圖4 CBCSA1求解KP4的性能比較
圖5 CBCSA1求解KP5的性能比較
圖6 CBCSA1求解KP6的性能比較
圖3 CBCSA1求解KP3的性能比較
圖7 CBCSA1求解KP7的性能比較
由圖1可以看出,求解KP1時(shí),id取值為3,4,5,8,9,10,13,14,15,19,20時(shí)能100%取得最優(yōu)解;由圖2~圖4可以看出,求解KP2、KP3、KP4時(shí),當(dāng) (AP,fl)為任意組合時(shí)都能100%取得最優(yōu)解;由圖5~圖7可以看出,求解KP5、KP6、KP7時(shí)(AP,fl)的不同組合形式,對(duì)所求得的最優(yōu)值有影響,本文選取所求中位數(shù)最好的組合,故 AP=0.1、fl=3.0。
參數(shù)設(shè)置如下:NP=30,iter_max=200,AP=0.1,fl=3.0,算法獨(dú)立運(yùn)行20次,實(shí)驗(yàn)結(jié)果如表3所示。其中,best為獨(dú)立運(yùn)行算法20次的最好值,worst為最差值,mean為平均值,sd為標(biāo)準(zhǔn)差,s(%)為獨(dú)立運(yùn)行算法20次能得到已知最優(yōu)解的百分比,weight為被裝入背包的物品的總重量,time(s)為算法運(yùn)行一次的平均時(shí)間。表4中給出CBCSA1與其他文獻(xiàn)算法得到的最優(yōu)解的對(duì)比,“N”表示文獻(xiàn)未提供,數(shù)值為對(duì)應(yīng)的運(yùn)行時(shí)間。
從表3可以看出,BCSA求解0-1KP性能較差,不能得到7個(gè)0-1KP的最優(yōu)解,因此不適合求解0-1KP。由表3和表4綜合來(lái)看,求解KP1時(shí),CBCSA1能100%獲得已知最優(yōu)解3 119,CBCSA2在20次運(yùn)行中命中16次,成功率80%,且CBCSA1的運(yùn)行時(shí)間比CBCSA2略短,學(xué)習(xí)型和聲算法[8]不能求得已知最優(yōu)解,雙子群果蠅優(yōu)化算法[9]能求得3 119,但是成功率為80%;求解KP2時(shí),CBCSA1和CBCSA2能100%得到已知最優(yōu)解3 103,且CBCSA1的運(yùn)行時(shí)間短,雙子群果蠅優(yōu)化算法也能得3 103,但是成功率為90%;求解KP3時(shí),CBCSA1和CBCSA2均能100%得到已知最優(yōu)解1 563,克隆選擇免疫遺傳算法[4]和改進(jìn)膜蜂群算法[7]也能100%得到最優(yōu)解1 563,但是求解時(shí)間比CBCSA1和CBCSA2長(zhǎng),ABC算法[16]不能100%獲得最優(yōu)解,其SD值為1.196;求解KP4時(shí),CBCSA1和CBCSA2均能100%得到已知最優(yōu)解2 660,其他算法中僅改進(jìn)膜蜂群算法能取得2 660,而ABC算法、克隆選擇免疫遺傳算法和改進(jìn)膜蜂群算法的SD值分別為18.4、2.78和1.91,且求解時(shí)間較CBCSA1和CBCSA2都長(zhǎng);求解KP5時(shí),CBCSA1成功率70%,SD值為3.80,CBCSA2成功率40%,SD值為3.93,ABC算法、克隆選擇免疫遺傳算法和改進(jìn)膜蜂群算法的SD值分別為24.43、8.62和1.35,雖然改進(jìn)膜蜂群算法的SD值較CBCSA1小,但是求解時(shí)間為3.77 s,比CBCSA1的0.951 s長(zhǎng);求解KP6時(shí),CBCSA1和CBCSA2的成功率雖然不如文獻(xiàn)[6]提出的BHSA,但BHSA是在2 s內(nèi)得到的運(yùn)行結(jié)果,運(yùn)行時(shí)間較長(zhǎng);求解KP7時(shí),CBCSA1在0.858 s內(nèi)得最優(yōu)解88 228,CBCSA2在1.406 s內(nèi)得最優(yōu)解88 227,而B(niǎo)HSA在2 s內(nèi)得到的最優(yōu)解為88 129,雖然CBCSA1的成功率不高,但是Mean值為88 218.3,比BHSA的best都好,CBCSA1得到最優(yōu)解的對(duì)應(yīng)編碼為:0,1,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,0。
表3 運(yùn)行結(jié)果
表4 運(yùn)行結(jié)果對(duì)比
圖8為BCSA、CBCSA1和CBCSA2在求解高維背包問(wèn)題KP4~KP7時(shí)的收斂速度。由圖8(a)~圖8(d)可以看出,CBCSA1和CBCSA2的收斂速度非???,甚至初始解就是最優(yōu)解,即通過(guò)混沌策略生成的初始解性能非常好,且兩種算法的最優(yōu)解相差不大,幾乎重疊;BCSA收斂速度相對(duì)較緩慢,求解性能明顯不如CSCSA1和CBCSA2。
綜上所述,對(duì)于0-1KP,CBCSA1和CBCSA2的求解效果非常好,遠(yuǎn)遠(yuǎn)優(yōu)于BCSA,也優(yōu)于其他文獻(xiàn)所提出的算法,因此,CBCSA是適合求解0-1KP的有效算法,且混沌策略中的第一種方式比第二種方式求解性能更佳。
圖8 三種算法的收斂速度
烏鴉算法是一種新穎演化算法,本文研究了如何利用烏鴉算法求解0-1KP,并針對(duì)CSA的不足,提出了一種基于混沌理論的二進(jìn)制烏鴉算法。首先將混沌序列引入烏鴉的初始化過(guò)程,保證個(gè)體的初始位置在整個(gè)搜索空間均勻分布,提高了算法的全局尋優(yōu)能力;然后針對(duì)非正常編碼個(gè)體,采用貪心策略進(jìn)行處理。仿真實(shí)驗(yàn)表明,CBCSA具有良好的全局尋優(yōu)能力,收斂速度快,運(yùn)行時(shí)間短,優(yōu)于其他的算法,是一種求解0-1背包問(wèn)題的有效實(shí)用算法。
CSA提出的時(shí)間較短,應(yīng)用還很少,如何把CSA應(yīng)用到其他領(lǐng)域是下一步的研究問(wèn)題。
:
[1]Singh A.Elements computation theory[M].London:Springer,2009.
[2]Du D Z,Ko K I.Theory of computational complexity[M].New York:Wiley-Interscience,2000.
[3]Askarzadeh A.A novel metaheuristic method for solving constrained engineering optimization problems:crow search algorithm[J].Computers&Structures,2016,169:1-12.
[4]賀毅朝,王熙照,寇應(yīng)展.一種具有混合編碼的二進(jìn)制差分演化算法[J].計(jì)算機(jī)研究與發(fā)展,2007,44(9):1476-1484.
[5]武慧虹,錢(qián)淑渠,徐志丹.克隆選擇免疫遺傳算法對(duì)高維0/1背包問(wèn)題應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2013,33(3):845-848.
[6] 吳聰聰,賀毅朝,陳嶷瑛,等. 求解0-1 背包問(wèn)題的二進(jìn)制蝙蝠算法[J]. 計(jì)算機(jī)工程與應(yīng)用,2015,52(19):71-74.
[7] 李寧,劉建芹,賀毅朝. 基于和聲搜索算法求解組合優(yōu)化問(wèn)題[J]. 計(jì)算機(jī)應(yīng)用,2012,32(4):1041-1044.
[8] 宋瀟瀟,王軍. 改進(jìn)膜蜂群算法求解0-1 背包問(wèn)題[J]. 計(jì)算機(jī)應(yīng)用,2015,35(7):2088-2092.
[9] 李若平,歐陽(yáng)海濱,高立群,等. 學(xué)習(xí)型和聲搜索算法及其在0-1 背包問(wèn)題中的應(yīng)用[J]. 控制與決策,2013,28(2):205-210.
[10] 李棟,張文宇.求解0-1背包問(wèn)題的雙子群果蠅優(yōu)化算法[J].計(jì)算機(jī)應(yīng)用研究,2015(11):3273-3277.
[11] 高芳,崔剛,吳智博,等. 求解背包問(wèn)題的病毒協(xié)同進(jìn)化粒子群算法[J]. 哈爾濱工業(yè)大學(xué)學(xué)報(bào),2009(6):103-107.
[12] Zhou Y,Chen X,Zhou G.An improved monkey algorithm for a 0-1 knapsack problem[J].Applied Soft Computing,2016,38:817-830.
[13] Yang X S.Metaheuristic optimization:algorithm analysis and open problems[C]//International Conference on Experimental Algorithms,2011:21-32.
[14] Wu S,Manber U,Myers G.A subquadratic algorithm for approximate limited expression matching[J].Algorithmica,1996,15(1):50-67.
[15] 賀毅朝,宋建民,張敬敏,等. 利用遺傳算法求解靜態(tài)與動(dòng)態(tài)背包問(wèn)題的研究[J]. 計(jì)算機(jī)應(yīng)用研究,2015,32(4):1011-1015.
[16] Karaboga D.An idea based on honey bee swarm for numerical optimization,technical report TR06[R].Kayseri:Computer Engineering Department,Engineering Faculty,Erciyes University,2005.