优化算法人工蜂群算法ABCWord文档格式.doc

上传人:wj 文档编号:4642420 上传时间:2023-05-03 格式:DOC 页数:12 大小:245.76KB
下载 相关 举报
优化算法人工蜂群算法ABCWord文档格式.doc_第1页
第1页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第2页
第2页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第3页
第3页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第4页
第4页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第5页
第5页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第6页
第6页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第7页
第7页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第8页
第8页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第9页
第9页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第10页
第10页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第11页
第11页 / 共12页
优化算法人工蜂群算法ABCWord文档格式.doc_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

优化算法人工蜂群算法ABCWord文档格式.doc

《优化算法人工蜂群算法ABCWord文档格式.doc》由会员分享,可在线阅读,更多相关《优化算法人工蜂群算法ABCWord文档格式.doc(12页珍藏版)》请在冰点文库上搜索。

优化算法人工蜂群算法ABCWord文档格式.doc

cmath>

5.#include<

fstream>

6.#include<

iomanip>

7.using 

namespace 

std;

8. 

9.const 

int 

NP=40;

//种群的规模,采蜜蜂+观察蜂 

10.const 

FoodNumber=NP/2;

//食物的数量,为采蜜蜂的数量 

11.const 

limit=20;

//限度,超过这个限度没有更新采蜜蜂变成侦查蜂 

12.const 

maxCycle=10000;

//停止条件 

13. 

14./*****函数的特定参数*****/ 

15.const 

D=2;

//函数的参数个数 

16.const 

double 

lb=-100;

//函数的下界 

17.const 

ub=100;

//函数的上界 

18. 

19.double 

result[maxCycle]={0};

20. 

21./*****种群的定义****/ 

22.struct 

BeeGroup 

23.{ 

24. 

code[D];

//函数的维数 

25. 

trueFit;

//记录真实的最小值 

26. 

fitness;

27. 

rfitness;

//相对适应值比例 

28. 

trail;

//表示实验的次数,用于与limit作比较 

29.}Bee[FoodNumber];

30. 

31.BeeGroup 

NectarSource[FoodNumber];

//蜜源,注意:

一切的修改都是针对蜜源而言的 

32.BeeGroup 

EmployedBee[FoodNumber];

//采蜜蜂 

33.BeeGroup 

OnLooker[FoodNumber];

//观察蜂 

34.BeeGroup 

BestSource;

//记录最好蜜源 

35. 

36./*****函数的声明*****/ 

37.double 

random(double, 

double);

//产生区间上的随机数 

38.void 

initilize();

//初始化参数 

39.double 

calculationTruefit(BeeGroup);

//计算真实的函数值 

40.double 

calculationFitness(double);

//计算适应值 

41.void 

CalculateProbabilities();

//计算轮盘赌的概率 

42.void 

evalueSource();

//评价蜜源 

43.void 

sendEmployedBees();

44.void 

sendOnlookerBees();

45.void 

sendScoutBees();

46.void 

MemorizeBestSource();

47. 

48. 

49./*******主函数*******/ 

50.int 

main() 

51.{ 

52. 

ofstream 

output;

53. 

output.open("

dataABC.txt"

);

54. 

55. 

srand((unsigned)time(NULL));

56. 

//初始化 

57. 

//保存最好的蜜源 

58. 

59. 

//主要的循环 

60. 

gen=0;

61. 

while(gen<

maxCycle) 

62. 

63. 

64. 

65. 

66. 

67. 

68. 

69. 

70. 

71. 

72. 

73. 

74. 

75. 

output<

<

setprecision(30)<

BestSource.trueFit<

endl;

76. 

77. 

gen++;

78. 

79. 

80. 

output.close();

81. 

cout<

"

运行结束!

!

82. 

return 

0;

83.} 

84. 

85./*****函数的实现****/ 

86.double 

random(double 

start, 

end)//随机产生区间内的随机数 

87.{ 

88. 

start+(end-start)*rand()/(RAND_MAX 

1.0);

89.} 

90. 

91.void 

initilize()//初始化参数 

92.{ 

93. 

i,j;

94. 

for 

(i=0;

i<

FoodNumber;

i++) 

95. 

96. 

(j=0;

j<

D;

j++) 

97. 

98. 

NectarSource[i].code[j]=random(lb,ub);

99. 

EmployedBee[i].code[j]=NectarSource[i].code[j];

100. 

OnLooker[i].code[j]=NectarSource[i].code[j];

101. 

BestSource.code[j]=NectarSource[0].code[j];

102. 

103. 

/****蜜源的初始化*****/ 

104. 

NectarSource[i].trueFit=calculationTruefit(NectarSource[i]);

105. 

NectarSource[i].fitness=calculationFitness(NectarSource[i].trueFit);

106. 

NectarSource[i].rfitness=0;

107. 

NectarSource[i].trail=0;

108. 

/****采蜜蜂的初始化*****/ 

109. 

EmployedBee[i].trueFit=NectarSource[i].trueFit;

110. 

EmployedBee[i].fitness=NectarSource[i].fitness;

111. 

EmployedBee[i].rfitness=NectarSource[i].rfitness;

112. 

EmployedBee[i].trail=NectarSource[i].trail;

113. 

/****观察蜂的初始化****/ 

114. 

OnLooker[i].trueFit=NectarSource[i].trueFit;

115. 

OnLooker[i].fitness=NectarSource[i].fitness;

116. 

OnLooker[i].rfitness=NectarSource[i].rfitness;

117. 

OnLooker[i].trail=NectarSource[i].trail;

118. 

119. 

/*****最优蜜源的初始化*****/ 

120. 

BestSource.trueFit=NectarSource[0].trueFit;

121. 

BestSource.fitness=NectarSource[0].fitness;

122. 

BestSource.rfitness=NectarSource[0].rfitness;

123. 

BestSource.trail=NectarSource[0].trail;

124.} 

