基于遺傳算法的組合邏輯電路設計的FPGA實現
摘要:基于遺傳算法的組合邏輯電路的自動設計,依據給出的真值表,利用遺傳算法自動生成符合要求的組合邏輯電路。由于遺傳算法本身固有的并行性,采用軟件實現的方法在速度上往往受到本質是串行計算的計算機制約,因此采用硬件化設計具有重要的意義。為了證明基于FPGA的遺傳算法的高效性,設計了遺傳算法的各個模塊,實現了基于FPGA的遺傳算法。
關鍵詞:遺傳算法;組合邏輯電路;FPGA;隨機數
遺傳算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優(yōu)解的方法,它最初是由美國Michigan大學J.Holland教授于1975年首先提出來的。隨著經濟社會的快速發(fā)展,人類科學研究與生產活動的廣度與深度都大大拓展了。科研與生產實踐中涌現出的大量新課題對作為社會發(fā)展催化劑的信息與控制科學提出了前所未有的挑戰(zhàn)。傳統(tǒng)信息處理算法在面對各種非線性、不確定、不能精確解析以及建模機理復雜的問題時,往往顯得捉襟見肘。正是在這種背景下,各種智能信息處理算法如雨后春筍般涌現出來。作為智能信息處理算法中的重要一員,遺傳算法近年來以其獨特而卓越的性能日漸引起了人們的關注。
組合邏輯電路其特點是功能上無記憶,結構上無反饋,即電路在任意時刻的輸出狀態(tài)只取決于該時刻各輸入狀態(tài)的組合,而與電路的原狀態(tài)無關。本文通過實例介紹組合邏輯電路的設計方法,并通過電子設計自動化EDA(Electronic Design Automation)進行仿真分析,使組合邏輯電路的設計變得更方便,更實用。
隨著FPGA性能的不斷提高,基于FPGA的計算加速已經逐漸成為提高計算速度和計算效率的重要手段之一。FPGA能夠實現程序的并行化處理,不僅結構簡單,而且有效地減少了運算時間、提高了運行效率,為遺傳算法能在一些實時、高速的場合得到應用提供了依據。
1 基于FPGA遺傳算法設計
遺傳算法是一種多點并行的迭代搜索算法,它的每一代稱為一個種群,由多個個體組成,每個個體稱為染色體,染色體由一定數目的字符組成。每個字符稱為一個基因,基因在染色體中的位置決定了基因所表達的特性。
文中基于FPGA的遺傳算法,整個系統(tǒng)分為4個單元,4個單元分別為:選擇單元、交叉單元、變異單元和適應度計算單元。
1.1 選擇單元
選擇單元執(zhí)行遺傳算法中的選擇操作。選擇策略決定哪些個體存活并得以繁殖,因其直接關系到遺傳算法的運行導向問題故對遺傳算法的性能有直接并且重大的影響。標準遺傳算法所采用的輪盤賭選擇策略簡便直觀,但可能會產生較大的抽樣誤差。于是,各種改進的選擇策略產生了。
最早提出的使用濃度控制的選擇策略可以保證群體的多樣性從而避免了早熟現象并且提高了算法的魯棒性及運算效率。后來通過對浮點遺傳算法早熟收斂現象的分析,有人提出了一種新的父代選擇策略,即使用當前代的子代個體作為下代的父代個體,可使交叉算子持續(xù)地探索和開發(fā)新空間。目前,人們又發(fā)現可以通過選擇策略的改變調控并維持種群多樣性。這類研究成果中,文獻中提到的重復串的適應度處理是一個有益的嘗試。
1.2 交叉單元
交叉模塊執(zhí)行遺傳算法中的交叉操作。由隨機數模塊產生的隨機數與事先確定的交叉概率相比較,如果隨機數小于交叉概率,則一對個體進行交叉操作,否則該對個體不變,直接進入變異模塊。
文中一對個體進行交叉操作的基因位由隨機數決定。隨機數模塊產生一個與個體等長的隨機二進制串,若隨機二進制串中的某一位為1,則該對個體中該位置的基因相互交叉;否則,該對個體中該位置的基因保持不變。
1.3 變異單元
變異模塊執(zhí)行遺傳算法中的變異操作。與交叉模塊相似,變異模塊也是將隨機數模塊產生的隨機數與事先確定的變異概率相比較,決定是否進行變異操作。同時個體中進行變異操作的基因位也是由一個與個體等長的隨機二進制字符串決定的。對個體而言,執(zhí)行變異操作的基因位不宜過多,否則容易對個體造成較大的破壞,影響種群的穩(wěn)定性。本文將兩個隨機二進制字符串(每一位0、1等概率)進行相與操作,這樣得到的新的隨機二進制字符串中每一位為1的概率將降低到25%,用這個新的隨機二進制串來決定個體變異的基因位。這樣執(zhí)行變異操作的個體中,每一位基因變異的概率也會降低到25%。
1.4 適應度計算單元
適應度計算模塊執(zhí)行遺傳算法中的適應度計算比較操作,它根據適應度計算函數來計算種群中每一個個體的適應度,包括遺傳算法開始時初始化產生的種群和后來遺傳變異后產生的種群,并把每個個體的適應度大小保存到存儲器中。同時,適應度計算模塊還需要記錄每一代種群中適應度最高的個體。適應度計算模塊有一個內置的計數器,計數器隨適應度計算模塊的啟動而啟動,從0開始計數,每個時鐘周期加1。計數器數值表示當前個體及其適應度在存儲器模塊當中的存放地址。適應度計算模塊停止工作時,計數器會重新歸零,等待新一輪的啟動信號。
評論