專利名稱::一種遺傳算法的軟硬件協(xié)同工作實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及智能計(jì)算與軟硬件協(xié)同技術(shù),特別涉及一種使用軟硬件協(xié)同來處理遺傳算法的技術(shù)。
背景技術(shù):
:遺傳算法(GeneticAlgorithm,GA)是Holland在1975年在《Ad即tationinNaturalandArtificialSystem》中首次提出的一種概率搜索算法,遺傳算法通過有組織地然而是隨機(jī)地信息交換來重新結(jié)合那些適應(yīng)性好的串,在每一代中,利用上一代串中適應(yīng)性好的位和段來生成一個(gè)新的串的群體,作為額外添加,偶爾也要在串結(jié)構(gòu)中嘗試用新的位和段來替代原來的部分。類似于自然進(jìn)化,遺傳算法通過作用于染色體上的基因,尋找好的染色體來求解問題。由于它不受搜索空間限制性假設(shè)條件的約束,不必要求諸如連續(xù)性、可微性和單峰性等假設(shè),以及其固有的并行性,因此作為一種穩(wěn)健、高效的優(yōu)化算法已被廣泛應(yīng)用于各個(gè)領(lǐng)域。而目前的遺傳算法都是由純硬件或者純軟件實(shí)現(xiàn),由軟件實(shí)現(xiàn),算法的運(yùn)算效率低下。而由純硬件實(shí)現(xiàn),只能針對(duì)某個(gè)問題進(jìn)行求解,做不到通用性。這兩種實(shí)現(xiàn)方法都有其各自的缺陷,目前急需一種可行的綜合性技術(shù)方法能夠改善上述技術(shù)的缺陷。軟硬件協(xié)同設(shè)計(jì)(Hardware/SoftwareCo-designing)的思想是在硬件和軟件設(shè)計(jì)過程中盡最大限度的利用其協(xié)同作用來滿足系統(tǒng)的要求。自從軟硬件協(xié)同思想提出以后,一直備受國(guó)內(nèi)外研究者的關(guān)注,關(guān)于軟硬件協(xié)同設(shè)計(jì)領(lǐng)域的研究也十分活躍。到目前為止,國(guó)內(nèi)外學(xué)者已經(jīng)在此方面做過很多研究,比如在遙感影像的實(shí)時(shí)效應(yīng),音頻編碼算法,Lattice譯碼算法,數(shù)字電路仿真,系統(tǒng)的模擬、仿真和調(diào)試等一些方面都使用過軟硬件協(xié)同設(shè)計(jì)方法,并且獲得比使用傳統(tǒng)的設(shè)計(jì)方法更好的效果。因此利用軟硬件協(xié)同設(shè)計(jì)方法不僅可以提高求解問題的效率,同時(shí)可以擴(kuò)寬其應(yīng)用領(lǐng)域,進(jìn)一步推動(dòng)軟硬件協(xié)同設(shè)計(jì)的發(fā)展等。
發(fā)明內(nèi)容本發(fā)明的目的在于,利用軟硬件協(xié)同工作的方式提供一種遺傳算法的實(shí)現(xiàn)方法,使算法的計(jì)算性能得到顯著的提升,并且增加計(jì)算的通用性。本發(fā)明所提供遺傳算法的軟硬件協(xié)同工作實(shí)現(xiàn)方法,基于FPGA平臺(tái)實(shí)現(xiàn)以下各部分,(1)在硬件層面,建立硬件遺傳算法IP核,(2)在軟件層面建立軟件協(xié)同系統(tǒng),用于計(jì)算適應(yīng)值與隨機(jī)數(shù)并向硬件遺傳算法IP核提供,(3)建立硬件遺傳算法IP核與軟件協(xié)同系統(tǒng)之間信息交互的協(xié)議,使硬件層面與軟件層面之間的信息交互達(dá)到同步狀態(tài);所述軟件協(xié)同系統(tǒng)包括以下模塊,3適應(yīng)值計(jì)算模塊,該模塊根據(jù)實(shí)際問題提供相應(yīng)的適應(yīng)值函數(shù),通過適應(yīng)值函數(shù)實(shí)現(xiàn)個(gè)體適應(yīng)值的計(jì)算;隨機(jī)數(shù)模塊,該模塊根據(jù)硬件需求產(chǎn)生一個(gè)隨機(jī)數(shù);所述硬件遺傳算法IP核包括以下模塊,總控模塊,該模塊提供各個(gè)模塊之間調(diào)用的控制信號(hào),從而控制整個(gè)遺傳算法的流程以及數(shù)據(jù)的流向,協(xié)調(diào)各個(gè)模塊在總控模塊的控制信號(hào)下工作;初始化模塊,該模塊隨機(jī)地產(chǎn)生演化所需的初始種群,為遺傳算法提供初始種群;交叉選擇模塊,該模塊實(shí)現(xiàn)精英選擇和交叉操作的相結(jié)合,即由隨機(jī)數(shù)模塊提供的隨機(jī)數(shù)選擇兩個(gè)個(gè)體作為父代個(gè)體,確定交叉點(diǎn)位置,進(jìn)行單點(diǎn)交叉操作產(chǎn)生兩個(gè)新個(gè)體,然后根據(jù)適應(yīng)值計(jì)算模塊提供的適應(yīng)值,從新個(gè)體和父代個(gè)體中選擇兩個(gè)適應(yīng)值最高的個(gè)體替換父代;變異選擇模塊,該模塊實(shí)現(xiàn)精英選擇和變異操作的相結(jié)合,即由隨機(jī)數(shù)模塊提供的隨機(jī)數(shù)選擇一個(gè)個(gè)體作為父代個(gè)體,確定變異點(diǎn)位置,進(jìn)行單點(diǎn)變異操作產(chǎn)生一個(gè)新個(gè)體,然后根據(jù)適應(yīng)值計(jì)算模塊提供的適應(yīng)值,從新個(gè)體和父代個(gè)體中選擇一個(gè)適應(yīng)值最高的個(gè)體替換父代,;評(píng)價(jià)模塊,該模塊尋找出新一代種群中具有最優(yōu)適應(yīng)值的個(gè)體,將具有最優(yōu)適應(yīng)值的個(gè)體更新到存儲(chǔ)種群的片上內(nèi)存上;并判斷是否已達(dá)終止條件,若滿足終止條件則停止遺傳算法;片上內(nèi)存模塊,該模塊組織兩個(gè)片上內(nèi)存,分別用于存儲(chǔ)種群和適應(yīng)值;個(gè)體控制模塊,該模塊是一個(gè)四選一模塊,用于判斷初始化模塊、交叉選擇模塊、變異選擇模塊和評(píng)價(jià)模塊中是哪個(gè)模塊要從存儲(chǔ)種群的片上內(nèi)存中進(jìn)行個(gè)體讀取和存儲(chǔ);適應(yīng)值控制模塊,該模塊是一個(gè)四選一模塊,用于判斷初始化模塊、交叉選擇模塊、變異選擇模塊和評(píng)價(jià)模塊中是哪個(gè)模塊要從存儲(chǔ)適應(yīng)值的片上內(nèi)存中進(jìn)行適應(yīng)值讀取和存儲(chǔ)。而且,評(píng)價(jià)模塊判斷是否已達(dá)終止條件時(shí),所述終止條件為最優(yōu)適應(yīng)值在100代內(nèi)不發(fā)生變化。而且,所述新一代種群是經(jīng)過交叉選擇模塊進(jìn)行精英選擇和交叉操作,然后經(jīng)過變異選擇模塊進(jìn)行精英選擇和變異操作所得結(jié)果。本發(fā)明將遺傳算法中適合于硬件處理的模塊如雜交、變異等使用硬件編程實(shí)現(xiàn),將遺傳算法中適應(yīng)值評(píng)價(jià)這個(gè)通用性模塊用軟件來處理。它不僅可以提升運(yùn)算速度,而且提高遺傳算法IP核的通用性,只需在軟件層改寫適應(yīng)值函數(shù),就可實(shí)現(xiàn)類似問題的求解。軟硬件協(xié)同的工作平臺(tái)與純軟件或純硬件實(shí)現(xiàn)相比,運(yùn)用軟硬件協(xié)同方法求解具有較高的效率和廣泛的通用性.圖l為本發(fā)明的原理圖;圖2為本發(fā)明實(shí)施例的有限狀態(tài)機(jī)圖3為本發(fā)明實(shí)施例的軟硬件交互協(xié)議示意圖。具體實(shí)施例方式下面結(jié)合附圖與實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述本實(shí)施例是在Xilinx公司提供的XC2VP30FPGA開發(fā)板上實(shí)現(xiàn),使用PowerPC(—種精簡(jiǎn)指令集架構(gòu)的中央處理器)作為處理器,使用邏輯門電路構(gòu)成硬件IP核,使用XilinxBlockMemoryGe證ator作為存儲(chǔ)器。FPGA平臺(tái)有兩條總線,PLB(ProcessorLocalBus,處理器局部總線)和0PB(On-ChipPeripheralBus,片上外設(shè)總線)。0PB總線連接一些低速和低性能設(shè)備,它不直接連接到處理器內(nèi)核,而是通過總線橋與PLB總線上的設(shè)備(如PowerPC和片上內(nèi)存)聯(lián)系。具體實(shí)施時(shí),軟件層面的隨機(jī)數(shù)模塊和適應(yīng)值計(jì)算模塊由本領(lǐng)域技術(shù)人員采用軟件模塊化方案設(shè)計(jì)后安裝到PowerPC中即可;硬件層面的各模塊可根據(jù)工作原理采用Verilog語(yǔ)言描述,編譯成邏輯門電路后作為硬件IP核接入0PB總線即可。在XC2VP30FPGA開發(fā)板上建硬件IP核的時(shí)候,F(xiàn)PGA平臺(tái)提供寄存器以便在工作流程中軟硬件直接進(jìn)行交互時(shí)使用。由于片上內(nèi)存只能硬件訪問,實(shí)施例設(shè)定了24個(gè)寄存器,記為寄存器0、2、3.23。如圖1所示,本發(fā)明的工作狀態(tài)是由總控模塊來實(shí)現(xiàn)各模塊之間的調(diào)控的。如軟件層面的隨機(jī)數(shù)模塊和適應(yīng)值計(jì)算模塊,硬件層面的初始化模塊、交叉選擇模塊、變異選擇模塊、評(píng)價(jià)模塊都和總控模塊進(jìn)行著信息的交互。因此總控模塊是整個(gè)設(shè)計(jì)的核心部分,就好比計(jì)算機(jī)內(nèi)部的CPU,它控制著整個(gè)設(shè)計(jì)的流程以及數(shù)據(jù)的流向,各模塊也都是在總控模塊的控制信號(hào)下有序地工作。對(duì)本IP核的設(shè)計(jì)而言,整個(gè)系統(tǒng)的工作狀態(tài)都體現(xiàn)在總控模塊上。各個(gè)子模塊通過總控模塊的控制信號(hào)進(jìn)行著信息的交互。另外初始化模塊、交叉選擇模塊、變異選擇模塊、評(píng)價(jià)模塊均是通過適應(yīng)值控制模塊與個(gè)體控制模塊來對(duì)片上內(nèi)存進(jìn)行訪問。為便于實(shí)施起見,下面詳細(xì)說明實(shí)施例中各個(gè)模塊以供參考總控模塊總控模塊由一個(gè)狀態(tài)機(jī)構(gòu)成,狀態(tài)分別為IDLE、INIT、CR0SS、MUT、VALUE和ST0P。總控模塊通過狀態(tài)機(jī)的方式來控制其他模塊。例如進(jìn)入INIT狀態(tài)則激活初始化模塊進(jìn)行工作,進(jìn)入CROSS狀態(tài)則激活交叉選擇模塊進(jìn)行工作。隨機(jī)數(shù)模塊輸入為硬件層面中初始化模塊、交叉選擇模塊或變異選擇模塊發(fā)來的請(qǐng)求信號(hào),輸出為一定數(shù)量的隨機(jī)數(shù)。實(shí)施例采用C語(yǔ)言實(shí)現(xiàn),具體為調(diào)用C語(yǔ)言的庫(kù)函數(shù)rand,并且對(duì)所獲得的隨機(jī)數(shù)進(jìn)行范圍處理再輸出。適應(yīng)值計(jì)算模塊輸入為個(gè)體,輸出為計(jì)算得到的適應(yīng)值。采用C語(yǔ)言實(shí)現(xiàn),具體實(shí)現(xiàn)為針對(duì)所求問題對(duì)二進(jìn)制編碼形式的個(gè)體進(jìn)行計(jì)算。具體實(shí)施時(shí),可以事先根據(jù)實(shí)際問題在該模塊中設(shè)置相應(yīng)的適應(yīng)值函數(shù),例如實(shí)施例為0-1背包問題。初始化模塊模塊完成遺傳算法的第一階段的初始化工作,具體實(shí)現(xiàn)為產(chǎn)生種群大小個(gè)二進(jìn)制編碼形式的個(gè)體,并且計(jì)算相應(yīng)的適應(yīng)值。本發(fā)明實(shí)施例中設(shè)定種群的大小為32,即包括32個(gè)個(gè)體,這些個(gè)體構(gòu)成第一代種群。初始化模塊將這些個(gè)體與對(duì)應(yīng)的適應(yīng)值保存在片上內(nèi)存中(所有個(gè)體存入存儲(chǔ)種群的片上內(nèi)存,相應(yīng)適應(yīng)值存入存儲(chǔ)適應(yīng)值的片上內(nèi)存),最后通知總控模塊任務(wù)完成。交叉選擇模塊交叉選擇模塊在獲得總控模塊啟動(dòng)信號(hào)之后啟動(dòng)。啟動(dòng)之后首先發(fā)出隨機(jī)數(shù)請(qǐng)求信號(hào)(本實(shí)施例中為將寄存器1中CR0SS—RAN位置為1)并開始等待、在軟5件層面的隨機(jī)數(shù)模塊檢測(cè)到該信號(hào)(CR0SS_RAN=1)之后立即使用rand函數(shù)產(chǎn)生3個(gè)隨機(jī)數(shù),其中兩個(gè)用于選擇個(gè)體作為父代個(gè)體,另一個(gè)用于獲得雜交點(diǎn)。并且將隨機(jī)數(shù)寫入指定的寄存器(實(shí)施例中為寄存器20)中,當(dāng)隨機(jī)數(shù)模塊完成之后給總控模塊返回完成信號(hào)(實(shí)施例中為將寄存器1中CROSS_RAN_DONE位置為1)。交叉選擇模塊在獲得該高電平信號(hào)(CROSS_RAN_DONE=1)之后繼續(xù)工作。交叉選擇模塊再?gòu)闹付ㄎ恢?寄存器20)讀取隨機(jī)數(shù),然后通知個(gè)體控制模塊從存儲(chǔ)個(gè)體的片上內(nèi)存進(jìn)行個(gè)體的讀取,并且通知適應(yīng)值控制模塊從存儲(chǔ)適應(yīng)值的片上內(nèi)存讀取相應(yīng)的適應(yīng)值。交叉選擇模塊再根據(jù)獲得的雜交點(diǎn)對(duì)兩個(gè)個(gè)體進(jìn)行雜交。實(shí)施例所采用雜交方式為單點(diǎn)雜交,如兩個(gè)個(gè)體分別為Oxffff與0x0000,雜交點(diǎn)為8。則雜交獲得結(jié)果為OxOOff與OxffOO。雜交結(jié)束之后,將新生成的兩個(gè)個(gè)體依次保存在指定適應(yīng)值計(jì)算內(nèi)存地址(實(shí)施例為寄存器7、8、9、10、11)。然后再將請(qǐng)求適應(yīng)值計(jì)算信號(hào)置為l(實(shí)施例中為寄存器l中的recLfit位)。適應(yīng)值計(jì)算模塊在檢測(cè)到該高電平信號(hào)(req_fit=1)之后從指定適應(yīng)值計(jì)算內(nèi)存地址(寄存器7、8、9、10、11)讀取個(gè)體并且進(jìn)行相應(yīng)的計(jì)算,然后將結(jié)果保存在指定內(nèi)存地址(實(shí)施例中為寄存器12)并且發(fā)送完成信號(hào)(實(shí)施例中為寄存器0的fit_done位置為高)。交叉選擇模塊獲得完成信號(hào)(fit_done=1)之后從保持適應(yīng)值的指定內(nèi)存地址(寄存器12)讀取到適應(yīng)值之后,從父代個(gè)體(兩個(gè))和子代個(gè)體(兩個(gè))中選擇其中兩個(gè)適應(yīng)值最高的個(gè)體存入存儲(chǔ)種群的片上內(nèi)存,相應(yīng)適應(yīng)值也存入存儲(chǔ)適應(yīng)值的片上內(nèi)存。最后交叉選擇模塊發(fā)送完成信號(hào)。變異選擇模塊變異選擇模塊在獲得總控模塊啟動(dòng)信號(hào)之后啟動(dòng)。啟動(dòng)之后首先發(fā)出隨機(jī)數(shù)請(qǐng)求信號(hào)(本實(shí)施例中為將寄存器1中MU乙RAN位置為1)并開始等待,在軟件層面的隨機(jī)數(shù)模塊獲得該信號(hào)(MUT_RAN=1)之后立即使用rand函數(shù)產(chǎn)生2個(gè)隨機(jī)數(shù),其中一個(gè)用于選擇個(gè)體作為父代個(gè)體,另一個(gè)用于獲得變異點(diǎn),并且將隨機(jī)數(shù)寫入指定的寄存器(實(shí)施例中為寄存器20)中。當(dāng)隨機(jī)數(shù)模塊完成之后給總控模塊返回完成信號(hào)(本實(shí)施例中為將寄存器1中MUT_RAN_DONE位置為1)。變異選擇模塊在獲得該高電平信號(hào)(MUT_RAN_DONE=1)之后繼續(xù)工作。變異選擇模塊再?gòu)闹付ㄎ恢?寄存器20)讀取隨機(jī)數(shù),然后通知個(gè)體控制模塊從存儲(chǔ)個(gè)體的片上內(nèi)存進(jìn)行個(gè)體的讀取,并且通知適應(yīng)值控制模塊從存儲(chǔ)適應(yīng)值的片上內(nèi)存讀取相應(yīng)的適應(yīng)值。交叉選擇模塊再根據(jù)獲得的變異點(diǎn)對(duì)選擇的這個(gè)個(gè)體進(jìn)行單點(diǎn)變異。如原始的父代個(gè)體為OxffOO,變異點(diǎn)為l,則變異得到新個(gè)體為OxffOl。待變異結(jié)束后,將新生成的個(gè)體保存在指定適應(yīng)值計(jì)算內(nèi)存地址(實(shí)施例為寄存器7、8、9、10、11),然后再將請(qǐng)求適應(yīng)值計(jì)算信號(hào)置為l(實(shí)施例中為寄存器l中的recLfit位)。適應(yīng)值計(jì)算模塊在檢測(cè)到該高電平信號(hào)(req_fit=1)之后從適應(yīng)值計(jì)算內(nèi)存地址(寄存器7、8、9、10、11)讀取個(gè)體并且進(jìn)行相應(yīng)的計(jì)算,然后將結(jié)果保存在適應(yīng)值內(nèi)存地址(實(shí)施例中為第12寄存器)并且發(fā)送完成信號(hào)(實(shí)施例中為第0寄存器的fit_done位置為高)。變異選擇模塊獲得完成信號(hào)(fit_done=1)之后從適應(yīng)值內(nèi)存地址(寄存器12)讀取到適應(yīng)值之后,從父代個(gè)體(一個(gè))與子代個(gè)體(一個(gè))中選擇適應(yīng)值最好的個(gè)體存入存儲(chǔ)種群的片上內(nèi)存,相應(yīng)適應(yīng)值也存入存儲(chǔ)適應(yīng)值的片上內(nèi)存。最后變異選擇模塊發(fā)送完成信號(hào)。評(píng)價(jià)模塊具體操作為比較新一代種群中具有最優(yōu)適應(yīng)值的個(gè)體與上一代種群中具有最優(yōu)適應(yīng)值的個(gè)體的適應(yīng)值大小比較。如前者適應(yīng)值更大,則將前者替換后者并且將6計(jì)數(shù)器置0。否則就保存不變,并且將計(jì)數(shù)器加l。實(shí)施例中,存儲(chǔ)種群的片上內(nèi)存除存儲(chǔ)32個(gè)個(gè)體外,還單獨(dú)提供一個(gè)專用空間存儲(chǔ)具有最優(yōu)適應(yīng)值的個(gè)體,替換時(shí)更新該空間即可。存儲(chǔ)適應(yīng)值的片上內(nèi)存也單獨(dú)提供一個(gè)專用空間存儲(chǔ)相應(yīng)最優(yōu)適應(yīng)值,替換個(gè)體時(shí)也進(jìn)行相應(yīng)更新。當(dāng)計(jì)數(shù)器大于預(yù)設(shè)值(實(shí)施例為100)時(shí),說明最優(yōu)適應(yīng)值在100代內(nèi)未發(fā)生變化,則通知總控模塊停機(jī)。具體實(shí)施時(shí),可以每進(jìn)行一次交叉選擇、一次變異選擇,將結(jié)果作為新一代;還可以設(shè)定交替運(yùn)用交叉選擇和變異選擇得到下一代,例如進(jìn)行一次交叉選擇后結(jié)果作為新一代,進(jìn)行一次變異選擇后結(jié)果作為下一個(gè)新一代,再進(jìn)行一次交叉選擇后結(jié)果作為新一代...甚至設(shè)計(jì)一個(gè)函數(shù),由函數(shù)決定通過交叉選擇還是變異選擇得到下一代。實(shí)施例設(shè)定,進(jìn)行一次交叉選擇,然后進(jìn)行一次變異選擇,再將結(jié)果作為新一代,這樣可以綜合兩種進(jìn)化方式優(yōu)點(diǎn)。具體實(shí)施時(shí),也可以相反,進(jìn)行一次變異選擇,然后進(jìn)行一次交叉選擇,再將結(jié)果作為新一代。個(gè)體控制模塊由于實(shí)施例中有4個(gè)模塊需要讀取片上內(nèi)存模塊中存儲(chǔ)種群的片上內(nèi)存,該模塊為四選一模塊。實(shí)施例通過使用片上內(nèi)存模塊的4個(gè)模塊的不同優(yōu)先級(jí)別,來確定哪個(gè)模塊通過使用片上內(nèi)存模塊獲取個(gè)體,具體優(yōu)先級(jí)為初始化模塊>交叉選擇模塊>變異選擇模塊>評(píng)價(jià)模塊;適應(yīng)值控制模塊由于實(shí)施例中有4個(gè)模塊需要讀取片上內(nèi)存模塊中存儲(chǔ)適應(yīng)值的片上內(nèi)存,該模塊為四選一模塊。實(shí)施例通過使用片上內(nèi)存模塊的4個(gè)模塊的不同優(yōu)先級(jí)別,來確定哪個(gè)模塊使用通過使用片上內(nèi)存模塊獲取適應(yīng)值,具體優(yōu)先級(jí)為初始化模塊>交叉選擇模塊>編譯模塊>評(píng)價(jià)模塊;片上內(nèi)存模塊為了快速的讀取個(gè)體信息所產(chǎn)生存儲(chǔ)種群的的片上內(nèi)存,具體實(shí)現(xiàn)為使用Xilinx公司的BlockMemoryGenerator生成的(種群大小+1)*個(gè)體串長(zhǎng)(實(shí)施例為33*50的雙口片上內(nèi)存。XilinxBlockMemoryGenerator提供AB兩個(gè)端口,實(shí)施例將A端口用于讀取,B端口用于寫入。適應(yīng)值的存儲(chǔ)對(duì)應(yīng)于個(gè)體,實(shí)現(xiàn)方式一致為了快速的讀取適應(yīng)值信息所產(chǎn)生存儲(chǔ)適應(yīng)值的片上內(nèi)存,具體實(shí)現(xiàn)為使用Xilinx公司的BlockMemoryGenerator生成的(種群大小+1)*適應(yīng)值大小(實(shí)施例為33*32)的雙口片上內(nèi)存。XilinxBlockMemoryGenerator提供AB兩個(gè)端口,實(shí)施例將A端口用于讀取,B端口用于寫入。除了存儲(chǔ)種群的個(gè)體和相應(yīng)適應(yīng)值外,實(shí)施例特別多設(shè)置1個(gè)個(gè)體和相應(yīng)適應(yīng)值存儲(chǔ)位置,就是為了存放種群中具有最優(yōu)適應(yīng)值的個(gè)體,以及該個(gè)體的適應(yīng)值。如圖2所示,整個(gè)設(shè)計(jì)分成六個(gè)狀態(tài)。以下系統(tǒng)是指本發(fā)明的整個(gè)軟硬件結(jié)合方案。IDLE:空閑狀態(tài),系統(tǒng)復(fù)位后進(jìn)入該狀態(tài)。空閑狀態(tài)由硬件層面的總控模塊進(jìn)行控制處理。系統(tǒng)在時(shí)鐘上升沿時(shí)檢查是否有外部運(yùn)行信號(hào)(如switch開關(guān))。在系統(tǒng)獲得高電平信號(hào)之后開始運(yùn)行,否則一直循環(huán)等待。開始運(yùn)行之后即轉(zhuǎn)入初始化狀態(tài)(INIT)。INIT:初始化狀態(tài),完成本系統(tǒng)的初始化工作,初始化工作具體包含了生成種群,評(píng)價(jià)種群個(gè)體的適應(yīng)值。首先由總控模塊發(fā)送信號(hào)至軟件層面,即將寄存器0的init標(biāo)記位置為1。軟件層面當(dāng)檢測(cè)到init標(biāo)記位為1時(shí),則開始使用隨機(jī)數(shù)模塊(調(diào)用rand函數(shù))開始產(chǎn)生種群大小個(gè)的隨機(jī)數(shù),并且將結(jié)果送到軟件層面的適應(yīng)值計(jì)算模塊進(jìn)行評(píng)價(jià)計(jì)算。待評(píng)價(jià)結(jié)束之后,適應(yīng)值計(jì)算模塊將個(gè)體及其適應(yīng)值放在指定位置(實(shí)施例中將個(gè)體存放在寄存器2、3、4、5、6中,適應(yīng)值存放在寄存器12中),然后將寄存器0中的init_7done標(biāo)記位置為l。即發(fā)送完成信號(hào)通知總控模塊??偪啬K在收到完成信號(hào)之后,再發(fā)送信號(hào)通知初始化模塊去指定寄存器(寄存器2、3、4、5、6、12)讀取個(gè)體與適應(yīng)值并且將個(gè)體與適應(yīng)值存儲(chǔ)在片上內(nèi)存中,所有個(gè)體存入存儲(chǔ)種群的片上內(nèi)存,相應(yīng)適應(yīng)值存入存儲(chǔ)適應(yīng)值的片上內(nèi)存。當(dāng)初始化模塊完成種群大小個(gè)個(gè)體的初始化工作之后,初始化模塊發(fā)送初始化結(jié)束信號(hào)給總控模塊進(jìn)入CROSS狀態(tài)。CROSS:交叉狀態(tài),完成本系統(tǒng)中的交叉選擇操作。具體為總控模塊發(fā)送信號(hào)調(diào)用交叉選擇模塊開始工作。并且在該狀態(tài)進(jìn)行等待。待收到交叉選擇模塊的完成信號(hào)之后,進(jìn)入MUT狀態(tài)。MUT:變異狀態(tài),完成本系統(tǒng)中的變異選擇操作。具體為總控模塊發(fā)送信號(hào)調(diào)用變異選擇模塊開始工作。并且在該狀態(tài)進(jìn)行等待。待收到變異選擇模塊的完成信號(hào)之后,進(jìn)入VALUE狀態(tài)。VALUE:評(píng)估狀態(tài),完成本系統(tǒng)中的評(píng)估和停機(jī)判斷工作。評(píng)價(jià)模塊用來判斷從雜交和變異種獲得的新個(gè)體中是否有適應(yīng)值更好的個(gè)體。如果當(dāng)適應(yīng)值在一段時(shí)間內(nèi)(實(shí)施例中本系統(tǒng)為在100次迭代)最優(yōu)個(gè)體沒有發(fā)生變化,就說明找到了最優(yōu)個(gè)體,發(fā)送信號(hào)通知總控模塊停機(jī)。STOP:停止?fàn)顟B(tài),完成本系統(tǒng)停止過程中的相關(guān)操作。主要操作就是系統(tǒng)將最優(yōu)個(gè)體及其適應(yīng)值輸出,即將個(gè)體與適應(yīng)值置于指定位置(實(shí)施例中將個(gè)體存放在寄存器19、20、21、22、23,適應(yīng)值存放在寄存器12中),然后由軟件層面讀取打印。最后再將整個(gè)設(shè)備恢復(fù)到IDLE狀態(tài),片上內(nèi)存重置。整個(gè)系統(tǒng)的工作流程為系統(tǒng)復(fù)位或者上電后進(jìn)入IDLE狀態(tài),系統(tǒng)在START信號(hào)為0的時(shí)候則在IDLE狀態(tài)保持等待。當(dāng)系統(tǒng)得到START=1后,轉(zhuǎn)入INIT初始化狀態(tài);INIT狀態(tài)工作未完成時(shí),INIT_DONE—直等于0,并且在保持在INIT狀態(tài)繼續(xù)工作。當(dāng)初始化工作完成后發(fā)出INIT_DONE=1信號(hào),系統(tǒng)轉(zhuǎn)入CROSS狀態(tài);在雜交操作未完成之前,CROSS_DONE—直保持為0,并且在保持在CROSS狀態(tài)繼續(xù)工作。當(dāng)交叉操作完成后發(fā)出CROSS_DONE=1信號(hào),系統(tǒng)轉(zhuǎn)入MUT狀態(tài);在變異操作未完成之前,MUT_DONE—直保持為0,并且在保持在MUT狀態(tài)繼續(xù)工作。當(dāng)變異操作完成后發(fā)出MUT_DONE=1信號(hào),系統(tǒng)轉(zhuǎn)入EVALUE狀態(tài);評(píng)價(jià)操作完成后進(jìn)行停止?fàn)顟B(tài)判斷,如果滿足停止條件,則發(fā)出STOP=1信號(hào),系統(tǒng)轉(zhuǎn)入STOP狀態(tài),否則發(fā)出STOP=0信號(hào)并轉(zhuǎn)入CROSS狀態(tài),繼續(xù)進(jìn)行循環(huán)操作;系統(tǒng)完成STOP狀態(tài)要做的工作后無條件轉(zhuǎn)入IDLE狀態(tài)。關(guān)于軟硬件通信協(xié)議由圖3可知硬件發(fā)出Request為高(1)的信號(hào)并阻塞等待軟件處理完成,軟件得到硬件發(fā)出Request信號(hào)為高后才開始進(jìn)行相關(guān)的軟件處理工作,軟件處理完成后將處理done置為高(1)并且開始阻塞等待;硬件得到軟件發(fā)來的信號(hào)為高(1)的done信號(hào)之后,進(jìn)行相應(yīng)的硬件處理,硬件處理完成后再將Request信號(hào)置為低(0)并且阻塞等待。軟件得到硬件發(fā)出信號(hào)為低(0)的Request信號(hào)后將done信號(hào)置低(0);硬件得到done信號(hào)為低(0)說明本次軟硬件通信結(jié)束,然后硬件便可以進(jìn)行后續(xù)工作。這種操作避免了由于硬件速度較快,導(dǎo)致的在軟件信號(hào)在完成之后在拉低信號(hào)的過程中,硬件再次請(qǐng)求操作所帶來的錯(cuò)誤數(shù)據(jù);或者軟件多次響應(yīng)硬件請(qǐng)求信號(hào)等誤操作。保證了系統(tǒng)的穩(wěn)定性和健壯性。發(fā)明實(shí)施例選取了0-1背包問題這一典型的組合優(yōu)化問題分別從三個(gè)方面做了對(duì)比實(shí)驗(yàn),在實(shí)驗(yàn)過程中,三種方式都采用了同樣的演化策略,實(shí)驗(yàn)結(jié)果如下表<table>tableseeoriginaldocumentpage9</column></row><table>從表中數(shù)據(jù)可以知道該發(fā)明運(yùn)行速度明顯優(yōu)于純軟件運(yùn)行的速度并且可以獲得和軟件一樣的最優(yōu)值甚至更好。另外本發(fā)明還可以應(yīng)用于二進(jìn)制問題,函數(shù)優(yōu)化問題等,充分體現(xiàn)了純硬件實(shí)現(xiàn)所不具備的通用性。以上所述僅為本發(fā)明中的一個(gè)實(shí)施例,并不用于限制本發(fā)明。凡在本發(fā)明的精神與原則之內(nèi),所做的任何修改,改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求一種遺傳算法的軟硬件協(xié)同工作實(shí)現(xiàn)方法,其特征在于基于FPGA平臺(tái)實(shí)現(xiàn)以下各部分,(1)在硬件層面,建立硬件遺傳算法IP核,(2)在軟件層面建立軟件協(xié)同系統(tǒng),用于計(jì)算適應(yīng)值與隨機(jī)數(shù)并向硬件遺傳算法IP核提供,(3)建立硬件遺傳算法IP核與軟件協(xié)同系統(tǒng)之間信息交互的協(xié)議,使硬件層面與軟件層面之間的信息交互達(dá)到同步狀態(tài);所述軟件協(xié)同系統(tǒng)包括以下模塊,適應(yīng)值計(jì)算模塊,該模塊根據(jù)實(shí)際問題提供相應(yīng)的適應(yīng)值函數(shù),通過適應(yīng)值函數(shù)實(shí)現(xiàn)個(gè)體適應(yīng)值的計(jì)算;隨機(jī)數(shù)模塊,該模塊根據(jù)硬件需求產(chǎn)生一個(gè)隨機(jī)數(shù);所述硬件遺傳算法IP核包括以下模塊,總控模塊,該模塊提供各個(gè)模塊之間調(diào)用的控制信號(hào),從而控制整個(gè)遺傳算法的流程以及數(shù)據(jù)的流向,協(xié)調(diào)各個(gè)模塊在總控模塊的控制信號(hào)下工作;初始化模塊,該模塊隨機(jī)地產(chǎn)生演化所需的初始種群,為遺傳算法提供初始種群;交叉選擇模塊,該模塊實(shí)現(xiàn)精英選擇和交叉操作的相結(jié)合,即由隨機(jī)數(shù)模塊提供的隨機(jī)數(shù)選擇兩個(gè)個(gè)體作為父代個(gè)體,確定交叉點(diǎn)位置,進(jìn)行單點(diǎn)交叉操作產(chǎn)生兩個(gè)新個(gè)體,然后根據(jù)適應(yīng)值計(jì)算模塊提供的適應(yīng)值,從新個(gè)體和父代個(gè)體中選擇兩個(gè)適應(yīng)值最高的個(gè)體替換父代;變異選擇模塊,該模塊實(shí)現(xiàn)精英選擇和變異操作的相結(jié)合,即由隨機(jī)數(shù)模塊提供的隨機(jī)數(shù)選擇一個(gè)個(gè)體作為父代個(gè)體,確定變異點(diǎn)位置,進(jìn)行單點(diǎn)變異操作產(chǎn)生一個(gè)新個(gè)體,然后根據(jù)適應(yīng)值計(jì)算模塊提供的適應(yīng)值,從新個(gè)體和父代個(gè)體中選擇一個(gè)適應(yīng)值最高的個(gè)體替換父代,;評(píng)價(jià)模塊,該模塊尋找出新一代種群中具有最優(yōu)適應(yīng)值的個(gè)體,將具有最優(yōu)適應(yīng)值的個(gè)體更新到存儲(chǔ)種群的片上內(nèi)存上;并判斷是否已達(dá)終止條件,若滿足終止條件則停止遺傳算法;片上內(nèi)存模塊,該模塊組織兩個(gè)片上內(nèi)存,分別用于存儲(chǔ)種群和適應(yīng)值;個(gè)體控制模塊,該模塊是一個(gè)四選一模塊,用于判斷初始化模塊、交叉選擇模塊、變異選擇模塊和評(píng)價(jià)模塊中是哪個(gè)模塊要從存儲(chǔ)種群的片上內(nèi)存中進(jìn)行個(gè)體讀取和存儲(chǔ);適應(yīng)值控制模塊,該模塊是一個(gè)四選一模塊,用于判斷初始化模塊、交叉選擇模塊、變異選擇模塊和評(píng)價(jià)模塊中是哪個(gè)模塊要從存儲(chǔ)適應(yīng)值的片上內(nèi)存中進(jìn)行適應(yīng)值讀取和存儲(chǔ)。2.根據(jù)權(quán)利要求1所述遺傳算法的軟硬件協(xié)同工作實(shí)現(xiàn)方法,其特征在于評(píng)價(jià)模塊判斷是否已達(dá)終止條件時(shí),所述終止條件為最優(yōu)適應(yīng)值在100代內(nèi)不發(fā)生變化。3.根據(jù)權(quán)利要求2所述遺傳算法的軟硬件協(xié)同工作實(shí)現(xiàn)方法,其特征在于所述新一代種群是經(jīng)過交叉選擇模塊進(jìn)行精英選擇和交叉操作,然后經(jīng)過變異選擇模塊進(jìn)行精英選擇和變異操作所得結(jié)果。全文摘要本發(fā)明提供了一個(gè)遺傳算法的軟硬件協(xié)同工作實(shí)現(xiàn)方法。遺傳算法是一種典型的演化算法,但是由于二進(jìn)制編碼的特點(diǎn),利用軟件實(shí)現(xiàn)的遺傳算法求解實(shí)際問題的效率較低。硬件FPGA雖然可以提高求解的速度,但是純硬件實(shí)現(xiàn)一旦實(shí)現(xiàn),硬件結(jié)構(gòu)不易改變,缺乏靈活性。本發(fā)明針對(duì)軟件和硬件實(shí)現(xiàn)存在不足,提出了遺傳算法的軟硬件協(xié)同設(shè)計(jì)方法,它不僅可以提升運(yùn)算速度,而且提高遺傳算法IP核的通用性,只需在軟件層改寫適應(yīng)值函數(shù),就可實(shí)現(xiàn)類似問題的求解。軟硬件協(xié)同的工作平臺(tái)與純軟件,純硬件實(shí)現(xiàn)相比,運(yùn)用軟硬件協(xié)同方法求解具有較高的效率和廣泛的通用性。文檔編號(hào)G06F17/50GK101789044SQ20101010357公開日2010年7月28日申請(qǐng)日期2010年1月27日優(yōu)先權(quán)日2010年1月27日發(fā)明者劉海峰,李元香,柳林,王峰,王瓏,雷新申請(qǐng)人:武漢大學(xué)