Ⅰ 楸肩兢綆楁硶鏄浠涔
楸肩兢綆楁硶鏄鎸囧湪涓鐗囨按鍩熶腑錛岄奔寰寰鑳借嚜琛屾垨灝鵑殢鍏朵粬楸兼壘鍒拌惀鍏葷墿璐ㄥ氱殑鍦版柟錛屽洜鑰岄奔鐢熷瓨鏁扮洰鏈澶氱殑鍦版柟涓鑸灝辨槸鏈姘村煙涓钀ュ吇鐗╄川鏈澶氱殑鍦版柟錛屼漢宸ラ奔緹ょ畻娉曞氨鏄鏍規嵁榪欎竴鐗圭偣錛岄氳繃鏋勯犱漢宸ラ奔鏉ユā浠塊奔緹ょ殑瑙呴熴佽仛緹ゅ強榪藉熬琛屼負錛屼粠鑰屽疄鐜板諱紭錛屼互涓嬫槸楸肩殑鍑犵嶅吀鍨嬭屼負:
1銆佽呴熻屼負錛氫竴鑸鎯呭喌涓嬮奔鍦ㄦ按涓闅忔満鍦拌嚜鐢辨父鍔,褰撳彂鐜伴熺墿鏃,鍒欎細鍚戦熺墿閫愭笎澧炲氱殑鏂瑰悜蹇閫熸父鍘匯
2銆佽仛緹よ屼負:楸煎湪娓稿姩榪囩▼涓涓轟簡淇濊瘉鑷韜鐨勭敓瀛樺拰韜查伩鍗卞充細鑷鐒跺湴鑱氶泦鎴愮兢錛岄奔鑱氱兢鏃舵墍閬靛畧鐨勮勫垯鏈変笁鏉★細鍒嗛殧瑙勫垯錛氬敖閲忛伩鍏嶄笌涓磋繎浼欎即榪囦簬鎷ユ尋;瀵瑰噯瑙勫垯:灝介噺涓庝復榪戜紮浼寸殑騫沖潎鏂瑰悜涓鑷;鍐呰仛瑙勫垯:灝介噺鏈濅復榪戜紮浼寸殑涓蹇冪Щ鍔ㄣ
3銆佽拷灝捐屼負錛氬綋楸肩兢涓鐨勪竴鏉℃垨鍑犳潯楸煎彂鐜伴熺墿鏃,鍏朵復榪戠殑浼欎即浼氬熬闅忓叾蹇閫熷埌杈鵑熺墿鐐廣
4銆侀殢鏈鴻屼負錛氬崟鐙鐨勯奔鍦ㄦ按涓閫氬父閮芥槸闅忔満娓稿姩鐨勶紝榪欐槸涓轟簡鏇村ぇ鑼冨洿鍦板繪壘椋熺墿鐐規垨韜杈圭殑浼欎即銆
Ⅱ 人工魚群演算法的特點
1)具有較快的收斂速度,可以用於解決有實時性要求的問題;
2)對於一些精度要求不高的場合,可以用它快速的得到一個可行解;
3)不需要問題的嚴格機理模型,甚至不需要問題的精確描述,這使得它的應用范圍得以延伸。
Ⅲ 優化演算法筆記(二)優化演算法的分類
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
在分類之前,我們先列舉一下常見的優化演算法(不然我們拿什麼分類呢?)。
1遺傳演算法Genetic algorithm
2粒子群優化演算法Particle Swarm Optimization
3差分進化演算法Differential Evolution
4人工蜂群演算法Artificial Bee Colony
5蟻群演算法Ant Colony Optimization
6人工魚群演算法Artificial Fish Swarm Algorithm
7杜鵑搜索演算法Cuckoo Search
8螢火蟲演算法Firefly Algorithm
9灰狼演算法Grey Wolf Optimizer
10鯨魚演算法Whale Optimization Algorithm
11群搜索演算法Group search optimizer
12混合蛙跳演算法Shuffled Frog Leaping Algorithm
13煙花演算法fireworks algorithm
14菌群優化演算法Bacterial Foraging Optimization
以上優化演算法是我所接觸過的演算法,沒接觸過的演算法不能隨便下結論,知之為知之,不知為不知。其實到目前為止優化演算法可能已經有幾百種了,我們不可能也不需要全面的了解所有的演算法,而且優化演算法之間也有較大的共性,深入研究幾個之後再看其他優化演算法上手速度會灰常的快。
優化演算法從提出到現在不過50-60年(遺傳演算法1975年提出),雖種類繁多但大多較為相似,不過這也很正常,比較香蕉和人的基因相似度也有50%-60%。當然演算法之間的相似度要比香蕉和人的相似度更大,畢竟人家都是優化演算法,有著相同的目標,只是實現方式不同。就像條條大路通羅馬,我們可以走去,可以坐汽車去,可以坐火車去,也可以坐飛機去,不管使用何種方式,我們都在去往羅馬的路上,也不會說坐飛機去要比走去更好,交通工具只是一個工具,最終的方案還是要看我們的選擇。
上面列舉了一些常見的演算法,即使你一個都沒見過也沒關系,後面會對它們進行詳細的介紹,但是對後面的分類可能會有些許影響,不過問題不大,就先當總結看了。
再對優化演算法分類之前,先介紹一下演算法的模型,在筆記(一)中繪制了優化演算法的流程,不過那是個較為簡單的模型,此處的模型會更加復雜。上面說了優化演算法有較大的相似性,這些相似性主要體現在演算法的運行流程中。
優化演算法的求解過程可以看做是一個群體的生存過程。
有一群原始人,他們要在野外中尋找食物,一個原始人是這個群體中的最小單元,他們的最終目標是尋找這個環境中最容易獲取食物的位置,即最易存活下來的位置。每個原始人都去獨自尋找食物,他們每個人每天獲取食物的策略只有採集果實、製作陷阱或者守株待兔,即在一天之中他們不會改變他們的位置。在下一天他們會根據自己的策略變更自己的位置。到了某一天他們又聚在了一起,選擇了他們到過的最容易獲取食物的位置定居。
一群原始人=優化演算法中的種群、群體;
一個原始人=優化演算法中的個體;
一個原始人的位置=優化演算法中個體的位置、基因等屬性;
原始人變更位置=優化演算法中總群的更新操作;
該位置獲取食物的難易程度=優化演算法中的適應度函數;
一天=優化演算法中的一個迭代;
這群原始人最終的定居位置=優化演算法所得的解。
優化演算法的流程圖如下:
對優化演算法分類得有個標准,按照不同的標准分類也會得到不一樣的結果。首先說一下我所使用的分類標准(動態更新,有了新的感悟再加):
按由來分類比較好理解,就是該演算法受何種現象啟發而發明,本質是對現象分類。
可以看出演算法根據由來可以大致分為有人類的理論創造而來,向生物學習而來,受物理現象啟發。其中向生物學習而來的演算法最多,其他類別由於舉例有偏差,不是很准確,而且物理現象也經過人類總結,有些與人類現象相交叉,但仍將其獨立出來。
類別分好了,那麼為什麼要這么分類呢?
當然是因為要湊字數啦,啊呸,當然是為了更好的理解學習這些演算法的原理及特點。
向動物生存學習而來的演算法一定是一種行之有效的方法,能夠保證演算法的效率和准確性,因為,如果使用該策略的動物無法存活到我們可以對其進行研究,我們也無法得知其生存策略。(而這也是一種倖存者偏差,我們只能看到行之有效的策略,但並不是我們沒看到的策略都是垃圾,畢竟也發生過小行星撞地球這種小概率毀滅性事件。講個冷笑話開cou心一shu下:一隻小恐龍對他的小夥伴說,好開心,我最喜歡的那顆星星越來越亮了(完)。)但是由於生物的局限性,人們所創造出的演算法也會有局限性:我們所熟知的生物都生存在三維空間,在這些環境中,影響生物生存的條件比較有限,反應到演算法中就是這些演算法在解決較低維度的問題時效果很好,當遇到超高維(維度>500)問題時,結果可能不容樂觀,沒做過實驗,我也不敢亂說。
按更新過程分類相對復雜一點,主要是根據優化演算法流程中更新位置操作的方式來進行分類。更新位置的操作按我的理解可大致分為兩類:1.跟隨最優解;2.不跟隨最優解。
還是上面原始人的例子,每天他有一次去往其他位置狩獵的機會,他們採用何種方式來決定今天自己應該去哪裡呢?
如果他們的策略是「跟隨最優解」,那麼他們選取位置的方式就是按一定的策略向群體已知的最佳狩獵位置(歷史最佳)或者是當前群體中的最佳狩獵位置(今天最佳)靠近,至於是直線跑過去還是蛇皮走位繞過去,這個要看他們群體的策略。當然,他們的目的不是在最佳狩獵位置集合,他們的目的是在過去的途中看是否能發現更加好的狩獵位置,去往已經到過的狩獵地點再次狩獵是沒有意義的,因為每個位置獲取食物的難易程度是固定的。有了目標,大家都會朝著目標前進,總有一日,大家會在謀個位置附近相聚,相聚雖好但不利於後續的覓食容易陷入局部最優。
什麼是局部最優呢?假設在當前環境中有一「桃花源」,擁有上帝視角的我們知道這個地方就是最適合原始人們生存的,但是此地入口隱蔽「山有小口,彷彿若有光」、「初極狹,才通人。」,是一個難以發現的地方。如果沒有任何一個原始人到達了這里,大家向著已知的最優位置靠近時,也難以發現這個「桃源之地」,而當大家越聚越攏之後,「桃源」被發現的可能性越來越低。雖然原始人們得到了他們的解,但這並不是我們所求的「桃源」,他們聚集之後失去了尋求「桃源」的可能,這群原始人便陷入了局部最優。
如果他們的策略是「不跟隨最優解」,那麼他們的策略是什麼呢?我也不知道,這個應該他們自己決定。畢竟「是什麼」比「不是什麼」的范圍要小的多。總之不跟隨最優解時,演算法會有自己特定的步驟來更新個體的位置,有可能是隨機在自己附近找,也有可能是隨機向別人學習。不跟隨最優解時,原始人們應該不會快速聚集到某一處,這樣一來他們的選擇更具多樣性。
按照更新過程對上面的演算法分類結果如下
可以看出上面不跟隨最優解的演算法只有遺傳演算法和差分進化演算法,他們的更新策略是與進化和基因的重組有關。因此這些不跟隨最優解的演算法,他們大多依據進化理論更新位置(基因)我把他們叫做進化演算法,而那些跟隨群體最優解的演算法,他們則大多依賴群體的配合協作,我把這些演算法叫做群智能演算法。
目前我只總結了這兩種,分類方法,如果你有更加優秀的分類方法,我們可以交流一下:
目錄
上一篇 優化演算法筆記(一)優化演算法的介紹
下一篇 優化演算法筆記(三)粒子群演算法(1)
Ⅳ 什麼是魚群演算法
artifical fish-warm algorithm
xp(v1,v2……vn)個體的當前位置,d(p,q)=(1/n)*{[v(p,1)-v(q,1)]^2+……[v
(p,n)-v(q,n)]^2},兩個體的距離,(不知道為什麼用1/n而不是開平方);visual
一隻魚的感知距離。@擁擠度因子。
第一步:覓食人工魚當前位置為Xi,在可見域內隨機選擇一個位置Xj(d(ij)
<=visual),如xj優於xi向xj前進一步,否則隨機移動一步。如出現不滿足約束則
剪去。X(j+1,k)={if x(i,k)=x(j,k) 不變,else x(j+1,k)=隨機(0,1)}。
第二步:聚群:
xi可見域內共有nf1條魚。形成集合KJi,KJi={Xj|Dij<=visual},if KJi不為空,
then
X(center)=(xj1+xj2+.....xjn)/nf1(xjk屬於kji)
X(center,k)=0,X(center,k)<0.5 1,X(center,k)>=0.5
若:FCc/nf1>@FCi(FCc為中心食物濃度,FCi為Xi點食物濃度)
則:向中心移動:X(i+1,k)=不變,當Xik=X(center,k)時;Xik=隨機(0,1),當
Xik!=X(center,k)時;
若:FCc/nf1<@FCi
則:進行覓食
第三步:追尾
在visual范圍內,某一個體食物濃度最大則稱為Xmax,若:FCmax>@FCi,則向它移動
:X(i+1,k)=當X(i,k)=X(max,k)時,X(i,k)不變,當X(i,k)!=X(max,k)時,X(i,k)=
隨機(0,1)
第四步:公告板
在運算過程中,用公告板始終記錄下最優FCi
Ⅳ 用人工魚群演算法求函數最小值
人工魚群演算法:
在一片水域中,魚往往能自行或尾隨其他魚找到營養物質多的地方,因而魚生存數目最多的地方一般就是本水域中營養物質最多的地方,人工魚群演算法就是根據這一特點,通過構造人工魚來模仿魚群的覓食、聚群及追尾行為,從而實現尋優,以下是魚的幾種典型行為:
(1)覓食行為:一般情況下魚在水中隨機地自由游動,當發現食物時,則會向食物逐漸增多的方向快速游去。
(2)聚群行為:魚在游動過程中為了保證自身的生存和躲避危害會自然地聚集成群,魚聚群時所遵守的規則有三條:分隔規則:盡量避免與臨近夥伴過於擁擠;對准規則:盡量與臨近夥伴的平均方向一致;內聚規則:盡量朝臨近夥伴的中心移動。
(3)追尾行為:當魚群中的一條或幾條魚發現食物時,其臨近的夥伴會尾隨其快速到達食物點。
(4)隨機行為:單獨的魚在水中通常都是隨機游動的,這是為了更大范圍地尋找食物點或身邊的夥伴。