日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

粒子群算法

 殷殤王朝 2015-01-08

優(yōu)化問題是工業(yè)設(shè)計(jì)中經(jīng)常遇到的問題,許多問題最后都可以歸結(jié)為優(yōu)化問題. 為了解決各種各樣的優(yōu)化問題,人們提出了許多優(yōu)化算法,比較著名的有爬山法、遺傳算法神經(jīng)網(wǎng)絡(luò)算法等.

優(yōu)化問題

一是要求尋找全局最優(yōu)點(diǎn),

二是要求有較高的收斂速度.

約束優(yōu)化問題

近年來,一些學(xué)者將PSO算法推廣到約束優(yōu)化問題,其關(guān)鍵在于如何處理好約束,即解的可行性。如果約束處理的不好,其優(yōu)化的結(jié)果往往會出現(xiàn)不能夠收斂和結(jié)果是空集的狀況。基于PSO算法的約束優(yōu)化工作主要分為兩類:

(1)罰函數(shù)法。罰函數(shù)的目的是將約束優(yōu)化問題轉(zhuǎn)化成無約束優(yōu)化問題。

(2)將粒子群的搜索范圍都限制在條件約束簇內(nèi),即在可行解范圍內(nèi)尋優(yōu)。

根據(jù)文獻(xiàn)介紹,Parsopoulos等采用罰函數(shù)法,利用非固定多段映射函數(shù)對約束優(yōu)化問題進(jìn)行轉(zhuǎn)化,再利用PSO算法求解轉(zhuǎn)化后問題,仿真結(jié)果顯示PSO算法相對遺傳算法更具有優(yōu)越性,但其罰函數(shù)的設(shè)計(jì)過于復(fù)雜,不利于求解;Hu等采用可行解保留政策處理約束,即一方面更新存儲中所有粒子時(shí)僅保留可行解,另一方面在初始化階段所有粒子均從可行解空間取值,然而初始可行解空間對于許多問題是很難確定的;Ray等提出了具有多層信息共享策略的粒子群原理來處理約束,根據(jù)約束矩陣采用多層Pareto排序機(jī)制來產(chǎn)生優(yōu)良粒子,進(jìn)而用一些優(yōu)良的粒子來決定其余個(gè)體的搜索方向。

但是,目前有關(guān)運(yùn)用PSO算法方便實(shí)用地處理多約束目標(biāo)優(yōu)化問題的理論成果還不多。處理多約束優(yōu)化問題的方法有很多,但用PSO算法處理此類問題目前技術(shù)并不成熟,這里就不介紹了。

遺傳算法

屬于進(jìn)化算法( Evolutionary Algorithms) 的一種,它通過模仿自然界的選擇與遺傳的機(jī)理來尋找最優(yōu)解. 遺傳算法有三個(gè)基本算子:選擇、交叉和變異. 但是遺傳算法的編程實(shí)現(xiàn)比較復(fù)雜,首先需要對問題進(jìn)行編碼,找到最優(yōu)解之后還需要對問題進(jìn)行解碼,另外三個(gè)算子的實(shí)現(xiàn)也有許多參數(shù),如交叉率和變異率,并且這些參數(shù)的選擇嚴(yán)重影響解的品質(zhì),而目前這些參數(shù)的選擇大部分是依靠經(jīng)驗(yàn)。

PSO算法

粒子群優(yōu)化算法(PSO)是一種進(jìn)化計(jì)算技術(shù)(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于對鳥群捕食的行為研究 。該算法最初是受到飛鳥集群活動(dòng)的規(guī)律性啟發(fā),進(jìn)而利用群體智能建立的一個(gè)簡化模型。粒子群算法在對動(dòng)物集群活動(dòng)行為觀察基礎(chǔ)上,利用群體中的個(gè)體對信息的共享使整個(gè)群體的運(yùn)動(dòng)在問題求解空間中產(chǎn)生從無序到有序的演化過程,從而獲得最優(yōu)解。

PSO同遺傳算法類似,是一種基于迭代的優(yōu)化算法。系統(tǒng)初始化為一組隨機(jī)解,通過迭代搜尋最優(yōu)值。但是它沒有遺傳算法用的交叉(crossover)以及變異(mutation),而是粒子在解空間追隨最優(yōu)的粒子進(jìn)行搜索。同遺傳算法比較,PSO的優(yōu)勢在于簡單容易實(shí)現(xiàn)并且沒有許多參數(shù)需要調(diào)整。目前已廣泛應(yīng)用于函數(shù)優(yōu)化,神經(jīng)網(wǎng)絡(luò)訓(xùn)練,模糊系統(tǒng)控制以及其他遺傳算法的應(yīng)用領(lǐng)域。

簡介

如前所述,PSO模擬鳥群的捕食行為。設(shè)想這樣一個(gè)場景:一群鳥隨機(jī)搜索食物。在這個(gè)區(qū)域里只有一塊食物。所有的鳥都不知道食物在那里。但是他們知道當(dāng)前的位置離食物還有多遠(yuǎn)。那么找到食物的最優(yōu)策略是什么呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區(qū)域。

PSO從這種模型中得到啟示并用于解決優(yōu)化問題。PSO中,每個(gè)優(yōu)化問題的解都是搜索空間中的一只鳥。我們稱之為“粒子”。所有的粒子都有一個(gè)由被優(yōu)化的函數(shù)決定的適應(yīng)值(fitness value),每個(gè)粒子還有一個(gè)速度決定他們飛翔的方向和距離。然后粒子們就追隨當(dāng)前的最優(yōu)粒子在解空間中搜索。

PSO 初始化為一群隨機(jī)粒子(隨機(jī)解)。然后通過迭代找到最優(yōu)解。在每一次迭代中,粒子通過跟蹤兩個(gè)"最優(yōu)解,這個(gè)解叫做個(gè)體極值pBest。另一個(gè)極值是整個(gè)種群目前找到的最優(yōu)解,這個(gè)極值是全局極值gBest。另外也可以不用整個(gè)種群而只是用其中一部分作為粒子的鄰居,那么在所有鄰居中的極值就是局部極值。

粒子公式

在找到這兩個(gè)最優(yōu)值時(shí),粒子根據(jù)如下的公式來更新自己的速度和新的位置:

v[] = w * v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[]) (a)

