从蚁群算法探究群体智能在网络中的应用- 陈伟嘉
发布时间: 2015-01-21 浏览次数: 217

从蚁群算法探究群体智能在网络中的应用

------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