蚁群算法源代码1精编版Word下载.docx

上传人:b****6 文档编号:22149047 上传时间:2023-02-02 格式:DOCX 页数:17 大小:21.28KB
下载 相关 举报
蚁群算法源代码1精编版Word下载.docx_第1页
第1页 / 共17页
蚁群算法源代码1精编版Word下载.docx_第2页
第2页 / 共17页
蚁群算法源代码1精编版Word下载.docx_第3页
第3页 / 共17页
蚁群算法源代码1精编版Word下载.docx_第4页
第4页 / 共17页
蚁群算法源代码1精编版Word下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

蚁群算法源代码1精编版Word下载.docx

《蚁群算法源代码1精编版Word下载.docx》由会员分享,可在线阅读,更多相关《蚁群算法源代码1精编版Word下载.docx(17页珍藏版)》请在冰豆网上搜索。

蚁群算法源代码1精编版Word下载.docx

29. 

30./* 

31.//----------

(2)问题二:

Elion50 

427.96;

---------------------------- 

32.//该程序最好的结果是428.468,可运行多次获得 

33.//城市节点数目 

34.#define 

50 

35.//城市坐标 

36.double 

37. 

{5,64}, 

{5,25}, 

{5,6}, 

{7,38}, 

{8,52}, 

{10,17}, 

38. 

{12,42}, 

{13,13}, 

{16,57}, 

{17,33}, 

{17,63}, 

39. 

{20,26}, 

{21,47}, 

{21,10}, 

{25,32}, 

{25,55}, 

40. 

{27,68}, 

{27,23}, 

{30,48}, 

{30,15}, 

{31,62}, 

41. 

{31,32}, 

{32,22}, 

{32,39}, 

{36,16}, 

{37,69}, 

42. 

{37,52}, 

{38,46}, 

{39,10}, 

{40,30}, 

{42,57}, 

43. 

{42,41}, 

{43,67}, 

{45,35}, 

{46,10}, 

{48,28}, 

44. 

{49,49}, 

{51,21}, 

{52,33}, 

{52,41}, 

{52,64}, 

45. 

{56,37}, 

{57,58}, 

{58,27}, 

{58,48}, 

{59,15}, 

46. 

{61,33}, 

{62,42}, 

{62,63}, 

{63,69} 

47.};

48.//----------上面参数是固定的,下面的参数是可变的----------- 

49.//蚂蚁数量 

50.#define 

51.//最大循环次数NcMax 

52.int 

1000;

53.//信息启发因子,期望启发式因子,全局信息素挥发参数,局部信息素挥发参数, 

54.double 

4, 

55.//-----------问题二结束------------------------------------------------------------------------ 

56.*/ 

57. 

58.//----------(3)问题三:

Elion75 

542.31;

59.//该程序最好的结果是542.309,可运行多次获得 

60.//城市节点数目 

61.#define 

75 

62.//城市坐标 

63.double 

64.{6,25}, 

{7,43}, 

{9,56}, 

{10,70}, 

{11,28}, 

65.{12,17}, 

{12,38}, 

{15,5}, 

{15,14}, 

{15,56}, 

66.{16,19}, 

{17,64}, 

{20,30}, 

{21,48}, 

{21,45}, 

67.{21,36}, 

{22,53}, 

{22,22}, 

{26,29}, 

{26,13}, 

68.{26,59}, 

{27,24}, 

{29,39}, 

{30,50}, 

{30,20}, 

69.{30,60}, 

{31,76}, 

{33,34}, 

{33,44}, 

{35,51}, 

70.{35,16}, 

{35,60}, 

{36,6}, 

{36,26}, 

{38,33}, 

71.{40,37}, 

{40,66}, 

{40,60}, 

{40,20}, 

{41,46}, 

72.{43,26}, 

{44,13}, 

{45,42}, 

{47,66}, 

73.{48,21}, 

{50,30}, 

{50,40}, 

{50,50}, 

{50,70}, 

74.{50,4}, 

{50,15}, 

{51,42}, 

{52,26}, 

{54,38}, 

75.{54,10}, 

{55,34}, 

{55,45}, 

{55,50}, 

{55,65}, 

76.{55,57}, 

{55,20}, 

{57,72}, 

{59,5}, 

{60,15}, 

77.{62,57}, 

{62,48}, 

{62,35}, 

{62,24}, 

{64,4}, 

78.{65,27}, 

{66,14}, 

{66,8}, 

{67,41}, 

{70,64} 

79.};

80.//----------上面参数是固定的,下面的参数是可变的----------- 

81.//蚂蚁数量 

82.#define 

83.//最大循环次数NcMax 

84.int 

=1000;

85.//信息启发因子,期望启发式因子,全局信息素挥发参数,局部信息素挥发参数, 

86.double 

5, 

0.1;

87.//-----------问题三结束------------------------------------------------------------------------ 

88. 

89. 

90.//=========================================================================================================== 

91.//局部更新时候使用的的常量,它是由最近邻方法得到的一个长度 

92.//什么是最近邻方法?

:

)就是从源节点出发,每次选择一个距离最短的点来遍历所有的节点得到的路径 

93.//每个节点都可能作为源节点来遍历 

94.double 

Lnn;

95.//矩阵表示两两城市之间的距离 

96.double 

allDistance[N][N];

97. 

98.//计算两个城市之间的距离 

99.double 

calculateDistance(int 

i, 

int 

j) 

