新聞中心

EEPW首頁 > EDA/PCB > 設(shè)計應用 > 硬件化演化算法在函數(shù)優(yōu)化上的運用

硬件化演化算法在函數(shù)優(yōu)化上的運用

作者:張金柱,朱志敏,潘偉豐 時間:2008-10-31 來源:現(xiàn)代電子技術(shù) 收藏

1 引 言

本文引用地址:http://butianyuan.cn/article/89101.htm

  演化計算是一種借鑒生物演化和自然遺傳選擇的思想和原理來求解實際問題的一種極為有效的方法,它的根本思想是Darwin的進化論和Mendel的遺傳學說,具有智能性、并行性和魯棒性等特征。演化計算是一種基于種群的搜索算法,它在搜索的過程中具有將適應值好的個體保存到下一代的特點,再通過選擇、交叉和變異等遺傳操作來產(chǎn)生更適應環(huán)境的后代。演化計算提供了一種求解復雜系統(tǒng)優(yōu)化問題的通用框架,它不需要事先描述問題的全部特點,它不依賴于問題的具體領(lǐng)域,對問題的種類有很強的魯棒性,所以廣泛應用于眾多學科,也被廣泛應用與求解各種問題,但是它也具有一個突出的問題,演化速度比較慢,不大適合與實時運用的場合。

  隨著微電子技術(shù)的迅速發(fā)展,大規(guī)模集成電路加工技術(shù)不斷發(fā)展,可編程邏輯器件(PLD)問世,它由于具有集成度高、速度快、功耗低、價格低等優(yōu)點在很多領(lǐng)域都日益發(fā)揮著重要的作用。而現(xiàn)場可編程門陣列(FPGA)是近幾年加入到用戶可編程電路行列的器件,它的設(shè)計為器件的選擇和內(nèi)連提供了更大的自由度,它的結(jié)構(gòu)包括由邏輯功能塊構(gòu)成的陳列和連接這些邏輯功能塊的可編程內(nèi)部連線2個部分。FPGA可以由用戶的設(shè)計而動態(tài)地改變其內(nèi)部的功能結(jié)構(gòu),其設(shè)計周期短、修改、擴充、維護方便,用FPGA實現(xiàn)的系統(tǒng)成本低,升級容易,而且隨著電子設(shè)計自動化技術(shù)(EDA)和VHDL,AHDL等硬件描述語言的不斷完善,用戶只要進行行為級、功能級的描述,則像AlteraⅡ等開發(fā)環(huán)境會自動將其生成為對最終硬件進行配置的網(wǎng)表文件,開發(fā)設(shè)計簡單。這些特點為在硬件系統(tǒng)實現(xiàn)演化算法、提高演化算法的速度、擴大演化算法的實時應用提供了可能性。

  本文正是基于以上這些考慮,用Altera公司的CycloneⅡ型號的FPGA,并用VHDL實現(xiàn)了一種比較先進的演化算法,并用該硬件化演化算法求解問題。最后的實驗結(jié)果表明,用這種硬件化的演化算法大大地提高了演化算法的運算速度,為演化算法在實時場合的運用提供可能性。

2 演化算法硬件化構(gòu)造

  演化算法的硬件化和演化算法的軟件實現(xiàn)存在很大的不同,演化算法的軟件實現(xiàn)只需考慮軟件的功能實現(xiàn)就可以,很多演化算法中的特殊的算子,復雜的算子只要在理論上可行,實現(xiàn)的時候基本上不會存在什么大的問題,但當硬件實現(xiàn)時,問題會變得比較復雜。

