導航:首頁 > 源碼編譯 > 遺傳演算法的基本流程

遺傳演算法的基本流程

發布時間:2025-05-26 21:45:13

1. Python實現基於遺傳演算法的排課優化

排課問題的本質是將課程、教師和學生在合適的時間段內分配到合適的教室中,涉及到的因素較多,是一個多目標的調度問題,在運籌學中被稱為時間表問題(Timetable Problem,TTP)。設一個星期有n個時段可排課,有m位教師需要參與排課,平均每位教師一個星期上k節課,在不考慮其他限制的情況下,能夠推出的可能組合就有 種,如此高的復雜度是目前計算機所無法承受的。因此眾多研究者提出了多種其他排課演算法,如模擬退火,列表尋優搜索和約束滿意等。

Github : https://github.com/xiaochus/GeneticClassSchele

遺傳演算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。遺傳演算法的流程如下所示:

遺傳演算法首先針對待解決問題隨機生成一組解,我們稱之為種群(Population)。種群中的每個個體都是問題的解,在優化的過程中,演算法會計算整個種群的成本函數,從而得到一個與種群相關的適應度的序列。如下圖所示:

為了得到新的下一代種群,首先根據適應度對種群進行排序,從中挑選出最優的幾個個體加入下一代種群,這一個過程也被稱為精英選拔。新種群餘下的部分通過對選拔出來的精英個體進行修改得到。

對種群進行修改的方法參考了生物DAN進化的方法,一般使用兩種方法: 變異 和 交叉 。 變異 的做法是對種群做一個微小的、隨機的改變。如果解的編碼方式是二進制,那麼就隨機選取一個位置進行0和1的互相突變;如果解的編碼方式是十進制,那麼就隨機選取一個位置進行隨機加減。 交叉 的做法是隨機從最優種群中選取兩個個體,以某個位置為交叉點合成一個新的個體。

經過突變和交叉後我們得到新的種群(大小與上一代種群一致),對新種群重復重復上述過程,直到達到迭代次數(失敗)或者解的適應性達到我們的要求(成功),GA演算法就結束了。

演算法實現

首先定義一個課程類,這個類包含了課程、班級、教師、教室、星期、時間幾個屬性,其中前三個是我們自定義的,後面三個是需要演算法來優化的。

接下來定義cost函數,這個函數用來計算課表種群的沖突。當被測試課表沖突為0的時候,這個課表就是個符合規定的課表。沖突檢測遵循下面幾條規則:

使用遺傳演算法進行優化的過程如下,與上一節的流程圖過程相同。

init_population :隨機初始化不同的種群。
mutate :變異操作,隨機對 Schele 對象中的某個可改變屬性在允許范圍內進行隨機加減。
crossover :交叉操作,隨機對兩個對象交換不同位置的屬性。
evolution :啟動GA演算法進行優化。

實驗結果

下面定義了3個班,6種課程、教師和3個教室來對排課效果進行測試。

優化結果如下,迭代到第68次時,課程安排不存在任何沖突。

選擇1203班的課表進行可視化,如下所示,演算法合理的安排了對應的課程。

2. 進化演算法簡介

進化演算法,作為一類"演算法簇",其靈感源於大自然的生物進化,具有高魯棒性和廣泛適用性,成為了一種成熟的全局優化方法。相比傳統的基於微積分的方法和窮舉法,進化計算具備自組織、自適應、自學習的特性,能夠靈活應對傳統優化演算法難以解決的復雜問題。

進化演算法包括遺傳演算法、進化程序設計、進化規劃和進化策略等,它們共享簡單遺傳演算法的基本框架,但在進化方式上存在顯著差異。選擇、交叉、變異、種群控制等關鍵步驟各有變化。進化演算法的進化流程如圖所示,直觀展示了演算法的核心步驟。

關於收斂性,進化演算法在文獻[9]中被證明,在保留最優個體的策略下,通用的進化計算是收斂的。然而,關於收斂性的具體結果大多是從遺傳演算法中推導而來。

