C 遺傳學SFLA混合蛙跳演算法

2021-08-09 14:21:38 字數 2482 閱讀 3112

蛙跳演算法(shuffled frog leading algorithm)是一種啟發式演算法,通過啟發式函式進行啟發式搜尋,從而找到組合最優問題的解。

他結合了以遺傳為基礎的memetic演算法和以社會行為為基礎的粒子群優化演算法的優點。也可以說sfla=sce+pso

一、問題概念:

蛙跳演算法的思想是:在一片濕地中生活著一群青蛙。濕地內離散的分布著許多石頭,青蛙通過尋找不同的石頭進行跳躍去找到食物較多的地方。每只青蛙個體之間通過文化的交流實現資訊的交換。每只青蛙都具有自己的文化。每只青蛙的文化被定義為問題的乙個解。濕地的整個青蛙群體被分為不同的子群體,每個子群體有著自己的文化,執行區域性搜尋策略。在子群體中的每個個體有著自己的文化,並且影響著其他個體,也受其他個體的影響,並隨著子群體的進化而進化。當子群體進化到一定階段以後,各個子群體之間再進行思想的交流(全域性資訊交換)實現子群體間的混合運算,一直到所設定的條件滿足為止。

二、解決思路:

在sfla中,種群被分為若干個子群(memeplex),每乙個子群包括一定數量的青蛙。不同的memeplex具有不同的文化,分別進行區域性搜尋。在每個子群中,每只青蛙都有自己的想法,並且受到其他青蛙想法的影響,通過memetic進化來發展。這樣經過一定的memetic進化以及跳躍過程,這些想法思路就在各個memeplex中傳播開來,然後,據需區域性搜尋和跳躍,知道收斂或滿足標準為止。

可以這樣理解,所有的個體(青蛙)都在朝向相對更優的解進化,然後經過給定的週期(設定的迭代次數)後,再看其所有個體的進化程度。演算法的思想是每個個體所含在的基因都朝向乙個目標發展(子群最優、全域性最優),就像我們會向更優秀的人索取經驗、期望和更優秀的人保持更多的相同點乙個道理。

三、基本引數

蛙群的數量;

族群的數量;

族群中青蛙的數量;

最大允許跳動步長;

全域性最好解;

區域性最好解;

區域性最差解;

子族群中青蛙的數量;

區域性元進化次數;

全域性思想交流次數等。

四、演算法實現

4.1 初始化

定義基本引數

#define g 100  /*混合迭代次數*/

#define m 3 /*族群數*/

#define i 5 /*乙個族群中的個體數*/

#define p m*i /*個體總數*/

#define v 20 /*個體基因維數*/

#define n 10 /*族群內更新次數*/

#define max 1000.0/*隨機最大值*/

#define min -1000.0/*隨機最小值*/

#define d 2.0 /*蛙跳的最大值*/

#define r (rand()%100)/100.0

typedef struct individal;

individal pw[m];/*族群中個體最差*/

individal pb[m];/*族群中個體最好*/

individal pg;/*全體中最好*/

individal group[p];/*整體*/

individal memeplex[m][i];/*族群*/

生成蛙群,每只蛙個體包括基因維數陣列以及價值(適應度)

double fitness(individal individal)

void memetic()

temp[i].value = fitness(temp[i]);

if (temp[i].valued ? d : temp[i].d[j];

temp[i].d[j] = temp[i].d[j] < -d ? -d : temp[i].d[j];

temp[i].d[k] += pw[i].d[k];

}temp[i].value = fitness(temp[i]);

if (temp[i].value

4.種群迭代

青蛙在memeplex之間跳躍。在每個memeplex中執行了一定的memetic進化之後,將各個子群合併到整體,再重新排序,並更新種群中最好的青蛙pg

如果迭代終止條件滿足,則停止;否則,繼續迭代.一般情況下,當執行了一定次數的迴圈進化,代表最好解的青蛙的位置不再改變的時候,演算法停止。

void renew()

{ int i, j, k;

i = 0;

for (j = 0; j

for (int i = 0; i

五、參考流程圖

六、測試截圖

void test()

{ init();

for (int i = 0; i

群體遺傳學 Fst指數

群體遺傳學中衡量群體間分化程度的指標有很多種,最常用的就是fst指數。fst指數,由f統計量演變而來。f統計量 fis,fif,fst 主要有三種。fst是針對一對等位基因,如果基因座上存在復等位基因,則需要用gst衡量,基因差異分化係數 gene differentiation coefficie...

最佳適應演算法 遺傳學演算法

遺傳演算法 genetic algorithm,ga 是模擬達爾文的遺傳選擇和自然淘汰的生物進化過程的計算模型,是一種通過模擬自然進化過程搜尋最優解的方法。遺傳演算法以一種群體中的所有個體為物件,並利用隨機化技術指導對乙個被編碼的引數空間進行高效搜尋。遺傳演算法基本思想 核心是達爾文優勝劣汰適者生存...

群體遺傳學 近交係數

群體遺傳學中,經常提到群體間隨機交配,隨機交配是hardy weinberg定律的重要前提 但是實際中,群體間經常會發生近親交配,特別是在植物群體中,在近親交配的群體中,婚配關係並不隨機,導致群體中純合體的比例上公升,雜合體的比例下降 因此,為了衡量群體的近交程度,近交係數誕生了。近交群體的近交程度...