蛙跳演算法的思想是:在一片濕地中生活著一群青蛙。濕地內離散的分布著許多石頭,青蛙通過尋找不同的石頭進行跳躍去找到食物較多的地方。每只青蛙個體之間通過文化的交流實現資訊的交換。每只青蛙都具有自己的文化。每只青蛙的文化被定義為問題的乙個解。濕地的整個青蛙群體被分為不同的子群體,每個子群體有著自己的文化,執行區域性搜尋策略。在子群體中的每個個體有著自己的文化,並且影響著其他個體,也受其他個體的影響,並隨著子群體的進化而進化。當子群體進化到一定階段以後,各個子群體之間再進行思想的交流(全域性資訊交換)實現子群體間的混合運算,一直到所設定的條件滿足為止。
宣告:以下步驟都是引用c++ 遺傳學sfla混合蛙跳演算法這個老哥的。
生成蛙群,每只蛙個體包括基因維數陣列以及價值(適應度)
對青蛙劃分等級。將青蛙按照效能的好壞依次排列,生成陣列:記錄最好青蛙pg,同時對其進行分組(將陣列group分成為m個memeplex)
青蛙在memeplex之間跳躍。在每個memeplex中執行了一定的memetic進化之後,將各個子群合併到整體,再重新排序,並更新種群中最好的青蛙pg
如果迭代終止條件滿足,則停止;否則,繼續迭代.一般情況下,當執行了一定次數的迴圈進化,代表最好解的青蛙的位置不再改變的時候,演算法停止。
步驟1,2都好理解,步驟3開始:
調整最壞青蛙的位置,方法如下:
青蛙移動的距離 di=rand()*(pb-pw)
新的位置 pw=pw(當前位置)+di,(dmax>=di>=-dmax)
其中rand()是0-1之間的隨機數,dmax是青蛙移動的最大距離。
如果上述過程能夠使得青蛙有乙個更好的位置,即能產生乙個更好的解,那麼就用新的位置青蛙取代原來的青蛙;否則,用pg代替pb,重複上述過程
如果上述方法仍不能生成更好的青蛙,那麼就隨機生成乙個新解取代原來最壞的青蛙pw
這其實可以理解為,對最差的青蛙進行進化,以誰為目標呢,這個小組內最好的那只青蛙,如果能進步,那就是乙隻有進步的青蛙;如果不能進步,那就考慮給它換個目標,可能當前的目標有問題,發展的模板不對;如果還不能進步,那就是這只青蛙的問題,就換乙隻青蛙進行進化。
步驟4,5好理解就不說了。
c++ 遺傳學sfla混合蛙跳演算法
matlab**
C 遺傳學SFLA混合蛙跳演算法
蛙跳演算法 shuffled frog leading algorithm 是一種啟發式演算法,通過啟發式函式進行啟發式搜尋,從而找到組合最優問題的解。他結合了以遺傳為基礎的memetic演算法和以社會行為為基礎的粒子群優化演算法的優點。也可以說sfla sce pso 一 問題概念 蛙跳演算法的思...
typescript Mixin混合的理解
disposable mixin class disposable activatable mixin class activatable deactivate class smartobject implements disposable,activatable interact disposab...
高斯混合模型的理解
背景相減法進行建模時涉及到了背景模型的建立問題,許多 以及在opencv裡都提供了基於高斯混合模型進行背景更新的方法,無奈涉及到了太多的概率論的東西,大四小白完全看不懂,只能大概理解,下面是找到的幾篇挺有幫助的部落格。高斯混合模型 gmm 及其em演算法的理解 深度理解高斯混合模型 gmm 這篇部落...