dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)
B站搜索:隨心390,同步觀看視頻
各位小伙伴可在閑魚搜索 優(yōu)化算法交流地,即可搜索到官方閑魚賬號(hào),謹(jǐn)防上當(dāng)受騙。
hello,大家好,我記得有一位小伙伴很久很久之前就在后臺(tái)私信我說:想讓我們出一期關(guān)于頭腦風(fēng)暴優(yōu)化算法的推文。所以,今天我們講解一下頭腦風(fēng)暴優(yōu)化(BSO)算法。
一 | 頭腦風(fēng)暴法簡介
顧名思義,頭腦風(fēng)暴優(yōu)化算法的名字中包含頭腦風(fēng)暴這四個(gè)關(guān)鍵字,所以BSO的靈感應(yīng)該來源于頭腦風(fēng)暴法。不知道各位有沒有參加過頭腦風(fēng)暴會(huì)議,頭腦風(fēng)暴會(huì)議的目的就是收集參會(huì)人員提出的很多新觀點(diǎn)和解決方案。
下面給出頭腦風(fēng)暴算法的定義(此處可忽略不看):
頭腦風(fēng)暴法可以由一個(gè)人或一組人進(jìn)行。參與者圍在一起,隨意將腦中和研討主題有關(guān)的見解提出來,然后再將大家的見解重新分類整理。在整個(gè)過程中,無論提出的意見和見解多么可笑、荒謬,其他人都不得打斷和批評(píng),從而產(chǎn)生很多的新觀點(diǎn)和問題解決方法。從上述定義中可以看出,頭腦風(fēng)暴法是有一定的原則的,具體的原則如下(此處可忽略不看):
1.庭外判決原則(延遲評(píng)判原則)。對(duì)各種意見、方案的評(píng)判必須放到最后階段,此前不能對(duì)別人的意見提出批評(píng)和評(píng)價(jià)。認(rèn)真對(duì)待任何一種設(shè)想,而不管其是否適當(dāng)和可行。2.自由暢想原則。歡迎各抒己見,自由鳴放,創(chuàng)造一種自由、活躍的氣氛,激發(fā)參加者提出各種荒誕的想法,使與會(huì)者思想放松,這是智力激勵(lì)法的關(guān)鍵。3.以量求質(zhì)原則。追求數(shù)量。意見越多,產(chǎn)生好意見的可能性越大,這是獲得高質(zhì)量創(chuàng)造性設(shè)想的條件。4.綜合改善原則。探索取長補(bǔ)短和改進(jìn)辦法。除提出自己的意見外,鼓勵(lì)參加者對(duì)他人已經(jīng)提出的設(shè)想進(jìn)行補(bǔ)充、改進(jìn)和綜合,強(qiáng)調(diào)相互啟發(fā)、相互補(bǔ)充和相互完善,這是智力激勵(lì)法能否成功的標(biāo)準(zhǔn)。二 | 初探頭腦風(fēng)暴優(yōu)化算法
在對(duì)頭腦風(fēng)暴法有一個(gè)直觀的了解后,接下來就進(jìn)入今天的正題——頭腦風(fēng)暴優(yōu)化算法。個(gè)人認(rèn)為BSO與遺傳算法很相似,相似的是BSO也是一種群體智能優(yōu)化算法,不同的是BSO更新解的方式與遺傳算法不同。
既然BSO是群體智能優(yōu)化算法,那么也一定有一個(gè)種群(PS:BSO中種群的概念來源于就和頭腦風(fēng)暴法中每一輪產(chǎn)生的觀點(diǎn)),BSO中的種群和遺傳算法中的種群并沒有區(qū)別。敲黑板,劃重點(diǎn),接下來,就是BSO的核心部分——如何更新解?
假設(shè)現(xiàn)在種群數(shù)目為n,那么BSO關(guān)鍵的一步就是將這n個(gè)個(gè)體分為m類。
01 | 如何分類?
基本的BSO采用的是k-means聚類,對(duì)應(yīng)matlab中的kmeans函數(shù)。各位如果想深入學(xué)習(xí)k-means聚類,可查看[DM]聚類這篇推文進(jìn)行學(xué)習(xí)。各位如果僅想使用這個(gè)方法,那么可以學(xué)習(xí)一下kmeans這個(gè)函數(shù)的使用方法。
[其中輸入數(shù)據(jù):X——一個(gè)N行D列的矩陣,N是數(shù)據(jù)個(gè)數(shù),D是數(shù)據(jù)維數(shù)
K——將X劃分為幾類
Distance——選擇計(jì)算一個(gè)個(gè)體與聚類中心之間距離的方式(默認(rèn)為sqeuclidean)
cityblock——計(jì)算一個(gè)個(gè)體與聚類中心之間距離的一種方式
MaxIter——最大迭代次數(shù)(默認(rèn)為100)
Replicates——使用新的初始群集質(zhì)心位置重復(fù)群集的次數(shù)(默認(rèn)為1)
輸出數(shù)據(jù):
idx——N行1列的矩陣,存儲(chǔ)的是每個(gè)點(diǎn)的聚類標(biāo)號(hào)
C——K行D列的矩陣,存儲(chǔ)K個(gè)聚類中心
sumD——K行1列的矩陣,存儲(chǔ)當(dāng)前聚類中,所有點(diǎn)與這個(gè)聚類中心的距離之和
D——N行D列的矩陣,存儲(chǔ)每個(gè)點(diǎn)與所有聚類中心的距離
02 | 將n個(gè)個(gè)體分成m類以后,有什么用呢?
首先,將這m類中的每一類中的個(gè)體按照目標(biāo)函數(shù)值進(jìn)行排序,并將每一類中目標(biāo)函數(shù)值最優(yōu)的那個(gè)個(gè)體作為聚類中心(PS:雖然在k-means聚類的時(shí)候已經(jīng)選好聚類中心,但是我們并沒有使用,而是重新選擇聚類中心),同時(shí)存儲(chǔ)排序后的每一類中的個(gè)體及其對(duì)應(yīng)的目標(biāo)函數(shù)值。
其次,以一定的概率隨機(jī)從m個(gè)聚類中心中選擇出一個(gè)聚類中心,并用一個(gè)新產(chǎn)生的隨機(jī)解更新這個(gè)被選中的聚類中心。
然后,遍歷這n個(gè)個(gè)體,想辦法使這個(gè)n個(gè)個(gè)體向目標(biāo)函數(shù)值更好的方向更新。通過剛才的學(xué)習(xí),我們知道,每一類的聚類中心是這一類中目標(biāo)函數(shù)值最好的個(gè)體,所以對(duì)個(gè)體的更新一定離不開聚類中心。
假設(shè)現(xiàn)在m=5,即有5個(gè)聚類,我們并不是同時(shí)使用這5個(gè)聚類,而是隨機(jī)選擇1個(gè)或2個(gè)聚類。
在介紹更新方法,先進(jìn)行定義。
rand——0~1之間的隨機(jī)數(shù)
p_one——選擇1個(gè)聚類的概率,0~1之間的數(shù)
p_two——選擇2個(gè)聚類的概率,p_two=1-p_one
p_one_center——選擇1個(gè)聚類中聚類中心的概率,0~1之間的數(shù)
p_two_center——選擇2個(gè)聚類中聚類中心的概率,0~1之間的數(shù)
Xselect——選出的個(gè)體
omega1——0~1之間的數(shù)
omega2——0~1之間的數(shù)
因此,更新這n個(gè)個(gè)體的方法有兩種:
如果rand<p_one,
1)隨機(jī)選擇1個(gè)聚類:
如果rand<p_one_center
a)Xselect=這個(gè)聚類中的聚類中心
否則
b) Xselect=從這個(gè)聚類中隨機(jī)選出一個(gè)個(gè)體
否則
2)隨機(jī)選擇2個(gè)聚類:
如果rand<p_two_center
a)Xselect=omega1*聚類1中的聚類中心+omega2*聚類2中的聚類中心
否則
b) Xselect=omega1*聚類1中隨機(jī)選出的個(gè)體1+omega2*聚類2中隨機(jī)選出的個(gè)體2
經(jīng)過上述選擇過程后,得到Xselect,然后使用如下公式對(duì)進(jìn)行Xselect更新。
其中D表示的是數(shù)據(jù)的維數(shù),normrnd在matlab中是產(chǎn)生正太分布的隨機(jī)數(shù)的函數(shù),logsig在matlab中是邏輯回歸中的sigmoid函數(shù)。
03 | 當(dāng)遍歷到第i個(gè)個(gè)體時(shí),得到Xnew后,此時(shí)并沒有更新第i個(gè)個(gè)體,所以還需要做什么呢?
此時(shí)需要將Xnew與個(gè)體i進(jìn)行比較,如果Xnew的目標(biāo)函數(shù)值優(yōu)于個(gè)體i的目標(biāo)函數(shù)值,則更新個(gè)體i=Xnew。否則,不更新個(gè)體i。
04 | 終止條件?
上述過程只是迭代一次的示例,當(dāng)?shù)阶畲蟮螖?shù)后,迭代過程終止。
三 | 頭腦風(fēng)暴優(yōu)化算法偽代碼
偽代碼引用于:
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.
四 | 頭腦風(fēng)暴優(yōu)化算法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
總結(jié)
以上是生活随笔為你收集整理的dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python构建网站flask_30分钟
- 下一篇: 农行快e宝有什么风险