从蚁群算法探究群体智能在网络中的应用
------13307130006 陈伟嘉
摘要:论文通过蚁群算法引入群体智能的概念,探究群体智能在互联网上的应用,并给出笔者对其在生活中应用的展望。群体智能的推广运用就是web2.0的延伸,让更多的人的智慧参与到网络的搜寻与计算中,从而形成更加强大、有效的算法。相信随着科学技术的不断发展,网络对群体智能的运用能够让人们的生活更加信息化,更加便捷。
蚁群算法对目标函数没有任何可微甚至连续等特殊要求,因此可用予解非线性问题,能有效解决经典算法无法求解或求解极其复杂、代价暴贵且易予陷入局部极小的弊病。该算法
同时使用多只蚂蚁寻优,因此实质是一种隐含的并行算法,优化速度快,全局寻优能力强大。
图中白色区域为信息素密度较高区域,绿色为该区域的边缘。红色蚂蚁携带食物,橙色蚂蚁携带食物。
该图显示多数蚁群在“嗅”到信息素后,进入食物与nest之间信息素密度高的的路径,参与搬运食物。
以下通过一段蚁群问题的Netlogo代码分析其工作基本原理:
patches-own [ //设置信息素、食物、nest、信息素密度、食物的量值
chemical
food
nest?
nest-scent
food-source-number
]
;;;;;;;;;;;;;;;;;;;;;;;;
;;; Setup procedures ;;;
;;;;;;;;;;;;;;;;;;;;;;;;
to setup
clear-all
set-default-shape turtles "bug"
crtpopulation //设置蚂蚁
[set size 2
set color red ]
setup-patches
reset-ticks
end
to setup-patches //设置整个网格区域
askpatches
[setup-nest
setup-food
recolor-patch ]
end
to setup-nest //设置nest的位置,并使其周围的信息素密度最强。
set nest? (distancexy 0 0) < 5
setnest-scent 200 - distancexy 0 0
end
to setup-food //设置食物的位置和食物的大小
if(distancexy (0.6 * max-pxcor) 0) < 5
[set food-source-number 1 ]
if(distancexy (-0.6 * max-pxcor) (-0.6 * max-pycor)) < 5
[set food-source-number 2 ]
if(distancexy (-0.8 * max-pxcor) (0.8 * max-pycor)) < 5
[set food-source-number 3 ]
iffood-source-number > 0
[set food one-of [1 2] ]
end
to recolor-patch //通过颜色的不同显示信息素密度大小
ifelse nest?
[set pcolor violet ]
[ifelse food > 0
[if food-source-number = 1 [ set pcolor cyan ]
if food-source-number = 2 [ set pcolor sky ]
if food-source-number = 3 [ set pcolor blue ] ]
[set pcolor scale-color green chemical 0.1 5 ] ]
end
;;;;;;;;;;;;;;;;;;;;;
;;; Go procedures ;;;
;;;;;;;;;;;;;;;;;;;;;
to go
ask turtles
[if who >= ticks [ stop ]
ifelse color = red
[look-for-food ] //若蚂蚁没有携带食物,则令其寻找
[return-to-nest ] //若发现食物,则将其带回nest
wiggle
fd 1 ]
diffuse chemical (diffusion-rate / 100) //同时使信息素扩散,即让蚂蚁所在位置周围8个坐标的chemical的量增加1/8*(diffusion-rate/ 100)*chemical大小。该指令可达到传播信息素的效果。
askpatches
[set chemical chemical * (100 - evaporation-rate) / 100 //让每个patch上的chemical的量减少。模拟信息素随时间蒸发的效果。
recolor-patch ]
tick
end
to return-to-nest
ifelse nest?
[
set color red
rt 180 ]
[set chemical chemical + 60 //使chemical的值增加相应的量。模拟蚂蚁所经路程上信息素的量增加。
uphill-nest-scent ] //蚂蚁朝nest-scent的值最大的方向前进。模拟蚂蚁跟寻信息素密度强的方向。
end
to look-for-food
iffood > 0
[set color orange + 1 //拾起食物
set food food - 1 //并减少食物源的量
rt 180
stop ]
if(chemical >= 0.05) and (chemical < 2) //使蚂蚁朝向信息素密度最强的方向前进
[uphill-chemical ]
end
to uphill-chemical
letscent-ahead chemical-scent-at-angle 0
letscent-right chemical-scent-at-angle 45
letscent-left chemical-scent-at-angle -45
if(scent-right > scent-ahead) or (scent-left > scent-ahead)
[ifelse scent-right > scent-left
[rt 45 ]
[lt 45 ] ]
end
to uphill-nest-scent
letscent-ahead nest-scent-at-angle 0
letscent-right nest-scent-at-angle 45
letscent-left nest-scent-at-angle -45
if(scent-right > scent-ahead) or (scent-left > scent-ahead)
[ifelse scent-right > scent-left
[rt 45 ]
[lt 45 ] ]
end
to wiggle
rtrandom 40
ltrandom 40
ifnot can-move? 1 [ rt 180 ]
end
to-report nest-scent-at-angle [angle]
letp patch-right-and-ahead angle 1
ifp = nobody [ report 0 ]
report [nest-scent] of p
end
to-report chemical-scent-at-angle [angle]
letp patch-right-and-ahead angle 1
ifp = nobody [ report 0 ]
report [chemical] of p
end
....
下面是作业全文下载:陈伟嘉13307130006-从蚁群算法探究群体智能在网络中的应用.doc