dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)
B站搜索:隨心390,同步觀看視頻
各位小伙伴可在閑魚搜索 優化算法交流地,即可搜索到官方閑魚賬號,謹防上當受騙。
hello,大家好,我記得有一位小伙伴很久很久之前就在后臺私信我說:想讓我們出一期關于頭腦風暴優化算法的推文。所以,今天我們講解一下頭腦風暴優化(BSO)算法。
一 | 頭腦風暴法簡介
顧名思義,頭腦風暴優化算法的名字中包含頭腦風暴這四個關鍵字,所以BSO的靈感應該來源于頭腦風暴法。不知道各位有沒有參加過頭腦風暴會議,頭腦風暴會議的目的就是收集參會人員提出的很多新觀點和解決方案。
下面給出頭腦風暴算法的定義(此處可忽略不看):
頭腦風暴法可以由一個人或一組人進行。參與者圍在一起,隨意將腦中和研討主題有關的見解提出來,然后再將大家的見解重新分類整理。在整個過程中,無論提出的意見和見解多么可笑、荒謬,其他人都不得打斷和批評,從而產生很多的新觀點和問題解決方法。從上述定義中可以看出,頭腦風暴法是有一定的原則的,具體的原則如下(此處可忽略不看):
1.庭外判決原則(延遲評判原則)。對各種意見、方案的評判必須放到最后階段,此前不能對別人的意見提出批評和評價。認真對待任何一種設想,而不管其是否適當和可行。2.自由暢想原則。歡迎各抒己見,自由鳴放,創造一種自由、活躍的氣氛,激發參加者提出各種荒誕的想法,使與會者思想放松,這是智力激勵法的關鍵。3.以量求質原則。追求數量。意見越多,產生好意見的可能性越大,這是獲得高質量創造性設想的條件。4.綜合改善原則。探索取長補短和改進辦法。除提出自己的意見外,鼓勵參加者對他人已經提出的設想進行補充、改進和綜合,強調相互啟發、相互補充和相互完善,這是智力激勵法能否成功的標準。二 | 初探頭腦風暴優化算法
在對頭腦風暴法有一個直觀的了解后,接下來就進入今天的正題——頭腦風暴優化算法。個人認為BSO與遺傳算法很相似,相似的是BSO也是一種群體智能優化算法,不同的是BSO更新解的方式與遺傳算法不同。
既然BSO是群體智能優化算法,那么也一定有一個種群(PS:BSO中種群的概念來源于就和頭腦風暴法中每一輪產生的觀點),BSO中的種群和遺傳算法中的種群并沒有區別。敲黑板,劃重點,接下來,就是BSO的核心部分——如何更新解?
假設現在種群數目為n,那么BSO關鍵的一步就是將這n個個體分為m類。
01 | 如何分類?
基本的BSO采用的是k-means聚類,對應matlab中的kmeans函數。各位如果想深入學習k-means聚類,可查看[DM]聚類這篇推文進行學習。各位如果僅想使用這個方法,那么可以學習一下kmeans這個函數的使用方法。
[其中輸入數據:X——一個N行D列的矩陣,N是數據個數,D是數據維數
K——將X劃分為幾類
Distance——選擇計算一個個體與聚類中心之間距離的方式(默認為sqeuclidean)
cityblock——計算一個個體與聚類中心之間距離的一種方式
MaxIter——最大迭代次數(默認為100)
Replicates——使用新的初始群集質心位置重復群集的次數(默認為1)
輸出數據:
idx——N行1列的矩陣,存儲的是每個點的聚類標號
C——K行D列的矩陣,存儲K個聚類中心
sumD——K行1列的矩陣,存儲當前聚類中,所有點與這個聚類中心的距離之和
D——N行D列的矩陣,存儲每個點與所有聚類中心的距離
02 | 將n個個體分成m類以后,有什么用呢?
首先,將這m類中的每一類中的個體按照目標函數值進行排序,并將每一類中目標函數值最優的那個個體作為聚類中心(PS:雖然在k-means聚類的時候已經選好聚類中心,但是我們并沒有使用,而是重新選擇聚類中心),同時存儲排序后的每一類中的個體及其對應的目標函數值。
其次,以一定的概率隨機從m個聚類中心中選擇出一個聚類中心,并用一個新產生的隨機解更新這個被選中的聚類中心。
然后,遍歷這n個個體,想辦法使這個n個個體向目標函數值更好的方向更新。通過剛才的學習,我們知道,每一類的聚類中心是這一類中目標函數值最好的個體,所以對個體的更新一定離不開聚類中心。
假設現在m=5,即有5個聚類,我們并不是同時使用這5個聚類,而是隨機選擇1個或2個聚類。
在介紹更新方法,先進行定義。
rand——0~1之間的隨機數
p_one——選擇1個聚類的概率,0~1之間的數
p_two——選擇2個聚類的概率,p_two=1-p_one
p_one_center——選擇1個聚類中聚類中心的概率,0~1之間的數
p_two_center——選擇2個聚類中聚類中心的概率,0~1之間的數
Xselect——選出的個體
omega1——0~1之間的數
omega2——0~1之間的數
因此,更新這n個個體的方法有兩種:
如果rand<p_one,
1)隨機選擇1個聚類:
如果rand<p_one_center
a)Xselect=這個聚類中的聚類中心
否則
b) Xselect=從這個聚類中隨機選出一個個體
否則
2)隨機選擇2個聚類:
如果rand<p_two_center
a)Xselect=omega1*聚類1中的聚類中心+omega2*聚類2中的聚類中心
否則
b) Xselect=omega1*聚類1中隨機選出的個體1+omega2*聚類2中隨機選出的個體2
經過上述選擇過程后,得到Xselect,然后使用如下公式對進行Xselect更新。
其中D表示的是數據的維數,normrnd在matlab中是產生正太分布的隨機數的函數,logsig在matlab中是邏輯回歸中的sigmoid函數。
03 | 當遍歷到第i個個體時,得到Xnew后,此時并沒有更新第i個個體,所以還需要做什么呢?
此時需要將Xnew與個體i進行比較,如果Xnew的目標函數值優于個體i的目標函數值,則更新個體i=Xnew。否則,不更新個體i。
04 | 終止條件?
上述過程只是迭代一次的示例,當迭代到最大迭代次數后,迭代過程終止。
三 | 頭腦風暴優化算法偽代碼
偽代碼引用于:
Shi, Yuhui. “Brain Storm Optimization Algorithm.” ICSI’11 Proceedings of the Second International Conference on Advances in Swarm Intelligence - Volume Part I, 2011, pp. 303–309.
1. Randomly generate n potential solutions (individuals);
2. Clusternindividuals intomclusters;
3.Evaluatethe n individuals;
4.Rankindividuals in each cluster andrecordthebest individualascluster centerineach cluster;
5.Randomlygenerate a value between 0 and 1;
a) If the value is smaller than a pre-determined probabilityp5a,
i.Randomlyselect acluster center; ii.Randomlygenerateanindividualtoreplacetheselected cluster center;
6.Generatenew individuals a)Randomlygenerate a value between 0 and 1;
b) If the value is less than a probabilityp6b,
i. Randomly selectaclusterwith a probabilityp6bi;
ii. Generate a random value between 0 and 1;
iii. If the value issmallerthan a pre-determined probabilityp6biii,
1) Select thecluster centerand add random valuesto it to generate new individual.
iv. Otherwiserandomlyselectan individualfrom thisclusterand add randomvalueto the individual togeneratenew individual.
c) Otherwise randomly selecttwoclustersto generate new individual
i. Generate a random value;
ii. If it is less than a pre-determined probabilityp6c, thetwo cluster centers arecombinedand then added withrandom valuestogenerate new individual;
iii. Otherwise,two individualsfrom each selected cluster arerandomlyselected to becombinedand added withrandomvaluestogeneratenewindividual.
d) The newly generated individual iscomparedwith theexisting individualwith the same individual index,thebetteroneis kept andrecordedas thenew individual;
7. If n new individuals have been generated, go to step 8; otherwise go to step 6;
8.Terminateif pre-determined maximum number of iterations has been reached; otherwise go to step 2.
四 | 頭腦風暴優化算法MATLAB代碼
代碼鏈接:https://www.researchgate.net/publication/322959536_Codes_in_MATLAB_for_Brain_Storm_Optimization
五 | 參考
1. Shi, Yuhui. “Brain Storm Optimization Algorithm.” ICSI’11 Proceedings of the Second International Conference on Advances in Swarm Intelligence - Volume Part I, 2011, pp. 303–309.
2. https://www.researchgate.net/publication/322959536_Codes_in_MATLAB_for_Brain_Storm_Optimization
總結
以上是生活随笔為你收集整理的dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python构建网站flask_30分钟
- 下一篇: 农行快e宝有什么风险