(完整)粒子群算法與遺傳算法的比較_第1頁
(完整)粒子群算法與遺傳算法的比較_第2頁
(完整)粒子群算法與遺傳算法的比較_第3頁
(完整)粒子群算法與遺傳算法的比較_第4頁
(完整)粒子群算法與遺傳算法的比較_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

(完整)粒子群算法與遺傳算法的比較粒子群算法介紹優(yōu)化問題是工業(yè)設(shè)計(jì)中經(jīng)常遇到的問題,許多問題最后都可以歸結(jié)為優(yōu)化問題.為了解決各種各樣的優(yōu)化問題,人們提出了許多優(yōu)化算法,比較著名的有爬山法、遺傳算法等.優(yōu)化問題有兩個(gè)主要問題:一是要求尋找全局最小點(diǎn),二是要求有較高的收斂速度。爬山法精度較高,但是易于陷入局部極小。遺傳算法屬于進(jìn)化算法(EvolutionaryAlgorithms)的一種,它通過模仿自然界的選擇與遺傳的機(jī)理來尋找最優(yōu)解.遺傳算法有三個(gè)基本算子:選擇、交叉和變異.但是遺傳算法的編程實(shí)現(xiàn)比較復(fù)雜,首先需要對(duì)問題進(jìn)行編碼,找到最優(yōu)解之后還需要對(duì)問題進(jìn)行解碼,另外三個(gè)算子的實(shí)現(xiàn)也有許多參數(shù),如交叉率和變異率,并且這些參數(shù)的選擇嚴(yán)重影響解的品質(zhì),而目前這些參數(shù)的選擇大部分是依靠經(jīng)驗(yàn).1995年Eberhart博士和kennedy博士提出了一種新的算法;粒子群優(yōu)化(ParticleSwarmOptimizationPSO)算法。這種算法以其實(shí)現(xiàn)容易、精度高、收斂快等優(yōu)點(diǎn)引起了學(xué)術(shù)界的重視,并且在解決實(shí)際問題中展示了其優(yōu)越性。粒子群優(yōu)化(ParticleSwarmOptimization-PSO)算法是近年來發(fā)展起來的一種新的進(jìn)化算法(EvolutionaryAlgorithm-EA)。PSO算法屬于進(jìn)化算法的一種,和遺傳算法相似,它也是從隨機(jī)解出發(fā),通過迭代尋找最優(yōu)解,它也是通過適應(yīng)度來評(píng)價(jià)解的品質(zhì).但是它比遺傳算法規(guī)則更為簡(jiǎn)單,它沒有遺傳算法的交叉”(Crossover)和變異(Mutation)操作。它通過追隨當(dāng)前搜索到的最優(yōu)值來尋找全局最優(yōu)。.引言粒子群優(yōu)化算法(PSO)是一種進(jìn)化計(jì)算技術(shù)(evolutionarycomputation),由Eberhart博士和kennedy博士提出。源于對(duì)鳥群捕食的行為研究。PSO同遺傳算法類似,是一種基于迭代的優(yōu)化算法。系統(tǒng)初始化為一組隨機(jī)解,通過迭代搜尋最優(yōu)值。但是它沒有遺傳算法用的交叉(crossover)以及變異(mutation),而是粒子在解空間追隨最優(yōu)的粒子進(jìn)行搜索.同遺傳算法比較,PSO的優(yōu)勢(shì)在于簡(jiǎn)單容易實(shí)現(xiàn)并且沒有許多參數(shù)需要調(diào)整。目前已廣泛應(yīng)用于函數(shù)優(yōu)化,神經(jīng)網(wǎng)絡(luò)訓(xùn)練,模糊系統(tǒng)控制以及其他遺傳算法的應(yīng)用領(lǐng)域.背景:人工生命"人工生命”是來研究具有某些生命基本特征的人工系統(tǒng)。人工生命包括兩方面的內(nèi)容:.研究如何利用計(jì)算技術(shù)研究生物現(xiàn)象.研究如何利用生物技術(shù)研究計(jì)算問題我們現(xiàn)在關(guān)注的是第二部分的內(nèi)容?,F(xiàn)在已經(jīng)有很多源于生物現(xiàn)象的計(jì)算技巧.例如,人工神經(jīng)網(wǎng)絡(luò)是簡(jiǎn)化的大腦模型.遺傳算法是模擬基因進(jìn)化過程的.現(xiàn)在我們討論另一種生物系統(tǒng)一社會(huì)系統(tǒng).更確切的是,在由簡(jiǎn)單個(gè)體組成的群落與環(huán)境以及個(gè)體之間的互動(dòng)行為。也可稱做"群智能"卜325intelligence).這些模擬系統(tǒng)利用局部信息從而可能產(chǎn)生不可預(yù)測(cè)的群體行為例如floys和boids,他們都用來模擬魚群和鳥群的運(yùn)動(dòng)規(guī)律,主要用于計(jì)算機(jī)視覺和計(jì)算機(jī)輔助設(shè)計(jì).在計(jì)算智能(computationalintelligence)領(lǐng)域有兩種基于群智能的算法.蟻群算法(antcolonyoptimization)和粒子群算法(particleswarmoptimization)o前者是對(duì)螞蟻群落食物采集過程的模擬.已經(jīng)成功運(yùn)用在很多離散優(yōu)化問題上。粒子群優(yōu)化算法(PSO)也是起源對(duì)簡(jiǎn)單社會(huì)系統(tǒng)的模擬。最初設(shè)想是模擬鳥群覓食的過程.但后來發(fā)現(xiàn)PSO是一種很好的優(yōu)化工具..算法介紹如前所述,「50模擬鳥群的捕食行為。設(shè)想這樣一個(gè)場(chǎng)景:一群鳥在隨機(jī)搜索食物.在這個(gè)區(qū)域里只有一塊食物.所有的鳥都不知道食物在那里。但是他們知道當(dāng)前的位置離食物還有多遠(yuǎn)。那么找到食物的最優(yōu)策略是什么呢。最簡(jiǎn)單有效的就是搜尋目前離食物最近的鳥的周圍區(qū)域.PSO從這種模型中得到啟示并用于解決優(yōu)化問題.PSO中,每個(gè)優(yōu)化問題的解都是搜索空間中的一只鳥.我們稱之為“粒子”.所有的粒子都有一個(gè)由被優(yōu)化的函數(shù)決定的適應(yīng)值(fitnessvalue),每個(gè)粒子還有一個(gè)速度決定他們飛翔的方向和距離.然后粒子們就追隨當(dāng)前的最優(yōu)粒子在解空間中搜索。PSO初始化為一群隨機(jī)粒子(隨機(jī)解)。然后通過迭代找到最優(yōu)解。在每一次迭代中,粒子通過跟蹤兩(完整)粒子群算法與遺傳算法的比較個(gè)"極值”來更新自己。第一個(gè)就是粒子本身所找到的最優(yōu)解,這個(gè)解叫做個(gè)體極值pBest。另一個(gè)極值是整個(gè)種群目前找到的最優(yōu)解,這個(gè)極值是全局極值gBest。另外也可以不用整個(gè)種群而只是用其中一部分作為粒子的鄰居,那么在所有鄰居中的極值就是局部極值。在找到這兩個(gè)最優(yōu)值時(shí),粒子根據(jù)如下的公式來更新自己的速度和新的位置:v[]=w*v[]+cl*rand()*(pbest[]—present[])+c2*rand()*(gbest[]—present口)(a)present口=persent[]+v□(b)v口是粒子的速度,w是慣性權(quán)重,persent[]是當(dāng)前粒子的位置.pbest口andgbest[]如前定義rand()是介于(0,1)之間的隨機(jī)數(shù)。c1,c2是學(xué)習(xí)因子。通常cl=c2=2。程序的偽代碼如下ForeachparticleInitializeparticleENDDoForeachparticleCalculatefitnessvalueIfthefitnessvalueisbetterthanthebestfitnessvalue(pBest)inhistorysetcurrentvalueasthenewpBestEndChoosetheparticlewiththebestfitnessvalueofalltheparticlesasthegBestForeachparticleCalculateparticlevelocityaccordingequation(a)Updateparticlepositionaccordingequation(b)EndWhilemaximumiterationsorminimumerrorcriteriaisnotattained在每一維粒子的速度都會(huì)被限制在一個(gè)最大速度Vmax,如果某一維更新后的速度超過用戶設(shè)定的Vmax,那么這一維的速度就被限定為Vmax4。遺傳算法和PSO的比較大多數(shù)演化計(jì)算技術(shù)都是用同樣的過程:1。種群隨機(jī)初始化.對(duì)種群內(nèi)的每一個(gè)個(gè)體計(jì)算適應(yīng)值(fitnessvalue).適應(yīng)值與最優(yōu)解的距離直接有關(guān).種群根據(jù)適應(yīng)值進(jìn)行復(fù)制4。如果終止條件滿足的話,就停止,否則轉(zhuǎn)步驟2從以上步驟,我們可以看到PSO和GA有很多共同之處。兩者都隨機(jī)初始化種群,而且都使用適應(yīng)值來評(píng)價(jià)系統(tǒng),而且都根據(jù)適應(yīng)值來進(jìn)行一定的隨機(jī)搜索。兩個(gè)系統(tǒng)都不是保證一定找到最優(yōu)解。但是,PSO沒有遺傳操作如交叉(crossover)和變異(mutation)。而是根據(jù)自己的速度來決定搜索。粒子還有一個(gè)重要的特點(diǎn),就是有記憶.與遺傳算法比較,PSO的信息共享機(jī)制是很不同的。在遺傳算法中,染色體(chromosomes)互相共享信息,所以整個(gè)種群的移動(dòng)是比較均勻的向最優(yōu)區(qū)域移動(dòng)。在PSO中,只有g(shù)Best(orlBest)給出信息給其他的粒子,這是單向的信息流動(dòng).整個(gè)搜索更新過程是跟隨當(dāng)前最優(yōu)解的過程。與遺傳算法比較,在大多數(shù)的情況下,所有的粒子可能更快的收斂于最優(yōu)解5。人工神經(jīng)網(wǎng)絡(luò)和PSO人工神經(jīng)網(wǎng)絡(luò)(ANN)是模擬大腦分析過程的簡(jiǎn)單數(shù)學(xué)模型,反向轉(zhuǎn)播算法是最流行的神經(jīng)網(wǎng)絡(luò)訓(xùn)練算法。進(jìn)來也有很多研究開始利用演化計(jì)算(evolutionarycomputation)技術(shù)來研究人工神經(jīng)網(wǎng)絡(luò)的各個(gè)方面。演化計(jì)算可以用來研究神經(jīng)網(wǎng)絡(luò)的三個(gè)方面:網(wǎng)絡(luò)連接權(quán)重,網(wǎng)絡(luò)結(jié)構(gòu)(網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),傳遞函數(shù)),網(wǎng)絡(luò)學(xué)習(xí)算法。(完整)粒子群算法與遺傳算法的比較不過大多數(shù)這方面的工作都集中在網(wǎng)絡(luò)連接權(quán)重,和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)上。在GA中,網(wǎng)絡(luò)權(quán)重和/或拓?fù)浣Y(jié)構(gòu)一般編碼為染色體(Chromosome),適應(yīng)函數(shù)(456$$function)的選擇一般根據(jù)研究目的確定。例如在分類問題中,錯(cuò)誤分類的比率可以用來作為適應(yīng)值演化計(jì)算的優(yōu)勢(shì)在于可以處理一些傳統(tǒng)方法不能處理的例子例如不可導(dǎo)的節(jié)點(diǎn)傳遞函數(shù)或者沒有梯度信息存在。但是缺點(diǎn)在于:在某些問題上性能并不是特別好。2。網(wǎng)絡(luò)權(quán)重的編碼而且遺傳算子的選擇有時(shí)比較麻煩最近已經(jīng)有一些利用PSO來代替反向傳播算法來訓(xùn)練神經(jīng)網(wǎng)絡(luò)的論文。研究表明PSO是一種很有潛力的神經(jīng)網(wǎng)絡(luò)算法。PSO速度比較快而且可以得到比較好的結(jié)果。而且還沒有遺傳算法碰到的問題這里用一個(gè)簡(jiǎn)單的例子說明PSO訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過程。這個(gè)例子使用分類問題的基準(zhǔn)函數(shù)(Benchmarkfunction)出6數(shù)據(jù)集。(Iris是一種鳶尾屬植物)在數(shù)據(jù)記錄中,每組數(shù)據(jù)包含Iris花的四種屬性:萼片長(zhǎng)度,萼片寬度,花瓣長(zhǎng)度,和花瓣寬度,三種不同的花各有50組數(shù)據(jù)。這樣總共有150組數(shù)據(jù)或模式。我們用3層的神經(jīng)網(wǎng)絡(luò)來做分類.現(xiàn)在有四個(gè)輸入和三個(gè)輸出。所以神經(jīng)網(wǎng)絡(luò)的輸入層有4個(gè)節(jié)點(diǎn),輸出層有3個(gè)節(jié)點(diǎn)我們也可以動(dòng)態(tài)調(diào)節(jié)隱含層節(jié)點(diǎn)的數(shù)目,不過這里我們假定隱含層有6個(gè)節(jié)點(diǎn)。我們也可以訓(xùn)練神經(jīng)網(wǎng)絡(luò)中其他的參數(shù)。不過這里我們只是來確定網(wǎng)絡(luò)權(quán)重。粒子就表示神經(jīng)網(wǎng)絡(luò)的一組權(quán)重,應(yīng)該是4*6+6*3=42個(gè)參數(shù)。權(quán)重的范圍設(shè)定為[一100,100](這只是一個(gè)例子,在實(shí)際情況中可能需要試驗(yàn)調(diào)整).在完成編碼以后,我們需要確定適應(yīng)函數(shù)。對(duì)于分類問題,我們把所有的數(shù)據(jù)送入神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)的權(quán)重有粒子的參數(shù)決定。然后記錄所有的錯(cuò)誤分類的數(shù)目作為那個(gè)粒子的適應(yīng)值.現(xiàn)在我們就利用PSO來訓(xùn)練神經(jīng)網(wǎng)絡(luò)來獲得盡可能低的錯(cuò)誤分類數(shù)目?!?。本身并沒有很多的參數(shù)需要調(diào)整.所以在實(shí)驗(yàn)中只需要調(diào)整隱含層的節(jié)點(diǎn)數(shù)目和權(quán)重的范圍以取得較好的分類效果。6。PSO的參數(shù)設(shè)置從上面的例子我們可以看到應(yīng)用PSO解決優(yōu)化問題的過程中有兩個(gè)重要的步驟:?jiǎn)栴}解的編碼和適應(yīng)度函數(shù)PSO的一個(gè)優(yōu)勢(shì)就是采用實(shí)數(shù)編碼,不需要像遺傳算法一樣是二進(jìn)制編碼(或者采用針對(duì)實(shí)數(shù)的遺傳操作。例如對(duì)于問題f(x)=x/2+x2八2+x3八2求解,粒子可以直接編碼為(x1,x2,x3),而適應(yīng)度函數(shù)就是f(x)。接著我們就可以利用前面的過程去尋優(yōu)。這個(gè)尋優(yōu)過程是一個(gè)疊代過程,中止條件一般為設(shè)置為達(dá)到最大循環(huán)數(shù)或者最小錯(cuò)誤PSO中并沒有許多需要調(diào)節(jié)的參數(shù),下面列出了這些參數(shù)以及經(jīng)驗(yàn)設(shè)置粒子數(shù):一般取20—40.其實(shí)對(duì)于大部分的問題10個(gè)粒子已經(jīng)足夠可以取得好的結(jié)果,不過對(duì)于比較難的問題或者特定類別的問題,粒子數(shù)可以取到100或200粒子的長(zhǎng)度:這是由優(yōu)化問題決定,就是問題解的長(zhǎng)度粒子的范圍:由優(yōu)化問題決定,每一維可是設(shè)定不同的范圍Vmax:最大速度,決定粒子在一個(gè)循環(huán)中最大的移動(dòng)距離,通常設(shè)定為粒子的范圍寬度,例如上面的例子里,粒子(x1,x2,x3)x1屬于[-10,10],那么Vmax的大小就是20學(xué)習(xí)因子:c1和c2通常等于2。不過在文獻(xiàn)中也有其他的取值。但是一般c1等于c2并且范圍在0和4之間中止條件:最大循環(huán)數(shù)以及最小錯(cuò)誤要求。例如,在上面的神經(jīng)網(wǎng)絡(luò)訓(xùn)練例子中,最小錯(cuò)誤可以設(shè)定為1個(gè)錯(cuò)誤分類,最大循環(huán)設(shè)定為2000,這個(gè)中止條件由具體的問題確定.全局PSO和局部PSO:我們介紹了兩種版本的粒子群優(yōu)化算法:全局版和局部版.前者速度快不過有時(shí)會(huì)陷入局部最優(yōu)。后者收斂速度慢一點(diǎn)不過很難陷入局部最優(yōu).在實(shí)際應(yīng)用中,可以先用全局PSO找到大致的結(jié)果,再有局部PSO進(jìn)行搜索.另外的一個(gè)參數(shù)是慣性權(quán)重,Shi和Eberhart指出6modifiedparticleswarmoptimizer,1998):當(dāng)Vmax很小時(shí)(對(duì)schaffer的f6函數(shù)”印2乂<=2),使用接近于1的慣性權(quán)重;當(dāng)Vmax不是很小時(shí)(對(duì)schaffer的f6函數(shù),Vmax>=3),使用權(quán)重w=0。8較好.如果沒有Vmax的信息,使用0。8作為權(quán)重也是一種很好的選擇。另外,對(duì)于使用時(shí)變的權(quán)重,結(jié)果不清楚,但是預(yù)計(jì)結(jié)果應(yīng)比較好.附上'一■個(gè)C++實(shí)現(xiàn)的C++代碼:代碼來自2008年數(shù)學(xué)建模東北賽區(qū)B題,原題描述http://www.ivanblogocn/post/18.html(完整)粒子群算法與遺傳算法的比較(完整)粒子群算法與遺傳算法的比較(完整)粒子群算法與遺傳算法的比較(完整)粒子群算法與遺傳算法的比較#include"stdafx。h"#include<math.h>#include〈time.h〉#include〈iostream〉#include<fstream>usingnamespacestd;intc1=2;//加速因子intc2=2;//加速因子doublew=1;〃慣性權(quán)重doubleWmax=1;//最大慣性權(quán)重doubleWmin=0。6;//最小慣性權(quán)重intKmax=110;〃迭代次數(shù)intGdsCnt;//物資總數(shù)intconstDim=10;〃粒子維數(shù)intconstPNum=50;//粒子個(gè)數(shù)intGBIndex=0;//最優(yōu)粒子索引doublea=0。6;〃適應(yīng)度調(diào)整因子doubleb=0。5;〃適應(yīng)度調(diào)整因子intXup[Dim];〃粒子位置上界數(shù)組intXdown[Dim]=;〃粒子位置下界數(shù)組intValue[Dim];//初始急需度數(shù)組intVmax[Dim];〃最大速度數(shù)組classPARTICLE;//申明粒子節(jié)點(diǎn)voidCheck(PARTICLE&,int);//約束函數(shù)voidInput(ifstream&);〃輸入變量voidInitial();//初始化相關(guān)變量doubleGetFit(PARTICLE&);〃計(jì)算適應(yīng)度voidCalculateFit();//計(jì)算適應(yīng)度voidBirdsFly();〃粒子飛翔voidRun(ofstream&,int=2000);〃運(yùn)行函數(shù)//微粒類classPARTICLE{public:intX[Dim];//微粒的坐標(biāo)數(shù)組intXBest[Dim];〃微粒的最好位置數(shù)組intV[Dim];//粒子速度數(shù)組doubleFit;〃微粒適合度doubleFitBest;〃微粒最好位置適合度};PARTICLEParr[PNum];〃粒子數(shù)組intmain()//主函數(shù){ofstreamoutf("out。txt");ifstreaminf("dataotxt”);〃關(guān)聯(lián)輸入文件inf>〉GdsCnt;//輸入物資總數(shù)Input(inf);Initial();Run(outf,100);system("pause”);return0;}count物資數(shù)量voidCheck(PARTICLE&p,intcount)〃參數(shù)卬粒子對(duì)象,count物資數(shù)量srand((unsigned)time(NULL));intsum=0;for(inti=0;i〈Dim;i++){if(p.X〉Xup){p.X=Xup;}elseif(p.X〈Xdown){p。X=Xdown;}if(p°V〉Vmax){p.V=Vmax;}elseif(p。V〈0){p.V=0;}sum+=p。X;}while(sum〉count){p。X[rand()%Dim];sum=0;for(inti=0;i<Dim;i++){if(p。X>Xup){X=Xup;}elseif(p.X<Xdown){X=Xdown;}if(p。V>Vmax){V=Vmax;}elseif(p.V<0){p。V=0;}sum+=p.X;}}}voidInput(ifstream&inf)//以inf為對(duì)象輸入數(shù)據(jù){for(inti=0;i〈Dim;i++){inf〉〉Xup;}for(inti=0;i<Dim;i++){inf>〉Value;}}voidInitial。//初始化數(shù)據(jù){GBIndex=0;srand((unsigned)time(NULL));//初始化隨機(jī)函數(shù)發(fā)生器for(inti=0;i<Dim;i++){Vmax=(int)((Xup—Xdown)*0。035);}for(inti=0;i{for(intj=0;j〈Dim;j++){Parr.X[j]二(int)(rand()/(double)RAND_MAX*(Xup[j]-Xdown[j])—Xdown[j]+0。5);Parr。XBest[j]=Parr.X[j];Parr.V[j]=(int)(rand()/(double)RAND_MAX*(Vmax[j]—Vmax[j]/2));}Parr。Fit=GetFit(Par1;Parr。FitBest=Parr。Fit;if(Parr。Fit>Parr[GBIndex]。Fit){GBIndex=i;}}}doubleGetFit(PARTICLE&p)〃計(jì)算對(duì)象適應(yīng)度{doublesum=0;for(inti=0;i〈Dim;i++){for(intj=1;j〈二p。X;j++){sum+二(1-(j-1)*a/(Xup-b))*Value;}}returnsum;}voidCalculateFit()//計(jì)算數(shù)組內(nèi)各粒子的適應(yīng)度{for(inti=0;i{Parr。Fit=GetFit(Parr);}}voidBirdsFly()//粒子飛行尋找最優(yōu)解{srand((unsigned)time(NULL));staticintk=10;w二Wmax—k*(Wmax-Wmin)/Kmax;k++;for(inti=0;i{for(intj=0;j〈Dim;j++){Parr。V[j]=(int)(w*Parr。V[j])+(int)(c1*rand()/(double)RAND_MAX*(Parr。XBest[j]-Parr.X[j])+c2*rand()/(double)RAND_MAX大(Parr[GBIndex]。XBest[j]—Parr。X[j]));}Check(Parr,GdsCnt);for(intj=0;j<Dim;j++){Parr。X[j]+=Parr。V[j];}Check(Parr,GdsCnt);}CalculateFit();for(inti=0;i{if(Parr.Fit〉二Parr。FitBest){Parr.FitBest=ParrFit;for(intj=0;j〈Dim;j++){Parr.XBest[j]=Parr。X[j];}}}GBIndex=0;for(inti=0;i{if(Parr。FitBest〉Parr[GBIndex.FitBest&&i!二GBIndex){GBIndex=i;}}}voidRun(ofstream&outf,intnum)〃令粒子以規(guī)定次數(shù)num飛行{for(inti=0;i<num;i++){BirdsFly();outf<〈(i+1)〈〈ends<for(intj=0;j<Dim;j++){outf<}outf<<endl;}cout〈〈”Done!”<〈endl;}既然有個(gè)目標(biāo)函數(shù),那么多目標(biāo)可以在目標(biāo)函數(shù)那里表示,我最近也在做這個(gè)粒子群算法,下面是我的vc++6.0代碼,改造了一下基本粒子群,求路徑的。。#include〈math.h>#include<time。h〉#include〈iostream〉usingnamespacestd;doublec1=0。7;doublec2=0.2;doublew=1。0;doubleWmax=1。0;doubleWmin=0.6;intKmax=50;intconstDim=7;intconstPNum=4;intFB=200;intFC=5;intGBIndex=0;classPARTICLE;voidInitial。;voidUpdate(int*x,int*v);voidGetDifferent(int*p1,int*p2,int*v);intGetFit(PARTICLE&);voidCalculateFit();voidBirdsFly();voidRun(intnum);doubleGetRandm();intA[7][7]={{0,2,1000,4,1000,1000,1000},{2,0,3,1000,1000,1000,1000},