125. 

126.double 

calculationTruefit(BeeGroup 

bee)//计算真实的函数值 

127.{ 

128. 

truefit=0;

129. 

/******测试函数1******/ 

130. 

truefit=0.5+(sin(sqrt(bee.code[0]*bee.code[0]+bee.code[1]*bee.code[1]))*sin(sqrt(bee.code[0]*bee.code[0]+bee.code[1]*bee.code[1]))-0.5) 

131. 

/((1+0.001*(bee.code[0]*bee.code[0]+bee.code[1]*bee.code[1]))*(1+0.001*(bee.code[0]*bee.code[0]+bee.code[1]*bee.code[1])));

132. 

133. 

truefit;

134.} 

135. 

136.double 

calculationFitness(double 

truefit)//计算适应值 

137.{ 

138. 

fitnessResult=0;

139. 

if 

(truefit>

=0) 

140. 

141. 

fitnessResult=1/(truefit+1);

142. 

}else 

143. 

144. 

fitnessResult=1+abs(truefit);

145. 

146. 

fitnessResult;

147.} 

148. 

149.void 

sendEmployedBees()//修改采蜜蜂的函数 

150.{ 

151. 

i,j,k;

152. 

param2change;

//需要改变的维数 

153. 

Rij;

//[-1,1]之间的随机数 

154. 

155. 

156. 

157. 

param2change=(int)random(0,D);

//随机选取需要改变的维数 

158. 

159. 

/******选取不等于i的k********/ 

160. 

while 

(1) 

161. 

162. 

k=(int)random(0,FoodNumber);

163. 

(k!

=i) 

164. 

165. 

break;

166. 

167. 

168. 

169. 

170. 

171. 

172. 

173. 

174. 

/*******采蜜蜂去更新信息*******/ 

175. 

Rij=random(-1,1);

176. 

EmployedBee[i].code[param2change]=NectarSource[i].code[param2change]+Rij*(NectarSource[i].code[param2change]-NectarSource[k].code[param2change]);

177. 

/*******判断是否越界********/ 

178. 

(EmployedBee[i].code[param2change]>

ub) 

179. 

180. 

EmployedBee[i].code[param2change]=ub;

181. 

182. 

(EmployedBee[i].code[param2change]<

lb) 

183. 

184. 

EmployedBee[i].code[param2change]=lb;

185. 

186. 

EmployedBee[i].trueFit=calculationTruefit(EmployedBee[i]);

187. 

EmployedBee[i].fitness=calculationFitness(EmployedBee[i].trueFit);

188. 

189. 

/******贪婪选择策略*******/ 

190. 

(EmployedBee[i].trueFit<

NectarSource[i].trueFit) 

191. 

192. 

193. 

194. 

NectarSource[i].code[j]=EmployedBee[i].code[j];

195. 

196. 

197. 

NectarSource[i].trueFit=EmployedBee[i].trueFit;

198. 

NectarSource[i].fitness=EmployedBee[i].fitness;

199. 

200. 

201. 

NectarSource[i].trail++;

202. 

203. 

204.} 

205. 

206.void 

CalculateProbabilities()//计算轮盘赌的选择概率 

207.{ 

208. 

i;

209. 

maxfit;

210. 

maxfit=NectarSource[0].fitness;

211. 

(i=1;

212. 

213. 

(NectarSource[i].fitness>

maxfit) 

214. 

maxfit=NectarSource[i].fitness;

215. 

216. 

217. 

218. 

219. 

NectarSource[i].rfitness=(0.9*(NectarSource[i].fitness/maxfit))+0.1;

220. 

221.} 

222. 

223.void 

sendOnlookerBees()//采蜜蜂与观察蜂交流信息,观察蜂更改信息 

224.{ 

225. 

i,j,t,k;

226. 

R_choosed;

//被选中的概率 

227. 

//需要被改变的维数 

228. 

229. 

i=0;

230. 

t=0;

231. 

while(t<

FoodNumber) 

232. 

233. 

234. 

R_choosed=random(0,1);

235. 

if(R_choosed<

NectarSource[i].rfitness)//根据被选择的概率选择 

236. 

237. 

t++;

238. 

239. 

240. 

241. 

242. 

243. 

244. 

245. 

246. 

247. 

248. 

249. 

250. 

for(j=0;

251. 

252. 

253. 

254. 

255. 

/****更新******/ 

256. 

257. 

OnLooker[i].code[param2change]=NectarSource[i].code[param2change]+Rij*(NectarSource[i].code[param2change]-NectarSource[k].code[param2change]);

258. 

259. 

/*******判断是否越界*******/ 

260. 

(OnLooker[i].code[param2change]<

261. 

262. 

OnLooker[i].code[param2change]=lb;

263

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2