present[] = present[] + v[] (b)

v[] 是粒子的速度, w是慣性權(quán)重,persent[] 是當(dāng)前粒子的位置. pbest[] and gbest[] 如前定義 rand () 是介于(0, 1)之間的隨機(jī)數(shù). c1, c2 是學(xué)習(xí)因子. 通常 c1 = c2 = 2.

程序的偽代碼如下

For each particle

____Initialize particle

END

Do

____For each particle

________Calculate fitness value

________If the fitness value is better than the best fitness value (pBest) in history

____________set current value as the new pBest

____End

____Choose the particle with the best fitness value of all the particles as the gBest

____For each particle

________Calculate particle velocity according equation (a)

________Update particle position according equation (b)

____End

While maximum iterations or minimum error criteria is not attained

在每一維粒子的速度都會被限制在一個(gè)最大速度Vmax,如果某一維更新后的速度超過用戶設(shè)定的Vmax,那么這一維的速度就被限定為Vmax

"人工生命"是來研究具有某些生命基本特征的人工系統(tǒng)。

兩方面內(nèi)容

1. 研究如何利用計(jì)算技術(shù)研究生物現(xiàn)象

2. 研究如何利用生物技術(shù)研究計(jì)算問題

我們現(xiàn)在關(guān)注的是第二部分的內(nèi)容. 現(xiàn)在已經(jīng)有很多源于生物現(xiàn)象的計(jì)算技巧. 例如,人工神經(jīng)網(wǎng)絡(luò)是簡化的大腦模型. 遺傳算法是模擬基因進(jìn)化過程的.

社會系統(tǒng)

現(xiàn)在我們討論另一種生物系統(tǒng)- 社會系統(tǒng). 更確切的是, 在由簡單個(gè)體組成的群落與環(huán)境以及個(gè)體之間的互動(dòng)行為. 也可稱做"群智能"(swarm intelligence). 這些模擬系統(tǒng)利用局部信息從而可能產(chǎn)生不可預(yù)測的群體行為

例如floys 和birds 他們都用來模擬魚群和鳥群的運(yùn)動(dòng)規(guī)律, 主要用于計(jì)算機(jī)視覺和計(jì)算機(jī)輔助設(shè)計(jì).

在計(jì)算智能(computational intelligence)領(lǐng)域有兩種基于群智能的算法.蟻群算法(ant colony optimization)和PSO粒子群算法(particle swarm optimization). 前者是對螞蟻群落食物采集過程的模擬. 已經(jīng)成功運(yùn)用在很多離散優(yōu)化問題上.

粒子群優(yōu)化算法(PSO) 也是起源對簡單社會系統(tǒng)的模擬. 最初設(shè)想是模擬鳥群覓食的過程. 但后來發(fā)現(xiàn)PSO是一種很好的優(yōu)化工具.

演化計(jì)算技術(shù)

大多數(shù)演化計(jì)算技術(shù)都是用同樣的過程 :

1.種群隨機(jī)初始化

2. 對種群內(nèi)的每一個(gè)個(gè)體計(jì)算適應(yīng)值(fitness value).適應(yīng)值與最優(yōu)解的距離直接有關(guān)

3. 種群根據(jù)適應(yīng)值進(jìn)行復(fù)制

4. 如果終止條件滿足的話,就停止,否則轉(zhuǎn)步驟2

