遺傳演算法 matlab實現 多維變數 二進位制編碼

2021-10-07 09:34:20 字數 933 閱讀 5117

這些日子一直在學習遺傳演算法,在csdn上看了好多關於遺傳演算法的例子,但是找不到乙個符合自己的例子。

自己的需求:有四個變數,尋求最優化的結果。

跟那些用二元函式舉例的不同。

首先介紹下,

1. 遺傳演算法的流程:

假設有100個個體,計算每個個體的適應度(即效能),通過輪盤演算法,選擇100個個體,這100個不是前面的100個,而是根據適應度從新選擇的,適應度高的一般多選,適應度低的一般淘汰掉,總數為100個,然後這100個就可以進行遺傳操作,一般順序是交叉、變異,然後形成的新種群就是下一代了。這就是一次迴圈,然後設定迴圈n次,就可以了。這裡的適應度是根據自己的問題來設定的,一般是取最大值。

2. 注意的問題

我介紹的遺傳演算法matlab程式是多個變數、二進位制的。

3. 細節介紹

其實交叉、變異的程式都大同小異,對於單個變數和多個變數的區別在於設定的pop。如果你是多個變數,每個變數設定20位二進位制來表示,那麼你pop就要設定的列數為變數數乘以20,行數是個體的數目。這是第乙個理解的地方。

接下來就是計算適應度的程式了。這裡假設變數數為4個,個體數為50個,故pop是乙個【50,4*20】的陣列大小。這裡是二進位制哈,你要計算的話,得轉化為十進位制,所以需要乙個binary2decimal()函式,用法如下:

x1 = binary2decimal(pop(i,1:20));

x2 = binary2decimal(pop(i,21:40));

x3 = binary2decimal(pop(i,41:60));

x4 = binary2decimal(pop(i,61:80)); 

這裡的i是代表每個個體。那麼久通過上面的函式得到四個變數了,帶入自己模型所對應的函式計算,可以得到每個個體的適應度。

然後就是選擇函式,交叉函式,變異函式。

最後將新的種群賦值給pop,再次迴圈,知道迴圈次數結束。

遺傳演算法的matlab實現

遺傳演算法是一種全域性最優化演算法,是運用了演化論優勝劣汰原理的隨機化搜尋方法。前些日子,在進行畢業設計的相關研究中,我接觸到了遺傳演算法,用其對乙個五元非線性函式進行最優化搜尋。平台使用的是matlab,主要使用的是謝菲爾德大學的matlab遺傳演算法工具箱。具體程式如下 clc clear al...

遺傳演算法(GA)的matlab實現

一 task 二 實現過程 1.編碼與解碼 編碼 在編碼之前需要確定求解的精度,設定求解的精度為小數點後六位,即10 6。這樣可以將每個自變數x的解空間劃分為 1 0 10 6 1000000個等分。使n滿足 1 0 10 6 2 n 1,這裡n表示使上式成立的最小整數,即表示自變數x的基因串的長度...

遺傳演算法及matlab簡單實現

遺傳演算法的實現 遺傳演算法的一次迭代稱為一代,每一代都有一組解。新的一組解不但可以有選擇的保留一些適度值高的舊的解,而且可以包括一些由其它解結合得到的新解。最初的一組解 初始群體 是隨機生成的,之後的每組解由遺傳操作生成。每個解都通過乙個與目標函式相關的適應度函式給予評價,通過遺傳過程不斷重複,達...