遗传算法求函数最大值实验_小知识:什么是遗传算法
1 什么是遺傳算法
遺傳算法(GeneticAlgorithm, GA)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。
其主要特點是直接對結構對象進行操作,不存在求導和函數連續性的限定;具有內在的隱并行性和更好的全局尋優能力;采用概率化的尋優方法,不需要確定的規則就能自動獲取和指導優化的搜索空間,自適應地調整搜索方向。
遺傳算法以一種群體中的所有個體為對象,并利用隨機化技術指導對一個被編碼的參數空間進行高效搜索。其中,選擇、交叉和變異構成了遺傳算法的遺傳操作;參數編碼、初始群體的設定、適應度函數的設計、遺傳操作設計、控制參數設定五個要素組成了遺傳算法的核心內容。
2 遺傳算法的運算過程
對于一個求函數最大值的優化問題(求函數最小值也類同),一般可以描述為下列數學規劃模型:
式中?為決策變量,為??為目標函數式,??、為約束條件,U是基本空間,R是U的子集。滿足約束條件的解??稱為可行解,集合R表示所有滿足約束條件的解所組成的集合,稱為可行解集合。
遺傳算法也是計算機科學人工智能領域中用于解決最優化的一種搜索啟發式算法,是進化算法的一種。這種啟發式通常用來生成有用的解決方案來優化和搜索問題。進化算法最初是借鑒了進化生物學中的一些現象而發展起來的,這些現象包括遺傳、突變、自然選擇以及雜交等。遺傳算法在適應度函數選擇不當的情況下有可能收斂于局部最優?,而不能達到全局最優。遺傳算法的基本運算過程如下:
a)初始化:設置進化代數計數器t=0,設置最大進化代數T,隨機生成M個個體作為初始群體P(0)。
b)個體評價:計算群體P(t)中各個個體的適應度。
c)選擇運算:將選擇算子作用于群體。選擇的目的是把優化的個體直接遺傳到下一代或通過配對交叉產生新的個體再遺傳到下一代。選擇操作是建立在群體中個體的適應度評估基礎上的。
d)交叉運算:將交叉算子作用于群體。遺傳算法中起核心作用的就是交叉算子。
e)變異運算:將變異算子作用于群體。即是對群體中的個體串的某些基因座上的基因值作變動。群體P(t)經過選擇、交叉、變異運算之后得到下一代群體P(t+1)。
f)終止條件判斷:若t=T,則以進化過程中所得到的具有最大適應度個體作為最優解輸出,終止計算。
3 相關生物學術語
為了大家更好了解遺傳算法,在此之前先簡單介紹一下相關生物學術語,大家了解一下即可。
基因型(genotype):性狀染色體的內部表現;
表現型(phenotype):染色體決定的性狀的外部表現,或者說,根據基因型形成的個體的外部表現;
進化(evolution):種群逐漸適應生存環境,品質不斷得到改良。生物的進化是以種群的形式進行的。
適應度(fitness):度量某個物種對于生存環境的適應程度。
選擇(selection):以一定的概率從種群中選擇若干個個體。一般,選擇過程是一種基于適應度的優勝劣汰的過程。
復制(reproduction):細胞分裂時,遺傳物質DNA通過復制而轉移到新產生的細胞中,新細胞就繼承了舊細胞的基因。
交叉(crossover):兩個染色體的某一相同位置處DNA被切斷,前后兩串分別交叉組合形成兩個新的染色體。也稱基因重組或雜交;
變異(mutation):復制時可能(很小的概率)產生某些復制差錯,變異產生新的染色體,表現出新的性狀。
編碼(coding):DNA中遺傳信息在一個長鏈上按一定的模式排列。遺傳編碼可看作從表現型到基因型的映射。
解碼(decoding):基因型到表現型的映射。
個體(individual):指染色體帶有特征的實體;
種群(population):個體的集合,該集合內個體數稱為種群
4 問題舉例與解決方案
讓我們先來考慮考慮下面這個問題的解決辦法。
??????????已知一元函數:
現在要求在既定的區間內找出函數的最大值?
“袋鼠跳”問題
既然我們把函數曲線理解成一個一個山峰和山谷組成的山脈。那么我們可以設想所得到的每一個解就是一只袋鼠,我們希望它們不斷的向著更高處跳去,直到跳到最高的山峰(盡管袋鼠本身不見得愿意那么做)。所以求最大值的過程就轉化成一個“袋鼠跳”的過程。
作為對比下面簡單介紹“袋鼠跳”的幾種方式。
?1.?爬山法(最速上升爬山法):
從搜索空間中隨機產生鄰近的點,從中選擇對應解最優的個體,替換原來的個體,不斷重復上述過程。因為爬山法只對“鄰近”的點作比較,所以目光比較“短淺”,常常只能收斂到離開初始位置比較近的局部最優解上面。對于存在很多局部最優點的問題,通過一個簡單的迭代找出全局最優解的機會非常渺茫。(在爬山法中,袋鼠最有希望到達最靠近它出發點的山頂,但不能保證該山頂是珠穆朗瑪峰,或者是一個非常高的山峰。因為一路上它只顧上坡,沒有下坡。)
2.?模擬退火:
這個方法來自金屬熱加工過程的啟發。在金屬熱加工過程中,當金屬的溫度超過它的熔點(Melting Point)時,原子就會激烈地隨機運動。與所有的其它的物理系統相類似,原子的這種運動趨向于尋找其能量的極小狀態。在這個能量的變遷過程中,開始時,溫度非常高,使得原子具有很高的能量。隨著溫度不斷降低,金屬逐漸冷卻,金屬中的原子的能量就越來越小,最后達到所有可能的最低點。利用模擬退火的時候,讓算法從較大的跳躍開始,使到它有足夠的“能量”逃離可能“路過”的局部最優解而不至于限制在其中,當它停在全局最優解附近的時候,逐漸的減小跳躍量,以便使其“落腳?”到全局最優解上。(在模擬退火中,袋鼠喝醉了,而且隨機地大跳躍了很長時間。運氣好的話,它從一個山峰跳過山谷,到了另外一個更高的山峰上。但最后,它漸漸清醒了并朝著它所在的峰頂跳去。)
3.?遺傳算法:
模擬物競天擇的生物進化過程,通過維護一個潛在解的群體執行了多方向的搜索,并支持這些方向上的信息構成和交換。是以面為單位的搜索,比以點為單位的搜索,更能發現全局最優解。(在遺傳算法中,有很多袋鼠,它們降落到喜瑪拉雅山脈的任意地方。這些袋鼠并不知道它們的任務是尋找珠穆朗瑪峰。但每過幾年,就在一些海拔高度較低的地方射殺一些袋鼠,并希望存活下來的袋鼠是多產的,在它們所處的地方生兒育女。)(或者換個說法。從前,有一大群袋鼠,它們被莫名其妙的零散地遺棄于喜馬拉雅山脈。于是只好在那里艱苦的生活。海拔低的地方彌漫著一種無色無味的毒氣,海拔越高毒氣越稀薄。可是可憐的袋鼠們對此全然不覺,還是習慣于活蹦亂跳。于是,不斷有袋鼠死于海拔較低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有機會生兒育女。就這樣經過許多年,這些袋鼠們竟然都不自覺地聚攏到了一個個的山峰上,可是在所有的袋鼠中,只有聚攏到珠穆朗瑪峰的袋鼠被帶回了美麗的澳洲。)
一個使用python的遺傳算法框架
5 遺傳算法的實現過程
遺傳算法的實現過程實際上就像自然界的進化過程那樣。首先尋找一種對問題潛在解進行“數字化”編碼的方案。(建立表現型和基因型的映射關系)然后用隨機數初始化一個種群(那么第一批袋鼠就被隨意地分散在山脈上),種群里面的個體就是這些數字化的編碼。接下來,通過適當的解碼過程之后(得到袋鼠的位置坐標),用適應性函數對每一個基因個體作一次適應度評估(袋鼠爬得越高,越是受我們的喜愛,所以適應度相應越高)。用選擇函數按照某種規定擇優選擇(我們要每隔一段時間,在山上射殺一些所在海拔較低的袋鼠,以保證袋鼠總體數目持平)。讓個體基因變異(讓袋鼠隨機地跳一跳)。然后產生子代(希望存活下來的袋鼠是多產的,并在那里生兒育女)。遺傳算法并不保證你能獲得問題的最優解,但是使用遺傳算法的最大優點在于你不必去了解和操心如何去“找”最優解。(你不必去指導袋鼠向那邊跳,跳多遠。)而只要簡單的“否定”一些表現不好的個體就行了。(把那些總是愛走下坡路的袋鼠射殺,這就是遺傳算法的精粹!)
6 遺傳算法的特點
(1)遺傳算法從問題解的串集開始搜索,而不是從單個解開始。這是遺傳算法與傳統優化算法的極大區別。傳統優化算法是從單個初始值迭代求最優解的;容易誤入局部最優解。遺傳算法從串集開始搜索,覆蓋面大,利于全局擇優。
(2)遺傳算法同時處理群體中的多個個體,即對搜索空間中的多個解進行評估,減少了陷入局部最優解的風險,同時算法本身易于實現并行化。
(3)遺傳算法基本上不用搜索空間的知識或其它輔助信息,而僅用適應度函數值來評估個體,在此基礎上進行遺傳操作。適應度函數不僅不受連續可微的約束,而且其定義域可以任意設定。這一特點使得遺傳算法的應用范圍大大擴展。
(4)遺傳算法不是采用確定性規則,而是采用概率的變遷規則來指導他的搜索方向。
(5)具有自組織、自適應和自學習性。遺傳算法利用進化過程獲得的信息自行組織搜索時,適應度大的個體具有較高的生存概率,并獲得更適應環境的基因結構。
(6)此外,算法本身也可以采用動態自適應技術,在進化過程中自動調整算法控制參數和編碼精度,比如使用模糊自適應法。
現階段不足之處
(1)編碼不規范及編碼存在表示的不準確性。
(2)單一的遺傳算法編碼不能全面地將優化問題的約束表示出來。考慮約束的一個方法就是對不可行解采用閾值,這樣,計算的時間必然增加。
(3)遺傳算法通常的效率比其他傳統的優化方法低。
(4)遺傳算法容易過早收斂。
(5)遺傳算法對算法的精度、可行度、計算復雜性等方面,還沒有有效的定量分析方法。
總結
以上是生活随笔為你收集整理的遗传算法求函数最大值实验_小知识:什么是遗传算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单价数量和总价的公式_人教版四年级数学上
- 下一篇: 在C语言中023是八进制数,C语言总结