遺傳演算法 python 簡書 遺傳演算法

2021-10-11 20:40:33 字數 1516 閱讀 4272

優化的演算法有很多種,從最基本的梯度下降法到現在的一些啟發式演算法,如遺傳演算法(ga),差分演化演算法(de),粒子群演算法(pso)和人工蜂群演算法(abc)。

舉乙個例子,遺傳演算法和梯度下降:

梯度下降和遺傳演算法都是優化演算法,而梯度下降只是其中最基礎的那乙個,它依靠梯度與方向導數的關係計算出最優值。遺傳演算法則是優化演算法中的啟發式演算法中的一種,啟發式演算法的意思就是先需要提供至少乙個初始可行解,然後在預定義的搜尋空間高效搜尋用以迭代地改進解,最後得到乙個次優解或者滿意解。遺傳演算法則是基於群體的啟發式演算法。

遺傳演算法和梯度下降的區別是:

1.梯度下降使用誤差函式決定梯度下降的方向,遺傳演算法使用目標函式評估個體的適應度

2.梯度下降是有每一步都是基於學習率下降的並且大部分情況下都是朝著優化方向迭代更新,容易達到區域性最優解出不來;而遺傳演算法是使用選擇、交叉和變異因子迭代更新的,可以有效跳出區域性最優解

3.遺傳演算法的值可以用二進位制編碼表示,也可以直接實數表示

遺傳演算法如何使用它的內在構造來算出 α 和 β :

主要講一下選擇、交叉和變異這一部分:

1.選擇運算:將選擇運算元作用於群體。選擇的目的是把優秀(適應值高)的個體直接遺傳到下一代。選擇操作是建立在群體中個體的適應度評估基礎上的。

2.交叉運算:將交叉運算元作用於群體。遺傳演算法中起核心作用的就是交叉運算元。交叉運算元是將種群中的個體兩兩分組,按一定概率和方式交換部分基因的操作。將交叉運算元作用於群體。遺傳演算法中起核心作用的就是交叉運算元。例如:(根據概率選取50個個體,兩兩配對,交換x,y,比如之前兩個是(x1,y1),(x2,y2),之後變成了(x1,y2),(x2,y1))

3.變異運算:將變異運算元作用於群體。即是對群體中的個體串的某些基因座上的基因值作變動。(x2可能變為x2+δ,y1變為y1+δ)

種**(t)經過選擇、交叉、變異運算之後得到下一代種**(t+1)。

遺傳演算法就是通過對大量的資料個體使用選擇、交叉和變異方式來進化,尋找適合問題的最優解或者滿意解。

遺傳演算法引數的用處和設定:

1.編碼選擇:通常使用二進位制編碼和浮點數編碼,二進位制適合精度要求不高、特徵較少的情況。浮點數適合精度高、特徵多的情況

2.種群:種群由個體組成,個體中的每個數字都代表乙個特徵,種群個體數量通常設定在40-60之間;迭代次數通常看情況定若計算時間較長可以在100內,否則1000以內都可以。

3.選擇因子:通常有輪盤賭選擇和錦標賽選擇,輪盤賭博的特點是收斂速度較快,但優勢個體會迅速繁殖,導致種群缺乏多樣性。錦標賽選擇的特點是群多樣性較為豐富,同時保證了被選個體較優。

4.交叉因子:交叉方法有單點交叉和兩點交叉等等,通常用兩點交叉。交叉概率則選擇在0.7-0.9。概率越低收斂越慢時間越長。交叉操作能夠組合出新的個體,在串空間進行有效搜尋,同時降低對種群有效模式的破壞概率。

5.變異因子:變異也有變異的方法和概率。方法有均勻變異和高斯變異等等;概率也可以設定成0.1。變異操作可以改善遺傳演算法的區域性搜尋能力,豐富種群多樣性。

6.終止條件:1、完成了預先給定的進化代數;2、種群中的最優個體在連續若干代沒有改進或平均適應度在連續若干代基本沒有改進;3、所求問題最優值小於給定的閾值.

python遺傳演算法 Python 遺傳演算法實現

關於遺傳演算法 遺傳演算法是仿照自然界中生物進化而產生的一類優化演算法。個人感覺遺傳演算法簡單粗暴,適應性廣。關於遺傳演算法的介紹網上有很多了,這裡按照我自己的理解簡單概括一下。編碼解碼,將待優化的引數編碼為dna序列,最簡單直接的為二進位制編碼 即有兩種鹼基的dna鏈 生成隨機初代 選擇,適應度 ...

遺傳演算法python實現

i 實現功能 求解函式 f x x 10 sin 5 x 7 cos 4 x 在區間 0,9 的最大值 ii 原理 遺傳演算法 genetic algorithm 遵循 適者生存 優勝劣汰 的原則,是一類借鑑生物界自然選擇和自然遺傳機制的隨機化搜尋演算法。遺傳演算法模擬乙個人工種群的進化過程,通過選...

遺傳演算法 python實現

encoding utf 8 import math import random import operator class ga def init self,length,count 染色體長度 self.length length 種群中的染色體數量 self.count count 隨機生成初...