在交叉操作的重視程度上,遺傳演算法傾向於將其視為核心操作,而視變異操作為輔助手段。然而,進化規劃和進化策略則認為,從一般意義上講,交叉操作並不優於變異操作,甚至可以不依賴交叉操作。

3. 遺傳演算法理解

遺傳演算法是一種進化演算法,進化是什麼哪?就是種群逐漸適應生存環境,種群中個體不斷得到改良的過程。

遺傳演算法是一種對生物遺傳的模擬、在演算法中,初始化一個種群,種群中的每個染色體個體都是一種解決方案,我們通過適應性fitness來衡量這個解決方案的好壞。並對它們進行選擇、變異、交叉的操作,找到最優的解決方案。

總結一下遺傳演算法的基本的步驟:

1.初始化一個種群,並評估每條染色體所對應個體的適應度。

2.選擇、交叉、變異,產生新的種群

3.再評估每個個體的適應值,如果適應值達到要求或者達到最大循環次數,否則重復2,不斷產生新種群。

知道了GA的大致流程之後、來具體分析一下細節,怎麼實現吧

我們知道遺傳演算法起源於生物遺傳,因此在種群中每個個體就是一個染色體,那如何對染色體進行編碼,讓它表示我們的解決方案那(就是把現實要優化的參數用編碼表示成一個染色體)。這里就遇到了一個編碼、解碼的問題,我們將需要優化的目標編碼成染色體,然後再解碼為我們可以用來計算fitness的解;

一般在進行參數優化時,一般有兩種方式:實數編碼、二進制編碼

實數編碼:基因直接用實數進行表示,這樣的表示方法比較簡單,不用特意解碼了,但是在交叉和變異時,容易過早收斂,陷入局部最優。

二進制編碼:將基因用二進制的形式表示,將參數的值轉化為二進制形式,這樣交叉、變異時更好操作,多樣性好,但是佔用的存儲空間大,需要解碼。

染色體就稱為個體。對於一次實驗,個體就是需要優化參數的一種解、許多這樣的個體就構成了種群。

在面對群體中那麼多個體時,如何判斷個體的好壞呢,就是通過適應值函數了,將解帶入適應值函數,適應值越大、解越好。

在遺傳演算法中,我們怎麼使得裡面的個體變得越來越優秀呢?

核心思想就是:選擇優秀的、淘汰不好的,並且為了生成更好的解,我們要嘗試交叉、變異,帶來新的解。

選擇就是從當前的種群中選擇出比較好的個體、淘汰不好的個體

常見的選擇方法有:輪盤賭選擇、錦標賽選擇、最佳保留選擇等等

輪盤賭選擇就是根據每個個體fitness和種群所有fitness之和比較,確定每個個體被選中的概率,然後進行n次選擇,選擇n個個體構成新種群,是一種放回抽樣的方式。

錦標賽就是每次從種群中選擇m個個體,選擇最優的,放入新種群,重復選擇,直到新種群中個體數目達到n。

最佳保留選擇就是在輪盤賭的基礎上,將fitness個體先加進新種群,因為輪盤賭是一種概率模型,可能存在最優個體沒有進入新種群的情況。

在選擇之後,就要考慮產生新的、更優秀的解,為種群帶來新的血液。遺傳演算法的思路是交叉兩個優秀的解,往往get好的解。

交叉通過在經過選擇的種群中,隨機選擇一對父母,將它們的染色體進行交叉,生成新的個體,替代原來的解。

常用的交叉方法有:單點交叉、多點交叉等等。

交叉就像生物裡面,染色體交換基因一樣的~但是並不是種群中所有個體都進行交叉的,實現時可以,設置一個交叉率和交叉概率,隨機選擇種群中兩個體、隨機一個數,小於交叉率就進行交叉操作,並根據交叉概率判斷交叉的程度,從而生成新個體,反之就保留這兩個體。