2.1 演化算法的軟件實現(xiàn)思路

  演化算法的軟件實現(xiàn),是借助某一種高級語言,譬如:VC,Java等來實現(xiàn)演化算法的過程。在實現(xiàn)一個典型的演化算法過程中一般包括以下幾個問題:編碼、初始種群的生成、適應度評價函數(shù)設(shè)計和選擇、交叉、變異算子的設(shè)計。

  軟件實現(xiàn)各個部分含義為:

  (1)編碼的軟件實現(xiàn):編碼是演化算法求解問題的前提,因為演化算法一般不直接處理問題空間中的變量,而只能通過編碼將問題空間轉(zhuǎn)化為解空間。目前比較流行的編碼技術(shù)包括:二進制編碼、格雷碼編碼、實數(shù)編碼、符號編碼、排列編碼、二倍體編碼、DNA編碼、混合編碼、二維染色體編碼和矩陣編碼等。

  由于目前的高級語言基本上都支持所有的數(shù)據(jù)類型,包括:整型、實數(shù)型、字符型等,所以上面的各種數(shù)據(jù)類型基本上都可以實現(xiàn)。

  (2)初始化種群的軟件實現(xiàn):初始種群的生成也就是隨機地產(chǎn)生N個個體組成1個初始種群,該種群代表一些可能解的集合。

  在軟件實現(xiàn)時,若選擇的編碼方式是實數(shù)編碼,一般都是用一個偽隨機數(shù)發(fā)生器,在高級語言中通常就random()函數(shù)生成個體;若選擇的編碼方式是二進制編碼,一般是按照概率生成一個個體中的每個1或是0;若是字符編碼的,通常就是轉(zhuǎn)化一下,通常也是將特定的字符替換成某一數(shù)字,生成該字母序列個體同樣也就轉(zhuǎn)化為生成該數(shù)字序列。

  (3)適應度評價函數(shù)的軟件實現(xiàn):適應度函數(shù)是用來進行個體評價,判斷個體適應性能優(yōu)劣的方法,該數(shù)值通常是作為個體選擇的依據(jù),對整個算的運行,算法的性能有重要的影響。

  在軟件實現(xiàn)時,通常是將該函數(shù)設(shè)計成一個獨立的函數(shù)或是子過程,在每個需要重新計算個體適應值的地方只要調(diào)用該函數(shù)就可以。

  (4)遺傳算子的軟件實現(xiàn):遺傳算子主要有選擇、交叉和變異3大算子。

  選擇算子就是按一定概率從群體中選擇M對個體,作為雙親用于繁殖后代,產(chǎn)生的新個體加入下一代種群。選擇過程體現(xiàn)了自然界適者生存的思想。軟件實現(xiàn)時,一般是每次選擇時都產(chǎn)生1個隨機數(shù),以隨機數(shù)是否小于某一特定的數(shù)作為是否選擇的判斷條件。

  雜交算子就是對于選中的用于繁殖的每一對個體,將雙親的基因型在某個位置斷開,相互交換編碼。軟件實現(xiàn)時,一般是先按照上面的選擇中的方法選擇2個個體,對于二進制編碼的隨機的在個體中選擇1個或2個位置,進行交換。對于實數(shù)編碼,一般是產(chǎn)生2個和惟一的隨機數(shù),然后將上面的2個個體按這2個隨機數(shù)為比例求乘積和。

  變異算子是按一定的概率從種群中選擇若干個個體。對于選中的個體,隨機選擇某一位進行取反操作(二進制編碼)或是對個體進行微小的調(diào)整,加上或是減去某個數(shù)。軟件實現(xiàn)時,對于二進制編碼,一般先產(chǎn)生一個隨機數(shù),判斷該隨機數(shù)與某一個特定的數(shù)之間的大小,若小于該數(shù)就對個體中某一位或是幾位進行取反操作;對于實數(shù)編碼一般是以概率對個體進行微調(diào)。

2.2 硬件結(jié)構(gòu)設(shè)計

2.2.1 從軟件實現(xiàn)抽象硬件模塊

  要實現(xiàn)演化算法的硬件化,必須將演化算法的各個部分都獨立的在FPGA板上實現(xiàn)。在具體對演化算法實現(xiàn)模塊劃分的過程中必須遵循這樣一個原則:“功能相近的,操作類似的部分劃分在一個模塊中”。因此,根據(jù)上面對演化算法軟件實現(xiàn)的各個部分的分析可以做如下的劃分:

  (1)將軟件實現(xiàn)中初始化種群單獨抽象為硬件實現(xiàn)時的pop_initial模塊;

  (2)將軟件實現(xiàn)中適應度評價單獨抽象為硬件實現(xiàn)時的fitness模塊;

  (3)將軟件實現(xiàn)中選擇操作單獨抽象為硬件實現(xiàn)時的choose模塊;

  (4)將軟件實現(xiàn)中交叉、變異抽象為硬件實現(xiàn)時的crossover_mutation模塊;

  (5)為了進行個體的讀寫還需要2個內(nèi)存模塊,分別保存?zhèn)€體和其適應值;

  (6)為了使這么多模塊互相之間相互協(xié)作的完成任務(wù)還需要一個控制模塊control模塊,類似與軟件實現(xiàn)中的CPU協(xié)調(diào)控制程序的運行。