從以上步驟,我們可以看到PSO和GA有很多共同之處。兩者都隨機(jī)初始化種群,而且都使用適應(yī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 (or pBest) 給出信息給其他的粒子,這是單向的信息流動(dòng). 整個(gè)搜索更新過程是跟隨當(dāng)前最優(yōu)解的過程. 與遺傳算法比較, 在大多數(shù)的情況下,所有的粒子可能更快的收斂于最優(yōu)解

人工神經(jīng)網(wǎng)絡(luò)

人工神經(jīng)網(wǎng)絡(luò)(ANN)是模擬大腦分析過程的簡單數(shù)學(xué)模型,誤差反向傳播算法是最流行的神經(jīng)網(wǎng)絡(luò)訓(xùn)練算法。近來也有很多研究開始利用演化計(jì)算(evolutionary computation)技術(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ù)(fitness function)的選擇一般根據(jù)研究目的確定。例如在分類問題中,錯(cuò)誤分類的比率可以用來作為適應(yīng)值

演化計(jì)算的優(yōu)勢在于可以處理一些傳統(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é)果。而且還沒有遺傳算法碰到的問題

PSO訓(xùn)練過程

這里用一個(gè)簡單的例子說明PSO訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過程。這個(gè)例子使用分類問題的基準(zhǔn)函數(shù)(Benchmark function)IRIS數(shù)據(jù)集。(Iris 是一種鳶尾屬植物) 在數(shù)據(jù)記錄中,每組數(shù)據(jù)包含Iris花的四種屬性:萼片長度,萼片寬度,花瓣長度,和花瓣寬度,三種不同的花各有50組數(shù)據(jù). 這樣總共有150組數(shù)據(jù)或模式。

我們用3層的神經(jīng)網(wǎng)絡(luò)來做分類?,F(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ù)。對于分類問題,我們把所有的數(shù)據(jù)送入神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)的權(quán)重有粒子的參數(shù)決定。然后記錄所有的錯(cuò)誤分類的數(shù)目作為那個(gè)粒子的適應(yīng)值?,F(xiàn)在我們就利用PSO來訓(xùn)練神經(jīng)網(wǎng)絡(luò)來獲得盡可能低的錯(cuò)誤分類數(shù)目。PSO本身并沒有很多的參數(shù)需要調(diào)整。所以在實(shí)驗(yàn)中只需要調(diào)整隱含層的節(jié)點(diǎn)數(shù)目和權(quán)重的范圍以取得較好的分類效果。

從上面的例子我們可以看到應(yīng)用PSO解決優(yōu)化問題的過程中有兩個(gè)重要的步驟: 問題解的編碼和適應(yīng)度函數(shù)

采用實(shí)數(shù)編碼

不需要像遺傳算法一樣是二進(jìn)制編碼(或者采用針對實(shí)數(shù)的遺傳操作.例如對于問題 f(x) = x1^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í)對于大部分的問題10個(gè)粒子已經(jīng)足夠可以取得好的結(jié)果, 不過對于比較難的問題或者特定類別的問題, 粒子數(shù)可以取到100 或 200

粒子的長度: 這是由優(yōu)化問題決定, 就是問題解的長度

粒子的范圍: 由優(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í)會陷入局部最優(yōu). 后者收斂速度慢一點(diǎn)不過很難陷入局部最優(yōu). 在實(shí)際應(yīng)用中, 可以先用全局PSO找到大致的結(jié)果,再用局部PSO進(jìn)行搜索.

慣性權(quán)重

另外的一個(gè)參數(shù)是慣性權(quán)重, Shi 和Eberhart指出(A modified particle swarm optimizer,1998):當(dāng)Vmax很小時(shí)(對schaffer的f6函數(shù),Vmax<=2),使用接近于1的慣性權(quán)重;當(dāng)Vmax不是很小時(shí)(對schaffer的f6函數(shù),Vmax>=3),使用權(quán)重w=0.8較好.如果沒有Vmax的信息,使用0.8作為權(quán)重也是一種很好的選擇.慣性權(quán)重w很小時(shí)偏重于發(fā)揮粒子群算法的局部搜索能力;慣性權(quán)重很大時(shí)將會偏重于發(fā)揮粒子群算法的全局搜索能力。

實(shí)現(xiàn)C++代碼

代碼來自2008年數(shù)學(xué)建模東北賽區(qū)B題,

1

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

#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("data.txt");//關(guān)聯(lián)輸入文件

inf>>GdsCnt;//輸入物資總數(shù)

Input(inf);

Initial();

Run(outf,100);

system("pause");

return0;

}

voidCheck(PARTICLE&p,intcount)//參數(shù):p粒子對象,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)

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;

}

}

voidInput(ifstream&inf)//以inf為對象輸入數(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(Parr);

Parr.FitBest=Parr.Fit;

if(Parr.Fit>Parr[GBIndex].Fit)

GBIndex=i;

}

}

doubleGetFit(PARTICLE&p)//計(jì)算對象適應(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]);

Parr.V[j]+=(int)(c1*rand()/(double)RAND_MAX*(Parr.XBest[j]-Parr.X[j]);

Parr.V[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=Parr.Fit;

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è)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多