變異也是一種產生新個體的方式,通過改變個體上基因,期望產生更好的解。比如在以二進制編碼的個體上,將裡面的0、1進行等位變化啥的,就是0變1、1變0這樣。同樣也要考慮變異率、變異產生的新解是不可控的,可能很好,也可能很壞,不能像交叉一樣,確保一定的效果,所以往往變異率設置的比較小。

4. 遺傳演算法原理與應用實例的目錄

第1章 緒論
1.1 從生物進化到遺傳演算法
1.2 遺傳演算法的描述
1.3 表示方案的實例
1.3.1 工程設計的最優化
1.3.2 人工蟻問題
1.4 遺傳演算法的特點
1.5 遺傳演算法的發展簡史
1.6 遺傳演算法的研究內容及前景
1.7 遺傳演算法的應用
第2章 遺傳演算法的基本原理
2.1 復雜系統的適應過程
2.1.1 復雜系統的適應性
2.1.2 適應過程的數學模型
2.2 遺傳演算法的基本描述
2.2.1 整體優化問題
2.2.2 遺傳演算法的基本流程
2.2.3 遺傳編碼
2.2.4 適應函數(評價函數)
2.2.5 遺傳運算元
2.2.6 群體設定
2.2.7 初始化群體
2.2.8 終止循環的條件
2.2.9 標准遺傳演算法的流程
2.2.10 控制參數和選擇
2.2.11 遺傳演算法的性能評估
2.3 遺傳演算法的模式理論
2.3.1 模式與模式空間
2.3.2 模式生存模型
2.3.3 雙臂賭機分析
2.3.4 基因模塊假設
2.3.5 模式處理與隱含並行性
2.3.6 模式處理與遺傳運算元的性能
2.4 遺傳演算法與其他搜索技術的比較
2.4.1 啟發式隨機搜索技術的基本功能
2.4.2 局域搜索技術
2.4.3 模擬退火演算法
2.4.4 遺傳演算法搜索
2.4.5 啟發式搜索技術比較
2.5 遺傳演算法計算實例
2.5.1 單調連續函數
2.5.2 One-Max函數
2.5.3 皇家大道問題
2.6 遺傳演算法雜交率與變異率關系的研究
2.6.1 研究方法簡述
2.6.2 算例
2.6.3 應用
2.6.4 結論
第3章 遺傳演算法數學機理分析
3.1 遺傳演算法的基本定理
3.2 隱含並行性
3.3 Walsh模式變換
3.3.1 Walsh函數
3.3.2 用Walsh函數表示模式平均適應度
3.3.3 Walsh系數與異位顯性(epistasis)
3.4 非均勻Walsh模式變換
3.5 最小欺騙問題
3.6 遺傳演算法欺騙問題的分析與設計
……
第4章 解連續優化問題的遺傳演算法
第5章 分布式遺傳演算法研究
第6章 遺傳演算法的實現技術
第7章 遺傳演算法應用實例
參考文獻

閱讀全文

與遺傳演算法的基本流程相關的資料

熱點內容
android自定義dialog樣式 瀏覽:198
怎麼給d盤裡面文件加密 瀏覽:566
右鍵轉換為pdf 瀏覽:857
程序員那麼可愛免費觀看全集92 瀏覽:238
不用軟體如何加密視頻 瀏覽:39
pdfeditor免安裝 瀏覽:341
iphone怎麼設置app消息靜音 瀏覽:826
愛快app如何使用 瀏覽:198
編譯型語言都不開源嗎 瀏覽:307
誇克app怎麼設置中文 瀏覽:585
壓縮機氣閥異響後正常 瀏覽:428
程序員小剛生活記錄 瀏覽:683
wrf編譯出現的exe是紅色的 瀏覽:850
威綸通如何將編譯錯誤設置不報錯 瀏覽:799
單片機pic喂狗時間計算 瀏覽:64
applexs怎麼刪除桌面app資源庫 瀏覽:492
es瀏覽器可以解壓帶密碼的文件嗎 瀏覽:806
android添加圖片資源文件 瀏覽:704
加密盤重裝後打不開 瀏覽:888
蘋果電腦照片壓縮 瀏覽:921