本發(fā)明涉及遺傳算法及系統(tǒng),尤其是涉及一種基于fpga高效訓(xùn)練的遺傳算法及系統(tǒng)。
背景技術(shù):
遺傳算法是一種借鑒生物界的進化規(guī)律演化而來的隨機化搜索方法。被人們廣泛地應(yīng)用于組合優(yōu)化、機器學(xué)習(xí)、信號處理、自適應(yīng)控制和人工生命等領(lǐng)域。它也是現(xiàn)代有關(guān)智能計算中的關(guān)鍵技術(shù)。但是,如果單純用計算機軟件實現(xiàn)遺傳算法時,隨著問題復(fù)雜度和求解精度要求的增加,會產(chǎn)生非線性的增加,從而造成極大的計算延時,從而限制了遺傳算法在很多實時性或者快速計算要求很高的場合上的應(yīng)用。提高遺傳算法的運算速度和通用性將極大提高其在實際工程中的應(yīng)用。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于fpga高效訓(xùn)練的遺傳算法及系統(tǒng)設(shè)計,通過硬件與軟件控制相結(jié)合的方法快速進行遺傳算法的訓(xùn)練與運行。
本發(fā)明采用的技術(shù)方案是:
一、一種基于fpga高效訓(xùn)練的遺傳算法,該算法的步驟如下:
步驟1)開始訓(xùn)練時,電腦將要進行運行的遺傳算法代碼下載到fpga中進行訓(xùn)練;
步驟2)在fpga中進行優(yōu)化后,將運行結(jié)果節(jié)點輸出反饋回電腦,在電腦中將優(yōu)化的節(jié)點結(jié)果生成一個config文件保存下來;
步驟3)然后將優(yōu)化完的節(jié)點結(jié)果代替原來遺傳算法中的初始節(jié)點,在電腦編譯生成高速遺傳算法代碼,并重新下載到電腦中,使用高速模式進行運行。
所述步驟1)中的訓(xùn)練采用兩個模式:模式a訓(xùn)練模式——將電腦上運行編譯的遺傳算法訓(xùn)練代碼下載入fpga,下載完成后進行訓(xùn)練,實現(xiàn)遺傳算法的節(jié)點優(yōu)化;模式b運行模式——使用訓(xùn)練完成后的優(yōu)化節(jié)點生成新的高速遺傳算法代碼,下載入fpga中進行高速運行,進行新數(shù)據(jù)的測試輸入與輸出,同時進行輸出與預(yù)期的結(jié)果的誤差進行比較,如果誤差過大,反饋給電腦編譯生成新的訓(xùn)練代碼,重新訓(xùn)練,直至得到符合條件的誤差。
二、一種基于fpga高效訓(xùn)練的遺傳算法的系統(tǒng),其特征在于:包括進行軟件編程的電腦和進行硬件運算的fpga;進行軟件編程的電腦輸出端通過下載數(shù)據(jù)線與fpga輸入端連接,fpga輸出端通過反饋數(shù)據(jù)線與進行軟件編程的電腦輸入端連接。
本發(fā)明具有的有益效果是:
1)本發(fā)明通過fgpa進行遺傳算法節(jié)點的更新,同時,將遺傳算法代碼更新通過電腦進行實現(xiàn),進行編譯完成后再重新下載到fpga的rom中,實現(xiàn)實時的訓(xùn)練過程;fpga內(nèi)部分為2種交替運行的代碼。
2)本發(fā)明實現(xiàn)了軟硬件結(jié)合的遺傳算法的訓(xùn)練與優(yōu)化,采用了訓(xùn)練與執(zhí)行過程的分離,極大的加快了系統(tǒng)數(shù)據(jù)處理和運算的速度,兼顧了靈活和效率。
附圖說明
圖1是本發(fā)明實現(xiàn)的原理框圖。
圖2是本發(fā)明的運行流程圖。
圖3是遺傳算法優(yōu)化原理圖。
具體實施方式
下面結(jié)合附圖和實施例對本發(fā)明作進一步說明。
如圖1所示,本發(fā)明的系統(tǒng),包括進行軟件編程的電腦和硬件運算的fpga;進行軟件編程的電腦輸出端通過下載數(shù)據(jù)線與fpga輸入端連接,fpga輸出端通過反饋數(shù)據(jù)線與進行軟件編程的電腦輸入端連接。
其具體過程為:對于訓(xùn)練模式,首先電腦進行遺傳算法的優(yōu)化過程,在電腦上通過特定語言如c語言等進行遺傳算法代碼的編譯,并通過軟件轉(zhuǎn)化編譯為能夠下載到fpga的rom中可以運行的rom代碼。通過fpga內(nèi)部的門電路進行遺傳算法運行,遺傳算法的初始節(jié)點可設(shè)為0(實際操作中可根據(jù)代碼設(shè)定),然后通過fpga優(yōu)化遺傳算法的節(jié)點,并生成代碼運行的誤差error。之后再fpga內(nèi)部通過寄存器存儲新的節(jié)點值以及誤差值,并通過反饋數(shù)據(jù)線反饋回電腦,并在電腦上生成存儲節(jié)點數(shù)據(jù)的config文件。對于高速模式,則是電腦對于已經(jīng)訓(xùn)練好的運行遺傳算法的fpga模塊,將需要測試的輸入數(shù)據(jù)下載到訓(xùn)練的好fpga模塊中進行測試,測試其誤差值error以判斷是否能夠使用,如果不能,則重新訓(xùn)練。
實際過程中的使用流程如圖2所示。當(dāng)該系統(tǒng)處于訓(xùn)練模式時,下載到fpga進行訓(xùn)練代碼的編寫,當(dāng)fpga運行完成生成新的節(jié)點數(shù)據(jù)與遺傳算法誤差值error,將節(jié)點數(shù)據(jù)與error值反饋回電腦,如果error值不符合我們設(shè)計的預(yù)期,則將新的節(jié)點數(shù)據(jù)替換原來的節(jié)點數(shù)據(jù),生成新的遺傳算法訓(xùn)練代碼,重新下載到fpga里面進行訓(xùn)練,并重復(fù)進行訓(xùn)練直到誤差error值符合我們的算法要求。而當(dāng)error符合算法要求時,電腦將將config文件進行處理,將其中數(shù)值為零的節(jié)點進行舍去,實現(xiàn)遺傳算法的優(yōu)化,進而生成高速遺傳算法代碼,重新下載到fpga進行運行,從而能夠?qū)崿F(xiàn)測試特殊的數(shù)據(jù)輸入下的遺傳算法結(jié)果。
而遺傳算法的優(yōu)化過程如圖3所示。以3x3的遺傳網(wǎng)絡(luò)結(jié)構(gòu)為例,每一列表示同層遺傳網(wǎng)絡(luò)節(jié)點數(shù)據(jù),每一層的每一個節(jié)點都和下一層的3個節(jié)點有數(shù)據(jù)傳輸。在遺傳算法進行訓(xùn)練過程中,我們可以假設(shè)每個節(jié)點的初始值為0,如圖3中的第一階段。當(dāng)遺傳算法進行訓(xùn)練后當(dāng)誤差滿足預(yù)設(shè)后,節(jié)點值進行優(yōu)化后會產(chǎn)生新的節(jié)點,如圖3中的第二階段,有些節(jié)點值變化為1(實際應(yīng)用中可能為別的非零值),有些節(jié)點仍為0,這些節(jié)點沒有用處但是卻占據(jù)了遺傳算法運行的計算量,所以為了得到高速運行的遺傳算法,我們可以對其進行優(yōu)化,舍去不需要的節(jié)點,大大簡化遺傳算法運行的路徑,如圖3的第三階段所示。