{1000,3,0,1000,3,6,1000},{4,1000,1000,0,5,2,1000},{1000,1000,1000,5,0,1,2},{1000,1000,6,2,1,0,4},{1000,1000,1000,1000,2,4,0}};intB[7][7]={{0,2,1000,4,1000,1000,1000},{2,0,3,1000,1000,1000,1000},{1000,3,0,1000,3,6,1000},{4,1000,1000,0,5,2,1000},{1000,1000,1000,5,0,1,2),{1000,1000,6,2,1,0,4),{1000,1000,1000,1000,2,4,0}};intC[7][7]={{1000,20,1000,10,1000,1000,1000},{2C1,1000,5,1000,1000,1000,1000},{1,7,1000,1000,7,36,1000},{40,1000,2,1000,6,52,1000)1{3,1000,1000,9,1000,11,12},{20,1000,6,6,8,1000,14},{1000,1000,1000,1000,};8,24,1000}intFirst[7]={0,1,2,3,4,5,6};intLast[7]={0,1,2,3,4,5,6};inthp1[7]={0,0,0,0,0,0,0};inthp2[7]={0,0,0,0,0,0,0};//ICA£AaclassPARTICLE{public:intX[Dim];intXBest[Dim];intV[Dim];doubleFit;doubleFitBest;};PARTICLEPt[PNum];intInp[4][7]={{0,6,2,4,1,3,5},{0,1,2,4,3,5,6},{0,3,6,5,4,2,1},{0,3,4,6,5,2,1}};doubleGetRandm(){return(double)(rand()/(double)RAND_MAX);}//3oE%?Ey%YvoidInitial(){GBIndex=0;for(inti=0;i<PNum;i++){Pt[i].X[0]=Inp[i][0];Pt[i].XBest[0]=Pt[i]。X[0];Pt[i].V[0]=0;for(intj=1;j〈Dim;j++){Pt[i].X[j]=Inp[i][j];Pt[i].XBest[j]=Pt[i]。X[j];//Pt[i].V[j]=0;Pt[i]。V[j]=(int)(10*GetRandm()+1)/1。5;//cout〈〈Pt[i].V[j]〈<ends;}Pt[i]。Fit=GetFit(Pt[i]);Pt[i]。FitBest=Pt[i].Fit;if(Pt[i].FitBest〈二Pt[GBIndex].FitBest){GBIndex二i;}}cout〈〈"GBIndex:"<<GBIndex〈〈endl;}intGetFit(PARTICLE&p){intsum=0;intfb=0;intfc=0;inti=0;do{sum+=A[p.X[i]][p.X[i+1]];fb+=B[p.X[i]][p.X[i+1]];if(C[p.X[i]][p.X[i+1]]<FC)fc=1000;//'0±HD。正i++;}while(i〈6&&p。X[i]!=6);if(fb〉FB){fb=1000;}elsefb=0;sum+二(fb+fc);returnsum;}voidCalculateFit(){for(inti=0;i〈PNum;i++){Pt[i].Fit=GetFit(Pt[i]);}}//A£XO?EDDN°00Xi0A^avoidBirdsFly(){staticintk=0;w=Wmax—k*(Wmax—Wmin)/Kmax;k++;cout<<”|iU"〈〈k〈<”,1口0,u£°”<〈endl;for(inti=0;i〈PNum;i++){if(w>GetRandm()){Update(Last,Pt[i]。V);}for(intj=0;j<Dim;j++)Pt[i]。V[j]=O;if(c1〉GetRandm

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論