蛙跳演算法(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定律的重要前提 但是實際中,群體間經常會發生近親交配,特別是在植物群體中,在近親交配的群體中,婚配關係並不隨機,導致群體中純合體的比例上公升,雜合體的比例下降 因此,為了衡量群體的近交程度,近交係數誕生了。近交群體的近交程度...