牛寶童 錢宇浛
摘? 要: 【目的】 將混合蛙跳算法的求解過程轉(zhuǎn)化為CUDA線程,提出并研究基于GPU的并行混合蛙跳算法,加快算法尋優(yōu)過程,提高混合蛙跳算法的運(yùn)算速度,以此促進(jìn)群體智能優(yōu)化算法的并行研究及應(yīng)用?!痉椒ā?本文采用了CPU+GPU異構(gòu)形式進(jìn)行計(jì)算,其中GPU負(fù)責(zé)對大規(guī)模的密集型數(shù)據(jù)進(jìn)行設(shè)計(jì)分析以及計(jì)算,而對于CPU來講,負(fù)責(zé)開展事務(wù)管理以及復(fù)雜邏輯運(yùn)算等不適合數(shù)據(jù)并行的計(jì)算模塊。【結(jié)果】 將混合蛙跳算法的求解過程轉(zhuǎn)化為CUDA線程,實(shí)現(xiàn)基于GPU的并行混合蛙跳算法。在GPU上加速執(zhí)行以提高算法運(yùn)行速度,在保證與串行混合蛙跳算法相同優(yōu)化性能的同時提高加速比。【結(jié)論】 (1)對于ISFLA算法它采用了并行調(diào)度的形式展開計(jì)算分析,對于虛擬機(jī)之間的負(fù)載起到了很好的平衡作用,減小了負(fù)載間的平衡度對于整體的工作時間來講起到了很好的縮短作用。(2)ISFLA算法產(chǎn)生的初始種群有著更好的質(zhì)量,這能夠?qū)⒁恍┍憩F(xiàn)不好的個體進(jìn)行排除,加快了整體的收斂速度,減小了進(jìn)行搜索迭代的時長。
關(guān)鍵詞: 混合蛙跳算法;圖形處理器;統(tǒng)一計(jì)算設(shè)備架構(gòu);群體智能優(yōu)化算法
中圖分類號: TP391.41 ???文獻(xiàn)標(biāo)識碼: A??? DOI:10.3969/j.issn.1003-6970.2020.07.031
本文著錄格式:牛寶童,錢宇浛. 基于GPU的混合蛙跳算法改進(jìn)[J]. 軟件,2020,41(07):152-158
Improved GPU-based Hybrid Frog Leaping Algorithm
NIU Bao-tong1, QIAN Yu-han2
(1. College of Information Science and Technology, Gansu Agricultural University, Lanzhou 730070, Gansu, China;2. China Aerospace Science and Technology Corporation,Ninth Research Institute, Beijing 100094, China)
【Abstract】: [Objective] Transform the solution process of the hybrid frog leap algorithm into a CUDA thread, propose and study a parallel hybrid frog leap algorithm based on GPU, speed up the algorithm optimization process, increase the operation speed of the hybrid frog leap algorithm, and promote parallel research and application of swarm intelligent optimization. [Method] It adopts the CPU + GPU heterogeneous model. The CPU is responsible for performing complex logic processing and transaction management that are not suitable for data parallel computing. The GPU is mainly responsible for computing-intensive large-scale data parallel computing. [Results] The solution process of the hybrid frog leap algorithm is transformed into a CUDA thread, and a parallel hybrid frog leap algorithm based on GPU is realized. Accelerate the execution on the GPU to increase the speed of the algorithm, and improve the speedup while ensuring the same optimized performance as the serial hybrid frog leap algorithm. [Conclusion] (1) The ISFLA algorithm uses a parallel scheduling model to execute tasks, which effectively balances the load between virtual machines, reduces the load balance degree, and shortens the overall completion time of the workflow. (2) The quality of the initial population generated by ISFLA is better, which can effectively exclude some poorly performing individuals, thereby shortening the search iteration time and accelerating the convergence speed.
【Key words】: Hybrid frog jumping algorithm; graphics processor; unified computing device architecture; swarm intelligence optimization algorithm
0? 引言
目前伴隨著科學(xué)技術(shù)的快速發(fā)展,在進(jìn)行科研以及日常活動中經(jīng)常會碰到一些需要進(jìn)行最優(yōu)化求解的問題,對于最優(yōu)化求解的問題如何獲得一種既簡單有高效的方式目前成為眾多學(xué)者要開展研究的主要方向之一。目前來看,眾多的學(xué)者已在眾多的領(lǐng)域開展了混合蛙跳算法的應(yīng)用,來獲得更好的最優(yōu)解,目前也已經(jīng)取得了重要的成果。
混合蛙跳算法的靈感來自于對大自然中集體覓食的青蛙,針對這種覓食性行為開展了智能的仿生學(xué)算法,這種算法中存在以下優(yōu)點(diǎn)即:思想容易理解、可變因子數(shù)目少、并行的搜索項(xiàng)目少等,這些優(yōu)點(diǎn)使它成為了在求解最優(yōu)化問題的關(guān)鍵,但是這種算法也存在它的弊端,比如:較慢的收斂速度以及過度依賴初始值等。
在GPU和CPU同時作用環(huán)境下展開的資源調(diào)配,進(jìn)過眾多的研究主要包含了下面兩種方法:
當(dāng)出現(xiàn)了資源設(shè)備存在較多的任務(wù)需求時,可以采用優(yōu)先分配的原則來將這些資源進(jìn)行分配,但是分配方案存在單一性,考慮的問題無法滿足客戶的要求。
如果出現(xiàn)資源設(shè)備空閑了大量的資源,我們可以將一些任務(wù)分配給這樣的設(shè)備
綜上所述,本文研究重點(diǎn)為設(shè)計(jì)出一種既能保障負(fù)載均衡又能保障計(jì)算速度的先進(jìn)行的資源分配方案。
本文的通過分析研究,將混合蛙跳算法進(jìn)行改進(jìn),同時在CPU+GPU的環(huán)境中展開新型算法的研究。由于原有的混合蛙跳算法在GPU運(yùn)算時存在一系列的缺點(diǎn),容易陷入到局部最優(yōu)的環(huán)境中,同時在群組中交流較少,所以對其進(jìn)行改進(jìn),改進(jìn)厚的算法較少了工作流完成時間和提高搜索效率兩方面工作。
1 ?研究背景及意義
人類發(fā)展至今,在開展一系列的生產(chǎn)活動中針對于要進(jìn)行解決的問題,都會在眾多的方案中進(jìn)行比較分析以及判斷,來得出一種最佳的解決方案,這一過程我們就可以將其看成為最優(yōu)化問題[1]。這也是一個古老的研究課題,對于最優(yōu)化求解問題,就是指在進(jìn)行滿足一系列的條件要求下,來得出一套最優(yōu)的問題解決方法或參數(shù),將問題圓滿的解決。
對于最優(yōu)化問題的求解主要包含以下兩種方法即構(gòu)造型及經(jīng)典型算法。構(gòu)造型算法[3]主要通過一定的原理來實(shí)現(xiàn)構(gòu)造形式來解決具體的問題,效率比較高但是求解的質(zhì)量難以保障,采用不同的規(guī)則原理也同樣會對解的質(zhì)量產(chǎn)生重要影響,對于該算法應(yīng)用比較典型的實(shí)例為訥河算法以及約翰遜-貝爾曼法則。而經(jīng)典算法則是依據(jù)數(shù)學(xué)計(jì)算展開比如:單純形法以及牛頓法等[2],該算法在初始階段會選擇一個初始解,并按照一定的方式完成最優(yōu)解的搜索,當(dāng)出現(xiàn)滿足要求的情況則停止搜索,但是該方法存在一定的局限性,比如對于全局的搜索速度過慢,同時難以達(dá)到最優(yōu)解。對于存在高維度、非線性、不可微分等眾多復(fù)雜的優(yōu)化問題,上述兩種方法對于具有這種特征的問題難以解決,為了能能更加完美的解決該問題,學(xué)者們經(jīng)過研究提出了群體智能算法[4],該方法也稱為鄰域搜索算法。該方法起點(diǎn)一般選取若干臨時解,在特定的規(guī)則下,對這些解的鄰域展開搜索,并且通過迭代替換來提高求解的質(zhì)量。該方法主要是并行計(jì)算,來在短時間內(nèi)取得最優(yōu)解,防止陷入局部最優(yōu)情況。
混合蛙跳算法[5]為近幾年迅速興起的一種新型算法,在群體智能算法這一領(lǐng)域中逐漸占有重要的地位,該算法由Kevin E.Lansey以及Muzaffar M.Eusuff兩位學(xué)者提出[6],他們通過對青蛙覓食行為的深入研究,得到的仿生智能算法,這種算法有著信息共享以及交互的能力,同時結(jié)構(gòu)框架也非常的簡單,但是也存在一定的缺點(diǎn),比如容易陷入局部優(yōu)化等,該算法目前在應(yīng)用以及理論研究中并不是很成熟,所以如何更好的改進(jìn)這種算法的性能,已成為眾多學(xué)者研究的重點(diǎn)。
因此,本篇論文將針對現(xiàn)有的混合蛙跳算法理論以及成果,以及算法本身存在的缺點(diǎn)[7],有針對性的開展相關(guān)研究,從高效和運(yùn)算速度兩方面來進(jìn)行創(chuàng)新和改進(jìn),并將其與CPU+GPU相結(jié)合,實(shí)現(xiàn)異構(gòu)形式,該論文將改進(jìn)后的混合蛙跳算法投入到工作流完成時間和搜索效率試驗(yàn)中,取得了很好的效果。
2 ?混合蛙跳算法機(jī)理
SFLA是一種全新的啟發(fā)式群體進(jìn)化算法[8],具有高效的計(jì)算性能和優(yōu)良的全局搜索能力。在模擬青蛙覓食過程時,假定在一片濕地生活著一群青蛙,首先,按照種群將青蛙分成多個子群,各子群中通過內(nèi)部信息交流來優(yōu)化內(nèi)部個體;然后,為了實(shí)現(xiàn)全局的信息交換,再按照優(yōu)劣順序融合子群中的青蛙個體進(jìn)行排序,之后再按照之前劃分的規(guī)則劃分青蛙種群。經(jīng)過模擬可看出,混合蛙跳算法可以通過局部信息的交流和全局信息交換相結(jié)合的方式搜索尋優(yōu),便于一定程度上推遲局部極值點(diǎn)的出現(xiàn)。SFLA相關(guān)的概念見表1。
4 ?改進(jìn)混合蛙跳算法的并行實(shí)現(xiàn)
4.1 ?CUDA動態(tài)并行技術(shù)
當(dāng)前,該動態(tài)并行技術(shù)中是在host端調(diào)用全部的kernel,同時CPU負(fù)責(zé)控制GPU的具體運(yùn)行狀態(tài)以及工作內(nèi)容。device端GPU kernel的創(chuàng)建以及調(diào)用,由CUDA Dynamic Parallelism進(jìn)行控制。CUDA Dynamic Parallelism的使用降低了遞歸算法的調(diào)用難度以及增強(qiáng)了它的可理解性,同樣它的啟動配置是由device上運(yùn)行中的thread來決定,這種方式可以極大地降低device與host之間的控制執(zhí)行以及數(shù)據(jù)傳遞。本文利用CUDA動態(tài)并行技術(shù),把迭代的過程都遷移到GPU上進(jìn)行,減少CPU和GPU之間的數(shù)據(jù)傳輸和指令的延遲。
在算法中,由于遞歸比較消耗資源,所以如果可以的話最好是展開,但在本文中我們要實(shí)現(xiàn)遞歸,這部分主要就是再次證明DynamicParallelism的好處,有了它就可以實(shí)現(xiàn)像C那樣寫遞歸代碼了。
kernel的調(diào)用增加了一個參數(shù)iDim,這是因?yàn)槊看芜f歸調(diào)用,child block的大小就減半,parent 的blockDim必須傳遞給child grid,從而使每個thread都能計(jì)算正確的global memory偏移地址。注意,所有空閑的thread都被移除了。相較于之前的實(shí)現(xiàn),每次都會有一半的thread空閑下來而被移除,也就釋放了一半的計(jì)算資源。以下為運(yùn)行在Kepler K40上的結(jié)果:
1. $ nvcc -arch=sm_35 -rdc=true nestedReduce. cu -o nestedReduce -lcudadevrt
2. /nestedReduce starting reduction at device 0: Tesla K40c
3. array 1048576 grid 2048 block 512
4. cpu reduce elapsed 0.000689 sec cpu_sum: 1048576
5. gpu Neighbored elapsed 0.000532 sec gpu_ sum: 1048576<<
6. gpu nested elapsed 0.172036 sec gpu_sum: 1048576<<
對于一個給定的算法,我們可以有很多種實(shí)現(xiàn)方式,避免大量的nested調(diào)用可以提升很多性能。同步對算法的正確性至關(guān)重要,但也是一個消耗比較大的操作,block內(nèi)部的同步操作倒是可以去掉。因?yàn)樵赿evice上運(yùn)行nested程序需要額外的資源,nested調(diào)用是有限的。如圖2所示,本文中的cuda代碼中已經(jīng)把處理過程都放到了sfla這個核函數(shù)里進(jìn)行處理。
4.2 ?生成隨機(jī)數(shù)
curand由兩部分組成:host端的庫和device端的頭文件。host端的庫就像其他的CPU庫一樣curand.h,隨機(jī)數(shù)可以在設(shè)備端生成或者CPU端生成。在設(shè)備端生成的時候,對庫的調(diào)用發(fā)生在host端,但是隨機(jī)數(shù)的生成實(shí)際上發(fā)生在device端,隨機(jī)數(shù)存儲在global memory中,用戶可以調(diào)用kernel直接使用這個隨機(jī)數(shù),也可以將此隨機(jī)數(shù)拷貝回kernel。
device端的庫頭文件curand_kernel.h,這個頭文件里面定義了設(shè)置隨機(jī)數(shù)生成器的狀態(tài)以及生成一系列隨機(jī)數(shù)的設(shè)備函數(shù),使得kernel可以調(diào)用函數(shù)生成隨機(jī)數(shù),而不需要從global memory處讀寫。
生成隨機(jī)數(shù)除了可以使用不同的算法(由參數(shù)決定)以外,還能生成不同分布、不同浮點(diǎn)類型的隨機(jī)數(shù),這根據(jù)調(diào)用的生成隨機(jī)數(shù)的API決定。
如圖3所示,本文選用的API是curand_uniform,用于生成服從均勻分布的float。
4.3 ?轉(zhuǎn)換一維線性儲存結(jié)構(gòu)
目前,取隱藏和減少latency的措施分為兩種:
(1)首先內(nèi)存的讀取是要通過眾多線程采用并行的方式不斷進(jìn)行,并行的概念可以理解為在讀取thread內(nèi)存過程中,每讀到一個內(nèi)存在等待計(jì)算其結(jié)果的時候,GPU可以立即讀取下一個內(nèi)存,同時切換到接下來的一個thread,其目的是將latency最大限度的進(jìn)行隱藏。
(2)在內(nèi)存中通過采用連續(xù)存儲方式,最大限度地減少latency。
而通過分散訪問可以有效提高單位時間內(nèi)的訪問次數(shù),warp在進(jìn)行不同地址數(shù)據(jù)之間的訪問過程中,這些數(shù)據(jù)是離散的,其結(jié)果造成warp無法合并進(jìn)行這些數(shù)據(jù)并進(jìn)行訪問,在一個flot由每一個thread進(jìn)行訪問的過程中,其總的訪存指令需要被進(jìn)行32次。如圖4所示,在L1范式分散訪問中,當(dāng)訪存請求的內(nèi)存在0~383區(qū)間時,cache的有效率計(jì)算為128/384=33%。
針對L2范式,在同樣的scatterd情況下,它的cache的有效率為128/192=67%,該結(jié)果具相比L1具有更高的優(yōu)勢。
如圖6所示,本文通過將二維結(jié)構(gòu)轉(zhuǎn)換為一維線性儲存結(jié)構(gòu),能提高內(nèi)存訪問的效率。
4.4 ?創(chuàng)建共享內(nèi)存儲存最優(yōu)解
請求多次執(zhí)行的現(xiàn)象會因?yàn)閎ank conflict的發(fā)生而發(fā)生,其根本原因是同一個bank中收到了多個地址的請求。當(dāng)這種情況發(fā)生時,這種請求會被最大程度上分散到?jīng)]有conflict的操作中。被分散到的傳輸操作個數(shù)是將有效帶寬進(jìn)行降低的一個因素,獲得shared memory的經(jīng)典方式在warp中主要有 三種:
(1)一次傳輸可以將一些或者全部的地址請求全部解決,這種模式主要是在Parallel access模式中,這種模式的含義就是如此,就是在得到?jīng)]有conflict的shared memory的過程中,不同的地址都會存放在不同的bank里面,這是它的理想狀態(tài)。
(2)當(dāng)warp中的32個thread在訪問bank過程中,沒有重復(fù)現(xiàn)象發(fā)生,即每個thread對應(yīng)了不同的位置,那就表示這是單獨(dú)的訪問,這種方式又被稱為Serial access模式,這種情況是我們最不愿意看到的情況。
(3)另一種模式是Broadcast access模式,這種模式只執(zhí)行一次傳輸,之后所有發(fā)出請求的thread都會收到傳輸?shù)慕Y(jié)果,這樣必然會降低帶寬的利用效率。
訪問圖示如下所示。
最優(yōu)情況的是,不一樣的bank值可以被分配到同一個的warp中的thread,用連續(xù)的threadIdx.x可以確定相同warp中的thread值,這里將以word的大小作為偏移量,將bank中的元素進(jìn)行連續(xù)存儲。所以shared Memory中的地址最好能夠使用由具有連續(xù)性的thread來確定,而thread的連續(xù)性可以通過threadIdx.x的連續(xù)性來保證。最終我們可以得到tile[threadIdx.y][threadIdx.x]使能夠表現(xiàn)出更加優(yōu)異的成績以及bank conflict的最少化。綜上,如圖8所示,可以通過創(chuàng)建共享內(nèi)存儲存最優(yōu)解,來提高讀取效率。
4.5 ?分配線程處理
在實(shí)際運(yùn)行CUDA的過程中,我們將每個block分配到SM中計(jì)算,這里是以block為單位進(jìn)行,同樣warp作為block中thread的單位,將thread分組,然后對每組進(jìn)行相關(guān)的計(jì)算,這里常取32個thread作為一個組,形成一個warp來共同執(zhí)行,這也是當(dāng)前CUDA中warp的大小是32的原因。同一個warp中的thread執(zhí)行的指令是相同的,只是處理的數(shù)據(jù)不同。
通常情況下,我們以連續(xù)的方式進(jìn)行分組,并且該過程是通過SM自動進(jìn)行,最終完成warp的分組行為。一個block中的每個warp通常會被SM以一次一個的形式來執(zhí)行,不過一個warp中的所有指令并不會被SM一次性全部執(zhí)行完成。當(dāng)前正在被執(zhí)行的warp需要延遲的時候,比如global memory的存儲就會耗費(fèi)很長時間,此時通過調(diào)節(jié)其它warp來進(jìn)行繼續(xù)的工作,從而可以提高整體的工作效率。所以,當(dāng)SM中有足夠多的warp可以進(jìn)行調(diào)用和調(diào)節(jié)時,此時的效率最高;這樣不會發(fā)生全部warp都需要延時處理的情況發(fā)生,即耗費(fèi)運(yùn)算時間。
每個在CUDA中的SM的最小執(zhí)行單位可以看作是warp,當(dāng)我們的GPU有16組SM時,可以進(jìn)行的實(shí)際thread數(shù)目能夠達(dá)到32*16,但是因?yàn)閠hread的等待、延遲等需要被隱藏,并且該種隱藏方式正是由CUDA經(jīng)warp的切換來實(shí)現(xiàn)的,最終可以實(shí)現(xiàn)平行化的數(shù)量最大化的目標(biāo)。因此同一時間在一個SM中可以處理的thread數(shù)目可以通過名為active thread的指標(biāo)來進(jìn)行描述。另一個方面就是在block方面,多個thread block可以在同一時間由一個SM進(jìn)行處理,若一個block中的所有thread被計(jì)算完成之后,算法會繼續(xù)尋找另外沒有完成處理的block進(jìn)行處理?,F(xiàn)在若存在64個block、16個SM,一個SM對應(yīng)三個block,在算法的開始階段,device會同時進(jìn)行48個block的處理,當(dāng)有SM處理完block之后會進(jìn)行剩余block的處理,直至處理完全部的block。
所以本文在啟動核函數(shù)時,需要為每個frog分配一個線程進(jìn)行處理,如圖9所示。
5? 結(jié)果討論
5.1? 工作流完成時間試驗(yàn)
工作任務(wù)的調(diào)度對于負(fù)載平衡情況的影響可以從工作流完成時間的長短來進(jìn)行判斷,在虛擬機(jī)上的等待的隊(duì)列越長那么體現(xiàn)為負(fù)載的平衡程度越高,進(jìn)而說明完成全部工作流所需要的時間邊長了。本文設(shè)計(jì)實(shí)驗(yàn)的參數(shù)設(shè)置為:迭代次數(shù)分別定為100,200,400和800,固定迭代次數(shù)不變,不同算法對于工作流的完成情況是由不同的任務(wù)數(shù)來進(jìn)行對比體現(xiàn),最終體現(xiàn)在時間的變化上,其結(jié)果如圖10。
通過圖10可以看出,完成工作流所用時間最少的調(diào)度方案是并行蛙跳實(shí)驗(yàn)ISFLA算法,本文用的是其改進(jìn)算法。3種算法的運(yùn)行時間差異比較小的原因主要是在任務(wù)數(shù)小于1000的情況下,因?yàn)榇藭r受虛擬資源充沛的影響,沒有發(fā)生超負(fù)載現(xiàn)象。超負(fù)載現(xiàn)象是隨著任務(wù)數(shù)量的增加而增加的,通過圖5可以明顯看出,完成所有工作流的時間上,ISFLA算法得到的方案最低。主要是該算法將虛擬機(jī)之間的負(fù)載之間進(jìn)行了有效的平衡,大大減少了全部工
5.2 ?搜索效率試驗(yàn)
ISFLA算法在應(yīng)用過程中,其局部搜索所耗費(fèi)的時間很大程度上取決于初始化中種群的質(zhì)量,所以初始化階段產(chǎn)生的個體對于該算法在后續(xù)的全局搜索中有很大的影響,將改進(jìn)的混合蛙跳算法用于初始化是否優(yōu)于隨機(jī)方式產(chǎn)生的初始化群體時我們這次進(jìn)行實(shí)驗(yàn)的主要目的,本實(shí)驗(yàn)采用的初始化數(shù)據(jù)群是由兩種不同策略產(chǎn)生的,然后將其分別應(yīng)用在ISFLA算法中,比較算法在局部搜索過程中耗費(fèi)的時間以及任務(wù)數(shù)量的關(guān)系,結(jié)果如圖11。
從上圖中可以看出,迭代次數(shù)一定,在局部搜索過程中兩種方法都會隨著工作流任務(wù)數(shù)量的增加而增大,但是ISFLA算法中提出的時間貪心理念使得其在搜索過程中時間的增長更加平穩(wěn)??v向來看,搜索迭代時間在經(jīng)過ISFLA算法初始化種群之后較原算法有很大的降低。主要是因?yàn)镮SFLA算法初始化種群中的個體更加具有可計(jì)算性、穩(wěn)定性、以及代表性,減少了差異化個體的產(chǎn)生幾率,從而可以降低算法運(yùn)行時間,也使得算法的收斂速度進(jìn)一步提高。
參考文獻(xiàn)
肖曉偉, 肖迪, 林錦國等. 多目標(biāo)優(yōu)化問題的研究概述[J]. 計(jì)算機(jī)應(yīng)用研究, 2011(03): 11-14+33.
李淑萍, 閆坤, 李環(huán)等. 利用單純形法優(yōu)化點(diǎn)到曲面的最近距離[J]. 圖學(xué)學(xué)報, 2006, 27(1): 116-118.
劉金琨, 孫富春. 滑模變結(jié)構(gòu)控制理論及其算法研究與進(jìn)展[J]. 控制理論與應(yīng)用, 2016, 24(03): 407-418.
李素, 袁志高, 王聰?shù)? 群智能算法優(yōu)化支持向量機(jī)參數(shù)綜述[J]. 智能系統(tǒng)學(xué)報, 2018, 13(01): 70-84.
崔文華, 劉曉冰, 王偉等. 混合蛙跳算法研究綜述[J]. 控制與決策, 2012(04): 3-8+15.
EUSUFF M M, LANSEY K E. Optimization of Water Distribution Network Design Using the Shuffled Frog Leaping Algorithm[J]. Journal of Water Resources Planning & Management, 2003, 129(3): 210-225.
趙鵬軍, 劉三陽. 求解復(fù)雜函數(shù)優(yōu)化問題的混合蛙跳算法[J]. 計(jì)算機(jī)應(yīng)用研究, 2009(07): 41-43.
羅雪暉, 楊燁, 李霞. 改進(jìn)混合蛙跳算法求解旅行商問題[J]. 通信學(xué)報, 2009, 30(7): 130-135.
王麗萍, 孫平, 蔣志強(qiáng)等. 基于并行云變異蛙跳算法的梯級水庫優(yōu)化調(diào)度研究[J]. 系統(tǒng)工程理論與實(shí)踐, 2015, 35(3): 790-798.
陽春華, 錢曉山, 桂衛(wèi)華. 一種混沌差分進(jìn)化和粒子群優(yōu)化混合算法[J]. 計(jì)算機(jī)應(yīng)用研究, 2011, 28(2): 439-441.
易文周, 田立偉. 一種基于混沌搜索和鯰魚效應(yīng)策略的粒子群算法[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2013, 30(5): 311-315.
姜偉, 王宏力, 何星, 等. 并行免疫離散粒子群優(yōu)化算法求解背包問題[J]. 系統(tǒng)仿真學(xué)報, 2014, 26(1): 56-61.
紀(jì)昌明, 劉方, 彭?xiàng)畹? 基于鯰魚效應(yīng)粒子群算法的水庫水沙調(diào)度模型研究[J]. 水力發(fā)電學(xué)報, 2013, 32(1): 70-76.
金榮洪, 袁智皓, 耿軍平等. 基于改進(jìn)粒子群算法的天線方向圖綜合技術(shù)[J]. 電波科學(xué)學(xué)報, 2006, 21(6): 873-878.