2.2.2 硬件系統(tǒng)整體結(jié)構(gòu)圖及解釋

  (1)硬件系統(tǒng)整體結(jié)構(gòu)圖

  硬件系統(tǒng)整體結(jié)構(gòu)圖如圖1所示。

 

  (2)系統(tǒng)各模塊功能解釋如下:

  Control模塊 該模塊好比軟件實現(xiàn)的時候的CPU控制著整個系統(tǒng)的協(xié)調(diào)工作。它的主要功能是產(chǎn)生一些控制信號,控制各個模塊的啟動、停止,并為各個模塊的同步提供協(xié)調(diào)信號。具體講:它提供各個模塊的時鐘信號,同步各個模塊;接收來自Random1模塊的2個隨機地址,從RAM模塊中選擇個體和其對應的適應值將其傳到Choose模塊;接收來自Choose模塊和Crossover_mutation模塊的狀態(tài)信號,控制其發(fā)出的對其他模塊的控制信號;控制多路數(shù)據(jù)選擇器、Initial模塊和RAM模塊的啟動等。

  Initial模塊 該模塊即是初始化模塊,它內(nèi)部主要是由一個隨機數(shù)模塊構(gòu)成的,用來產(chǎn)生一定數(shù)量的隨機數(shù)序列作為初始種群。

  Fitness模塊 該模塊用來計算個體的適應值。一般根據(jù)軟件實現(xiàn)中適應值函數(shù)的不同,該模塊內(nèi)部主要是由一些加法器、鎖存器和乘法器構(gòu)成(在中)。

  Choose模塊 該模塊主要實現(xiàn)選擇2個個體的功能。當該模塊啟動,并從存儲模塊接受2個個體和其適應值后,采用聯(lián)賽競爭機制選擇兩者中的1個進入下一模塊,如此再選擇1次,選擇2個要進入交叉變異模塊的個體。

  交叉變異模塊 該模塊在啟動后,接收Choose模塊傳來的2個個體,并按照隨機數(shù)模塊產(chǎn)生的隨機數(shù)確定交叉點,進行交叉和變異。

  多路數(shù)據(jù)選擇模塊 對進入fitness模塊的個體進行分時控制。

  Ramdom1模塊 該模塊為選擇模塊選擇個體和適應值提供2個隨機的地址。

  Ramdom2模塊 該模塊為交叉變異模塊提供交叉和變異的概率。

  Ram模塊 主要是用于保存?zhèn)€體和其適應值。具體實現(xiàn)時,我們常用了Altera公司提供的IP core生成2個雙端口的ram。

  (3)系統(tǒng)總執(zhí)行過程:系統(tǒng)通過Control模塊中的一個始終上升沿啟動,隨后啟動Intial模塊產(chǎn)生初始種群,并對其產(chǎn)生的個體進行計數(shù),在達到規(guī)定的種群數(shù)量后停止Intial模塊,控制模塊控制多路數(shù)據(jù)選擇器對Intial模塊選通,并讓產(chǎn)生的初始個體進入Fitness模塊計算適應值,并存入相應的RAM地址中;接著控制模塊啟動Choose模塊,Ramdom1模塊隨機的產(chǎn)生2個地址,并選擇該地址中的個體作為選擇的個體,運用聯(lián)賽選擇選擇其一,如此選擇2次,產(chǎn)生2個用于Crossover_mutation模塊的個體,Crossover_mutation模塊在Ramdom2模塊產(chǎn)生的隨機數(shù)控制下對2個個體實施交叉變異,產(chǎn)生2個個體,控制模塊選通多路數(shù)據(jù)選擇模塊對Crossover_mutation模塊選通,使產(chǎn)生的新個體通過Fitness模塊將個體和適應值存入RAM中相應的位置。接著長運行上述過程一直到產(chǎn)生規(guī)定數(shù)量的個體,控制模塊結(jié)束整個系統(tǒng)的運行。

  (4)硬件實現(xiàn):整個系統(tǒng)用VHDL語言編程實現(xiàn)上述各功能模塊,在AlteraⅡ5.0環(huán)境下進行仿真。選用Altera公司CycloneⅡ型號的FPGA系列進行設(shè)計。Ram塊用Altera IP core中的雙端口RAM。