100.{ 

101. 

return 

sqrt(pow((C[i][0]-C[j][0]),2.0) 

pow((C[i][1]-C[j][1]),2.0));

102.} 

103. 

104.//由矩阵表示两两城市之间的距离 

105.void 

calculateAllDistance() 

106.{ 

107. 

for(int 

0;

<

N;

i++) 

108. 

109. 

j++) 

110. 

111. 

if 

(i 

!

112. 

113. 

allDistance[i][j] 

calculateDistance(i, 

j);

114. 

allDistance[j][i] 

allDistance[i][j];

115. 

116. 

117. 

118.} 

119. 

120.//获得经过n个城市的路径长度 

121.double 

calculateSumOfDistance(int* 

tour) 

122.{ 

123. 

double 

sum 

124. 

i<

;

125. 

126. 

row 

*(tour 

i);

127. 

col 

2* 

1);

128. 

+= 

allDistance[row][col];

129. 

130. 

sum;

131.} 

132. 

133.class 

ACSAnt;

134. 

135.class 

AntColonySystem 

136.{ 

137.private:

138. 

info[N][N], 

visible[N][N];

//节点之间的信息素强度,节点之间的能见度 

139.public:

140. 

AntColonySystem() 

141. 

142. 

143. 

//计算当前节点到下一节点转移的概率 

144. 

Transition(int 

145. 

//局部更新规则 

146. 

void 

UpdateLocalPathRule(int 

147. 

//初始化 

148. 

InitParameter(double 

value);

149. 

//全局信息素更新 

150. 

UpdateGlobalPathRule(int* 

bestTour, 

globalBestLength);

151.};

152. 

153.//计算当前节点到下一节点转移的概率 

154.double 

AntColonySystem:

155.{ 

156. 

157. 

158. 

(pow(info[i][j],alpha) 

pow(visible[i][j], 

beta));

159. 

160. 

else 

161. 

162. 

0.0;

163. 

164.} 

165.//局部更新规则 

166.void 

167.{ 

168. 

info[i][j] 

(1.0 

alpha1) 

(N 

Lnn));

169. 

info[j][i] 

info[i][j];

170.} 

171.//初始化 

172.void 

value) 

173.{ 

174. 

//初始化路径上的信息素强度tao0 

175. 

176. 

177. 

178. 

179. 

value;

180. 

181. 

182. 

183. 

visible[i][j] 

1.0 

184. 

visible[j][i] 

visible[i][j];

185. 

186. 

187. 

188.} 

189. 

190.//全局信息素更新 

191.void 

globalBestLength) 

192.{ 

193. 

194. 

195. 

*(bestTour 

196. 

197. 

info[row][col] 

rou) 

198. 

info[col][row] 

=info[row][col];

199. 

200.} 

201. 

202.class 

ACSAnt 

203.{ 

204.private:

205. 

AntColonySystem* 

antColony;

206.protected:

207. 

startCity, 

cururentCity;

//初始城市编号,当前城市编号 

208. 

allowed[N];

//禁忌表 

209. 

Tour[N][2];

//当前路径 

210. 

currentTourIndex;

//当前路径索引,从0开始,存储蚂蚁经过城市的编号 

211.public:

212. 

ACSAnt(AntColonySystem* 

acs, 

start) 

213. 

214. 

antColony 

acs;

215. 

startCity 

start;

216. 

217. 

//开始搜索 

218. 

int* 

Search();

219. 

//选择下一节点 

220. 

Choose();

221. 

//移动到下一节点 

222. 

MoveToNextCity(int 

nextCity);

223. 

224.};

225. 

226.//开始搜索 

227.int* 

ACSAnt:

Search() 

228.{ 

229. 

cururentCity 

startCity;

230. 

toCity;

231. 

currentTourIndex 

232. 

233. 

234. 

allowed[i] 

1;

235. 

236. 

allowed[cururentCity] 

237. 

endCity;

238. 

count 

239. 

do 

240. 

241. 

count++;

242. 

endCity 

243. 

toCity 

244. 

(toCity 

>

0) 

245. 

246. 

MoveToNextCity(toCity);

247. 

antColony->

UpdateLocalPathRule(endCity, 

toCity);

248. 

249. 

250. 

}while(toCity 

0);

251. 

MoveToNextCity(startCity);

252. 

startCity);

253. 

254. 

*Tour;

255.} 

256. 

257.//选择下一节点 

258.int 

Choose() 

259.{ 

260. 

nextCity 

-1;

261. 

rand()/(double)RAND_MAX;

262. 

//如果 

q0,按先验知识,否则则按概率转移, 

263. 

(q 

qzero) 

264. 

265. 

probability 

-1.0;

//转移到下一节点的概率 

266. 

267. 

268. 

//去掉禁忌表中已走过的节点,从剩下节点中选择最大概率的可行节点 

269. 

(1 

== 

allowed[i]) 

270. 

271. 

prob 

Transition(cururentCity, 

272. 

(prob 

probability) 

273. 

274. 

i;

275. 

prob;

276. 

277. 

278. 

279. 

280. 

281. 

282. 

//按概率转移 

283. 

//生成一个随机数,用来判断落在哪个区间段 

284. 

285. 

//概率的区间点,p 

落在哪个区间段,则该点是转移的方向 

286. 

//计算概率公式的分母的值 

287. 

288. 

289. 

290. 

291. 

292. 

293. 

294. 

295. 

296. 

allowed[j] 

&

297. 

298. 

j)/sum;

299

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

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1