- 遺傳算法的退化問題:
在對算法的實施過程中不難發現兩個主要遺傳算子都是在一定發生概率的條件下,隨機地、沒有指導地迭代搜索,因此它們在爲羣體中的個體提供了進化機會的同時,也無可避免地產生了退化的可能。在某些情況下,這種退化現象還相當明顯。另外,每一個待求的實際問題都會有自身一些基本的、顯而易見的特徵信息或知識。然而遺傳算法的交叉和變異算子卻相對固定,在求解問題時,可變的靈活程度較小。這無疑對算法的通用性是有益的,但卻忽視了問題的特徵信息對求解問題時的輔助作用,特別是在求解一些複雜問題時,這種忽視所帶來的損失往往就比較明顯了。
免疫算法
免疫算法的基本步驟:
- 抗原識別。輸入目標函數和各種約束作爲免疫算法的抗原。
- 初始抗體生成。隨機生成初始抗體種羣。
- 親和力計算。計算抗體的適應值。對解羣體中的各個解個體進行綜合評價,包括解(抗體)與問題(抗原)的適應值(親和力)以及解與解之間的相似度(親和力)
- 免疫處理。免疫處理包括免疫選擇、克隆、變異和抑制。
免疫選擇:根據抗體的親和力選出親和度較高的抗體。
克隆:對選出的親和力較高的抗體進行復制。
變異:對克隆得到的個體進行交叉、變異操作,使其親和力發生改變。
抑制:對變異的抗體進行選擇,保留親和度較高的抗體。 - 羣體刷新。將免疫選擇的抗體和免疫抑制後的抗體組成一個集合,保留其中親和度較高的抗體,使這些抗體進入新的種羣。新的種羣中不足的部分隨機生成,以增加多樣性。
免疫算法與遺傳算法的區別
免疫算法是模擬免疫系統對病菌的多樣性識別能力(即免疫系統幾乎可以識別無窮多種類的病菌)而設計出來的多峯值搜索算法,其具體步驟如下
代碼實現
代碼實現編輯
step1:在GitHub上下載常用的 scikit-opt庫。
step2:定義目標函數,並執行免疫算法
免疫算法中的綜合評價是怎麼實現的,可以參見scikit-opt庫的源代碼