湯濤 王付宇
摘? 要:針對(duì)傳統(tǒng)方法求解投資問題難度大、不易實(shí)現(xiàn)等問題,通過分析基本螢火蟲算法缺點(diǎn),設(shè)計(jì)了一種改進(jìn)的自適應(yīng)步長螢火蟲算法用于求解該問題.利用正切函數(shù)使步長自適應(yīng)變化,為算法加入了慣性線性因子,利用種群最優(yōu)個(gè)體重新定義位置更新公式;為了避免算法陷入局部最優(yōu),為算法設(shè)計(jì)了兩種變異操作;最后,將改進(jìn)螢火蟲算法應(yīng)用于投資組合問題中.計(jì)算結(jié)果表明:改進(jìn)螢火蟲算法求解該問題具有明顯優(yōu)勢.
關(guān)鍵詞:投資組合;螢火蟲算法;自適應(yīng)步長;慣性因子;變異
中圖分類號(hào):TP18∶F830.59? ? ? ? ? ?DOI:10.16375/j.cnki.cn45-1395/t.2021.01.018
0? ? 引言
上個(gè)世紀(jì)五十年代,Markowitz[1]提出了均值-方差投資組合問題模型,研究如何在模糊條件下進(jìn)行投資決策,該理論在經(jīng)濟(jì)領(lǐng)域中具有重要的地位.隨著社會(huì)的發(fā)展,經(jīng)過眾多學(xué)者的不斷研究,均值-方差已越來越具有實(shí)用性[2].如劉冬華等[3]通過分析證券市場實(shí)際情況,在模型中加入了費(fèi)用;Huang[4]為了準(zhǔn)確描述投資組合問題,提出帶不確定參數(shù)的均值-方差投資組合決策模型,為決策者提供依據(jù).
具有多約束的投資組合問題是一個(gè)組合優(yōu)化問題,傳統(tǒng)求解方法難以很好地得到較優(yōu)組合解.隨著智能優(yōu)化算法的發(fā)展[5],為組合優(yōu)化問題的解決提供了便捷,其中螢火蟲算法(firefly algorithm,F(xiàn)A)具有參數(shù)簡單、易操作等優(yōu)點(diǎn),被廣泛應(yīng)用于各個(gè)領(lǐng)域[6-7].Yang[8]于2008年首次提出螢火蟲算法,螢火蟲算法原理是:模擬螢火蟲行為,通過個(gè)體熒光素吸引得到問題的最優(yōu)解.但是螢火蟲算法也有易陷入局部最優(yōu)等缺點(diǎn),因此,有學(xué)者對(duì)其進(jìn)行了研究[9-10].如張哲辰等[11]為避免算法陷入局部極值,將拓?fù)浣Y(jié)構(gòu)與交叉策略引入算法搜索機(jī)制中,提出了一種改進(jìn)的螢火蟲算法;莫愿斌等[12]在螢火蟲移動(dòng)過程中加入高斯變異策略,提高了算法的收斂能力,彌補(bǔ)了算法易陷入極值的缺點(diǎn);李恒等[13]提出了一種改進(jìn)的自適應(yīng)步長螢火蟲,并應(yīng)用于PID參數(shù)優(yōu)化問題中,結(jié)果表明改進(jìn)螢火蟲具有高精度.
本研究為了更好地求解投資組合問題,設(shè)計(jì)了一種改進(jìn)的螢火蟲算法.為提高快速收斂能力,設(shè)計(jì)了自適應(yīng)步長,重新定義了算法的搜索機(jī)制.由于算法易陷入局部極值[14],因此,為算法設(shè)計(jì)了兩種擾動(dòng)方式.分別用改進(jìn)螢火蟲算法、標(biāo)準(zhǔn)螢火蟲算法、文獻(xiàn)[13]中的算法求解投資組合問題,仿真對(duì)比結(jié)果表明,改進(jìn)螢火蟲算法具有更高的精度與收斂速度.
1? ? 投資組合問題
如果某一個(gè)決策者決定利用現(xiàn)有的總金額S去投資幾種股票,設(shè)[xi(i=1, 2, …, n)]表示投資第[i]種股票的比例,其中無風(fēng)險(xiǎn)投資比例為[x0]. [ri]為[i]股票的收益,[pi]為[i]股票價(jià)格,[σ]表示股票間的方差-協(xié)方差矩陣,[ni]表示[i]股票的手?jǐn)?shù),100股為一手.
在實(shí)際生活中需要考慮費(fèi)用,我國股票買入成本具體有稅收、委托金、傭金、過戶費(fèi),每筆委托費(fèi)為5元.同文獻(xiàn)[1]一樣,以國債投資作為無風(fēng)險(xiǎn)投資方案,年利率r為3.85%,[μ0=0.1]%表示無風(fēng)險(xiǎn)方案成本系數(shù),[R0]為投資者預(yù)期的收益率.
式(1)為目標(biāo)函數(shù),F(xiàn)為總投資風(fēng)險(xiǎn);x為股票投資比例;式(2)為資金約束;式(3)為投資帶來的收益率不低于預(yù)期收益率;式(4)為投資比例與手?jǐn)?shù)轉(zhuǎn)換關(guān)系;式(5)為委托金、傭金、過戶費(fèi)之和;式(6)為傭金收費(fèi),具體為不超過成交金額的3% ,基本收費(fèi)為5元;式(7)為過戶費(fèi)用,按照成交股數(shù)的1%支付,起始費(fèi)用1元;式(8)為包括無風(fēng)險(xiǎn)投資成本在內(nèi)的總成本;式(9)為總投資比例之和為1.
2? ? 改進(jìn)螢火蟲算法
2.1? ?標(biāo)準(zhǔn)螢火蟲局限性分析
螢火蟲算法之所以簡單易操作,是因?yàn)槠渌阉鳈C(jī)制主要是依靠領(lǐng)域內(nèi)最優(yōu)個(gè)體進(jìn)行指引尋優(yōu),一旦領(lǐng)域?yàn)榭占?,那么算法將?huì)停滯,大大降低了算法效率.除此之外,算法位置更新公式過于簡單以及搜索步長的固定,無法使算法進(jìn)行快速尋優(yōu),從而無法快速收斂于最優(yōu)解附近.
2.2? ?步長改進(jìn)
算法前期,需要較大步長搜索,盡可能遍歷大范圍的可行解;在算法后期,已慢慢收斂于最優(yōu)解附近,此時(shí)需要較小步長來搜索.按照這個(gè)改進(jìn)思路,可以發(fā)現(xiàn)在正切函數(shù)[tan(x)]中,自變量x為0.785時(shí),函數(shù)值為1,且隨著自變量的減小而減小,減小速率也是逐漸變小,因此,將正切函數(shù)引入步長中,改進(jìn)后的步長更新公式如下:
2.3? ?位置更新改進(jìn)
標(biāo)準(zhǔn)螢火蟲搜索原理存在領(lǐng)域?yàn)榭盏娜毕?,改進(jìn)后的位置更新公式,引入了一個(gè)慣性線性因子,以種群最優(yōu)個(gè)體替換領(lǐng)域內(nèi)最優(yōu)個(gè)體,以種群平均值作為擾動(dòng)項(xiàng),以一定概率去擾動(dòng)當(dāng)前解.
2.4? ?變異
為了使算法容易跳出局部極值,以一定概率對(duì)螢火蟲進(jìn)行擾動(dòng).設(shè)p=0.2為算法變異概率,并且利用逆序與亮點(diǎn)交換為算法設(shè)計(jì)了兩種變異方式.如果[p>rand]則執(zhí)行變異算子,rand為[0,1]的隨機(jī)數(shù),假設(shè)螢火蟲是8個(gè)維度解,每次迭代時(shí)隨機(jī)生成兩個(gè)位置索引數(shù),假設(shè)生成的兩個(gè)數(shù)為3和6,變異方式如圖1所示.
2.5? ?算法步驟
Step 1? 設(shè)置算法參數(shù),如種群大小、最大慣性因子、最小慣性因子、步長固定參數(shù)[s0]、變異概率p等;
Step 2? 生成初始解,計(jì)算適應(yīng)度值,本研究螢火蟲適應(yīng)度值為投資的總風(fēng)險(xiǎn);
Step 3? 開始迭代計(jì)算,按照式(10)、式(11)分別更新步長、慣性因子等參數(shù);
Step 4? 搜索種群最優(yōu)解,按照式(12)進(jìn)行位置更新,判斷是否需要變異,若執(zhí)行變異,則隨機(jī)選擇一個(gè)變異方式進(jìn)行變異;
Step 5? 判斷算法是否結(jié)束,若結(jié)束,則輸出最優(yōu)解,若不結(jié)束,則轉(zhuǎn)Step 3.
3? ? 實(shí)驗(yàn)仿真
3.1? ? 實(shí)驗(yàn)數(shù)據(jù)
為了進(jìn)行仿真實(shí)驗(yàn)以證明改進(jìn)螢火蟲算法求解投資組合問題的有效性,選取了某個(gè)證券交易所的9支股票,股票價(jià)格和收益率的數(shù)據(jù)來自網(wǎng)站,如表1所示,股票間協(xié)方差數(shù)據(jù)如表2所示.
3.2? ?仿真結(jié)果對(duì)比
設(shè)定最大迭代次數(shù)[tmax]為130,種群規(guī)模為100,步長固定參數(shù)[s0]為0.2,最大慣性因子為0.7,最小慣性因子為0.3.仿真軟件使用Matlab R2014b來進(jìn)行算法編程.計(jì)算機(jī)處理器參數(shù)為Intel(R)Core(TM)i7-1065G7@ 2.52 GHz雙核處理器,計(jì)算機(jī)操作系統(tǒng)為Windows 8 64位.本研究分別用改進(jìn)螢火蟲算法、標(biāo)準(zhǔn)螢火蟲算法、文獻(xiàn)[13]算法來求解投資問題,仿真對(duì)比結(jié)果見表3.為了進(jìn)一步形象直觀地證明改進(jìn)算法的效果,分別以種群數(shù)50與100對(duì)3個(gè)算法的迭代收斂進(jìn)行對(duì)比.種群大小為50時(shí),3種算法迭代對(duì)比見圖2;種群大小為100時(shí),3種算法迭代對(duì)比見圖3.
由表3以及圖2、圖3可得,改進(jìn)后螢火蟲算法收斂效果要優(yōu)于標(biāo)準(zhǔn)螢火蟲算法與文獻(xiàn)[13]中提出的改進(jìn)螢火蟲算法.為了進(jìn)一步比較改進(jìn)螢火蟲算法與標(biāo)準(zhǔn)螢火蟲算法收斂速度的差別,以表3中的12運(yùn)行次數(shù)的時(shí)間來計(jì)算平均時(shí)間,如表4所示.
由表4可以得出,本文改進(jìn)螢火蟲算法運(yùn)行時(shí)間比標(biāo)準(zhǔn)螢火蟲算法、文獻(xiàn)[13]所提算法運(yùn)行時(shí)間短,因此,本文改進(jìn)算法收斂速度略優(yōu)于對(duì)比算法收斂速度.由表3可得最小風(fēng)險(xiǎn)為0.205 9,表5為求得的最小風(fēng)險(xiǎn)所對(duì)應(yīng)的9支股票以及無風(fēng)險(xiǎn)投資比例.
4? ? 結(jié)論
本研究將正切函數(shù)引入螢火蟲步長更新中,將最優(yōu)個(gè)體引入螢火蟲搜索機(jī)制中,為算法設(shè)計(jì)了兩種變異算子,設(shè)計(jì)了一種改進(jìn)的螢火蟲算法,并將算法應(yīng)用于投資組合問題中.由仿真實(shí)驗(yàn)結(jié)果對(duì)比可知,無論是收斂效果還是收斂速度都較標(biāo)準(zhǔn)螢火蟲算法、文獻(xiàn)[13]中提出的改進(jìn)算法有了提高,驗(yàn)證了算法應(yīng)用于投資組合問題的可行性,對(duì)于解決投資組合問題具有重大意義.
參考文獻(xiàn)
[1]? ? ?MARKOWITZ H. Portfolio selection[J].Journal of Finance,1952,7(1):77-91. DOI:10.1111/j.1540-6261.1952.tb01525.x.
[2]? ? ?王蘋.風(fēng)險(xiǎn)管理測度VaR和TCE的實(shí)證研究[J].青島科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,26(4):373-376.
[3]? ? ?劉冬華,甘若迅,樊鎖海,等.基于捕食策略的粒子群算法求解投資組合問題[J].計(jì)算機(jī)工程與應(yīng)用,2013,49(6):253-256,261.
[4]? ? ?HUANG X X.Mean-semivariance models for fuzzy portfolio selection[J].Journal of Computational and Applied Mathematics,2008,217(1):1-8.
[5]? ? ?覃柏英,秦文東,林賢坤.多種群實(shí)數(shù)編碼遺傳算法在多峰函數(shù)優(yōu)化中的應(yīng)用[J].廣西科技大學(xué)學(xué)報(bào),2015,26(3):13-17,59.
[6]? ? ?段少楠,戴勝華.離散螢火蟲算法在高速列車運(yùn)行調(diào)整中的應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2018,54(15):209-213.
[7]? ? ?莫愿斌,馬彥追,鄭巧燕,等.單純形法的改進(jìn)螢火蟲算法及其在非線性方程組求解中的應(yīng)用[J].智能系統(tǒng)學(xué)報(bào),2014,9(6):747-755.
[8]? ? ?YANG X S. Nature-inspired metaheuristic algorithms[M].2nd ed. London:Luniver Press,2008.
[9]? ? ?任靜敏,潘大志.一種改進(jìn)的模擬退火螢火蟲混合算法求解0/1背包問題[J].綿陽師范學(xué)院學(xué)報(bào),2020,39(2):93-99.
[10]? ?卓宏明,陳倩清.螢火蟲算法參數(shù)分析與優(yōu)化[J].信息技術(shù)與網(wǎng)絡(luò)安全,2019,38(11):60-66.
[11]? ?張哲辰,劉三陽.基于拓?fù)涓倪M(jìn)與交叉策略的螢火蟲算法[J].計(jì)算機(jī)工程與應(yīng)用,2019,55(7):1-8.
[12]? ?莫愿斌,劉付永,張宇楠.帶高斯變異的人工螢火蟲優(yōu)化算法[J].計(jì)算機(jī)應(yīng)用研究,2013,30(1):121-123.
[13]? ?李恒,郭星,李煒.基于改進(jìn)的螢火蟲算法的PID控制器參數(shù)尋優(yōu)[J].計(jì)算機(jī)應(yīng)用與軟件,2017,34(7):227-230.
[14]? ?王付宇,湯濤.改進(jìn)萬有引力算法在流水作業(yè)排序中的應(yīng)用[J].廣西科技大學(xué)學(xué)報(bào),2020,31(2):80-85,117.