3 實 驗

  在本部分中,首先對上述提到的各個模塊進行獨立的仿真,然后再將其運用在一個函數(shù)的優(yōu)化問題上,并與其他同問題軟件實現(xiàn)的算法進行比較。

  (1)以下對上述提到的模塊進行獨立測試時候的仿真圖如圖2所示:

 

  圖2為初始化模塊仿真波形圖。從圖中可以看出,當復位信號reset initial有效以后,立即對“r1_initial信號”和“r2_initial信號”賦初值,然后在下一個時鐘的上升沿(5 ns處),初始化開始,每次產(chǎn)生2個個體。

  圖3為Fitness模塊仿真圖,適應度模塊足個邏輯模塊,只要輸入的個體發(fā)生改變,其輸出也就相應改變。圖3即為仿真后的波形圖,此時輸出信號的右側(cè)有值。上述實現(xiàn)的是f(x)=-∣x∣的求值,這里可以看到:當ina_fitness為“000000001”(實數(shù)1)和inb_fitness為“000000011”(實數(shù)3)時候,outa_fitness為“100000001”(實數(shù)-1)、outb_fitness為“100000011”(實數(shù)-3)。

 

  圖4為Random模塊仿真圖。圖4中左側(cè)的是信號名稱,中間是信號的值,右側(cè)是信號的波形圖。由圖4可以看出,在復位信號reset_radom2未變高之前,輸出的2個隨機數(shù)的值是初始值0;當復位信號有效后,2個輸出立即由0轉(zhuǎn)為2個非0的輸出。

 

  圖5是選擇模塊開始進入工作狀態(tài)前后的仿真波形圖。當current|_state為current_state_idle時,系統(tǒng)還處于初始化階段,start_choose信號為“0”,當start_choose信號為“1”時,狀態(tài)機轉(zhuǎn)入current_state_st1狀態(tài),選擇開始,outa信號與outb信號開始有值,在狀態(tài)current_state_st2時,進行第一次選擇。

(2)實驗

  下面將上述各個模塊合在一起,構(gòu)成一個完整的系統(tǒng),對以下函數(shù)進行優(yōu)化,并進行一定的說明。

 

  圖6是用基于FPGA的演化算法對上述函數(shù)進行優(yōu)化后得到的最優(yōu)結(jié)果。從上面可以看到,由上述方法得到的最優(yōu)個體是“11111010”,最差個體是“11111010”。

 

  用VC++設(shè)計實現(xiàn)了上面函數(shù)的優(yōu)化過程,同時軟件采用的交叉和變異操作與上面提到的方法類似,算法運行參數(shù)也相同,并在同一系統(tǒng)環(huán)境下實現(xiàn):賽揚1.7,內(nèi)存256 MB。軟硬件運行結(jié)果比較如表1所示。

 

4 結(jié) 語

  本文從演化算法的軟件實現(xiàn)到演化算法的硬件化,詳細的闡釋如何用Altera公司的CycloneⅡ型號的FPGA,并用VHDL實現(xiàn)一種比較先進的演化算法,并用該硬件化演化算法求解一函數(shù)優(yōu)化問題。演化算法的硬件化極大地提高演化算法的運行速度,為演化算法在實時場合的運用提供了一種可能性。

 



關(guān)鍵詞: 函數(shù)優(yōu)化

評論


技術(shù)專區(qū)

關(guān)閉